Code

Updated smarty to 3.0rc1
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Sat, 1 May 2010 17:48:30 +0000 (17:48 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Sat, 1 May 2010 17:48:30 +0000 (17:48 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@18013 594d385d-05f5-0310-b6e9-bd551577e9d8

23 files changed:
gosa-core/include/smarty/Smarty.class.php
gosa-core/include/smarty/plugins/function.html_options.php
gosa-core/include/smarty/plugins/function.math.php
gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_for.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_foreach.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_block_plugin.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_print_expression.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php
gosa-core/include/smarty/sysplugins/smarty_internal_config.php
gosa-core/include/smarty/sysplugins/smarty_internal_config_file_compiler.php
gosa-core/include/smarty/sysplugins/smarty_internal_filter_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_register.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php
gosa-core/include/smarty/sysplugins/smarty_internal_smartytemplatecompiler.php
gosa-core/include/smarty/sysplugins/smarty_internal_template.php
gosa-core/include/smarty/sysplugins/smarty_internal_templatecompilerbase.php
gosa-core/include/smarty/sysplugins/smarty_internal_templatelexer.php
gosa-core/include/smarty/sysplugins/smarty_internal_templateparser.php
gosa-core/include/smarty/sysplugins/smarty_internal_utility.php

index 2d2ed357edd0c3efc8035c5ff21d67577c91021a..505f269fc96998d241e207f9dd92ae7eab2acf3b 100644 (file)
@@ -3,7 +3,7 @@
 /**
  * Project:     Smarty: the PHP compiling template engine
  * File:        Smarty.class.php
- * SVN:         $Id: Smarty.class.php 3508 2010-02-26 12:58:36Z Uwe.Tews $
+ * SVN:         $Id: Smarty.class.php 3557 2010-04-28 20:30:27Z Uwe.Tews $
  * 
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -108,7 +108,7 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
  */
 class Smarty extends Smarty_Internal_Data {
     // smarty version
-    const SMARTY_VERSION = 'Smarty3-b8'; 
+    const SMARTY_VERSION = '3.0rc1'; // SVN Rev: 3286
     // auto literal on delimiters with whitspace
     public $auto_literal = true; 
     // display error on not assigned variables
@@ -129,6 +129,8 @@ class Smarty extends Smarty_Internal_Data {
     public $force_compile = false; 
     // check template for modifications?
     public $compile_check = true; 
+    // locking concurrent compiles
+    public $compile_locking = true; 
     // use sub dirs for compiled/cached files?
     public $use_sub_dirs = false; 
     // compile_error?
@@ -159,7 +161,7 @@ class Smarty extends Smarty_Internal_Data {
     public $direct_access_security = true; 
     // debug mode
     public $debugging = false;
-    public $debugging_ctrl = 'URL';
+    public $debugging_ctrl = 'NONE';
     public $smarty_debug_id = 'SMARTY_DEBUG';
     public $debug_tpl = null; 
     // When set, smarty does uses this value as error_reporting-level.
@@ -167,7 +169,7 @@ class Smarty extends Smarty_Internal_Data {
     // config var settings
     public $config_overwrite = true; //Controls whether variables with the same name overwrite each other.
     public $config_booleanize = true; //Controls whether config values of on/true/yes and off/false/no get converted to boolean
-    public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file.                                                     
+    public $config_read_hidden = true; //Controls whether hidden config sections/vars are read from the file.                                                      
     // config vars
     public $config_vars = array(); 
     // assigned tpl vars
@@ -221,7 +223,8 @@ class Smarty extends Smarty_Internal_Data {
     // smarty object reference
     public $smarty = null; 
     // block data at template inheritance
-    public $block_data = array(); 
+    public $block_data = array();
+    public $block_data_stack = array(); 
     // block tag hierarchy
     public $_tag_stack = array(); 
     // plugins
@@ -310,6 +313,8 @@ class Smarty extends Smarty_Internal_Data {
             // get default Smarty data object
             $parent = $this;
         } 
+        array_push($this->block_data_stack, $this->block_data);
+        $this->block_data = array(); 
         // create template object if necessary
         ($template instanceof $this->template_class)? $_template = $template :
         $_template = $this->createTemplate ($template, $cache_id, $compile_id, $parent);
@@ -326,7 +331,7 @@ class Smarty extends Smarty_Internal_Data {
         } 
         // return redered template
         if (isset($this->autoload_filters['output']) || isset($this->registered_filters['output'])) {
-            $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_template->getRenderedTemplate(), $this);
+            $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_template->getRenderedTemplate(), $this, $_template);
         } else {
             $_output = $_template->getRenderedTemplate();
         } 
@@ -352,9 +357,11 @@ class Smarty extends Smarty_Internal_Data {
             if ($this->debugging) {
                 Smarty_Internal_Debug::display_debug($this);
             } 
+            $this->block_data = array_pop($this->block_data_stack);
             return;
         } else {
-          // return fetched content
+            // return fetched content
+            $this->block_data = array_pop($this->block_data_stack);
             return $_output;
         } 
     } 
@@ -466,7 +473,7 @@ class Smarty extends Smarty_Internal_Data {
      */
     public function disableSecurity()
     {
-        $this->security = true;
+        $this->security = false;
     } 
 
     /**
@@ -707,7 +714,7 @@ class Smarty extends Smarty_Internal_Data {
             // Smarty 2 BC
             $this->_version = self::SMARTY_VERSION;
             return $this->_version;
-        }      
+        } 
         return null;
     } 
 
@@ -751,21 +758,6 @@ class Smarty extends Smarty_Internal_Data {
             $this->wrapper = new Smarty_Internal_Wrapper($this);
         } 
         return $this->wrapper->convert($name, $args);
-
-        /*
-        $name = strtolower($name);
-        if ($name == 'smarty') {
-            throw new Exception('Please use parent::__construct() to call parent constuctor');
-        } 
-        $function_name = 'smarty_method_' . $name;
-        if (!is_callable($function_name)) {
-            if (!file_exists(SMARTY_SYSPLUGINS_DIR . $function_name . '.php')) {
-                throw new Exception('Undefined Smarty method "' . $name . '"');
-            } 
-            require_once(SMARTY_SYSPLUGINS_DIR . $function_name . '.php');
-        } 
-        return call_user_func_array($function_name, array_merge(array($this), $args));
-        */
     } 
 } 
 
index 69f56e8013820b4c6552768282c99b26c130d38a..85b05f7dce89a5151a2142f6a650773b72231d0b 100644 (file)
@@ -98,7 +98,7 @@ function smarty_function_html_options($params, $smarty, $template)
 function smarty_function_html_options_optoutput($key, $value, $selected)
 {
     if (!is_array($value)) {
-        $_html_result = '<option label="' . smarty_function_escape_special_chars($value) . '" value="' .
+        $_html_result = '<option value="' .
         smarty_function_escape_special_chars($key) . '"';
         if (in_array((string)$key, $selected))
             $_html_result .= ' selected="selected"';
index d7ac9f8f0e5faf96414819df601f59e479e49629..257d2fee1f8203aa056cd4abb5bfa19f0921c901 100644 (file)
@@ -39,7 +39,7 @@ function smarty_function_math($params, $smarty, $template)
     }
 
     // match all vars in equation, make sure all are passed
-    preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]+)!",$equation, $match);
+    preg_match_all("!(?:0x[a-fA-F0-9]+)|([a-zA-Z][a-zA-Z0-9_]*)!",$equation, $match);
     $allowed_funcs = array('int','abs','ceil','cos','exp','floor','log','log10',
                            'max','min','pi','pow','rand','round','sin','sqrt','srand','tan');
     
@@ -81,4 +81,4 @@ function smarty_function_math($params, $smarty, $template)
         }
     }
 }
-?>
+?>
\ No newline at end of file
index 57dcc00f6d792eec46132b8e40c3282b3dd80ca3..6e451038da3cd27e3bf611c4016899c6e6526191 100644 (file)
@@ -1,30 +1,30 @@
 <?php
 
 /**
-* Smarty Internal Plugin CacheResource File
-* 
-* Implements the file system as resource for the HTML cache
-* Version ussing nocache inserts
-* 
-* @package Smarty
-* @subpackage Cacher
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin CacheResource File
+ 
+ * Implements the file system as resource for the HTML cache
+ * Version ussing nocache inserts
+ 
+ * @package Smarty
+ * @subpackage Cacher
+ * @author Uwe Tews 
+ */
 
 /**
-* This class does contain all necessary methods for the HTML cache on file system
-*/
+ * This class does contain all necessary methods for the HTML cache on file system
+ */
 class Smarty_Internal_CacheResource_File {
     function __construct($smarty)
     {
         $this->smarty = $smarty;
     } 
     /**
-    * Returns the filepath of the cached template output
-    * 
-    * @param object $_template current template
-    * @return string the cache filepath
-    */
+     * Returns the filepath of the cached template output
+     
+     * @param object $_template current template
+     * @return string the cache filepath
+     */
     public function getCachedFilepath($_template)
     {
         $_source_file_path = str_replace(':', '.', $_template->getTemplateFilepath());
@@ -57,11 +57,11 @@ class Smarty_Internal_CacheResource_File {
     } 
 
     /**
-    * Returns the timpestamp of the cached template output
-    * 
-    * @param object $_template current template
-    * @return integer |booelan the template timestamp or false if the file does not exist
-    */
+     * Returns the timpestamp of the cached template output
+     
+     * @param object $_template current template
+     * @return integer |booelan the template timestamp or false if the file does not exist
+     */
     public function getCachedTimestamp($_template)
     { 
         // return @filemtime ($_template->getCachedFilepath());
@@ -69,11 +69,11 @@ class Smarty_Internal_CacheResource_File {
     } 
 
     /**
-    * Returns the cached template output
-    * 
-    * @param object $_template current template
-    * @return string |booelan the template content or false if the file does not exist
-    */
+     * Returns the cached template output
+     
+     * @param object $_template current template
+     * @return string |booelan the template content or false if the file does not exist
+     */
     public function getCachedContents($_template)
     {
         ob_start();
@@ -83,11 +83,11 @@ class Smarty_Internal_CacheResource_File {
     } 
 
     /**
-    * Writes the rendered template output to cache file
-    * 
-    * @param object $_template current template
-    * @return boolean status
-    */
+     * Writes the rendered template output to cache file
+     
+     * @param object $_template current template
+     * @return boolean status
+     */
     public function writeCachedContent($_template, $content)
     {
         if (!$_template->resource_object->isEvaluated) {
@@ -100,24 +100,24 @@ class Smarty_Internal_CacheResource_File {
     } 
 
     /**
-    * Empty cache folder
-    * 
-    * @param integer $exp_time expiration time
-    * @return integer number of cache files deleted
-    */
+     * Empty cache folder
+     
+     * @param integer $exp_time expiration time
+     * @return integer number of cache files deleted
+     */
     public function clearAll($exp_time = null)
     {
         return $this->clear(null, null, null, $exp_time);
     } 
     /**
-    * Empty cache for a specific template
-    * 
-    * @param string $resource_name template name
-    * @param string $cache_id cache id
-    * @param string $compile_id compile id
-    * @param integer $exp_time expiration time
-    * @return integer number of cache files deleted
-    */
+     * Empty cache for a specific template
+     
+     * @param string $resource_name template name
+     * @param string $cache_id cache id
+     * @param string $compile_id compile id
+     * @param integer $exp_time expiration time
+     * @return integer number of cache files deleted
+     */
     public function clear($resource_name, $cache_id, $compile_id, $exp_time)
     {
         $_cache_id = isset($cache_id) ? preg_replace('![^\w\|]+!', '_', $cache_id) : null;
@@ -131,9 +131,14 @@ class Smarty_Internal_CacheResource_File {
             $_cache_id_parts_count = count($_cache_id_parts);
         } 
         if (isset($resource_name)) {
-            $tpl = $this->smarty->createTemplate($resource_name);
+            $_save_stat = $this->smarty->caching;
+            $this->smarty->caching = true;
+            $tpl = new $this->smarty->template_class($resource_name, $this->smarty); 
+            // remove from template cache
+            unset($this->smarty->template_objects[crc32($tpl->template_resource . $tpl->cache_id . $tpl->compile_id)]);
+            $this->smarty->caching = $_save_stat;
             if ($tpl->isExisting()) {
-                $_resourcename_parts = basename(str_replace('^','/',$tpl->getCachedFilepath()));
+                $_resourcename_parts = basename(str_replace('^', '/', $tpl->getCachedFilepath()));
             } else {
                 return 0;
             } 
@@ -176,7 +181,7 @@ class Smarty_Internal_CacheResource_File {
                 // expired ?
                 if (isset($exp_time) && time() - @filemtime($_file) < $exp_time) {
                     continue;
-                }
+                } 
                 $_count += @unlink((string) $_file) ? 1 : 0;
             } 
         } 
@@ -184,4 +189,4 @@ class Smarty_Internal_CacheResource_File {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index ed6ab4f1fca2b9d43e1ddfaedcb42ceba821ac1d..875e17b724a0fc52e993c6aaaa157c1257739110 100644 (file)
@@ -41,7 +41,7 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
                 preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $c)) {
             $this->compiler->trigger_template_error('unmatched {block} {/block} pairs');
         } 
-        preg_match_all("!{$this->_ldl}block(.+?){$this->_rdl}|{$this->_ldl}/block.*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
+        preg_match_all("!{$this->_ldl}block(.+?){$this->_rdl}|{$this->_ldl}/block(.*?){$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
         $_result_count = count($_result[0]);
         $_start = 0;
         while ($_start < $_result_count) {
index 7b9889e242cebafbee07680808c3b55c56f7cebc..a85a52f3b0eadc76ba13c911f889721ec0cf5e96 100644 (file)
@@ -1,35 +1,35 @@
 <?php
 /**
-* Smarty Internal Plugin Compile For
-* 
-* Compiles the {for} {forelse} {/for} tags
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile For
+ 
+ * Compiles the {for} {forelse} {/for} tags
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Compile For Class
-*/
+ * Smarty Internal Plugin Compile For Class
+ */
 class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {for} tag
-    * 
-    * Smarty 3 does implement two different sytaxes:
-    * 
-    * - {for $var in $array}
-    * For looping over arrays or iterators
-    * 
-    * - {for $x=0; $x<$y; $x++}
-    * For general loops
-    * 
-    * The parser is gereration different sets of attribute by which this compiler can 
-    * determin which syntax is used.
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {for} tag
+     
+     * Smarty 3 does implement two different sytaxes:
+     
+     * - {for $var in $array}
+     * For looping over arrays or iterators
+     
+     * - {for $x=0; $x<$y; $x++}
+     * For general loops
+     
+     * The parser is gereration different sets of attribute by which this compiler can 
+     * determin which syntax is used.
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -52,11 +52,13 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
             foreach ($_attr['start'] as $_statement) {
                 $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
                 $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n";
+                $compiler->local_var[$_statement['var']] = true;
             } 
             $output .= "  if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[varloop]]->value$_attr[loop]){\n";
         } else {
             $_statement = $_attr['start'];
             $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
+            $compiler->local_var[$_statement['var']] = true;
             if (isset($_attr['step'])) {
                 $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = $_attr[step];";
             } else {
@@ -79,16 +81,16 @@ class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Forelse Class
-*/
+ * Smarty Internal Plugin Compile Forelse Class
+ */
 class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {forelse} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {forelse} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -102,16 +104,16 @@ class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Forclose Class
-*/
+ * Smarty Internal Plugin Compile Forclose Class
+ */
 class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/for} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/for} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -130,4 +132,4 @@ class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 09801fda5721c908147c002f3b4f702edcfcf90e..aac39f6482d72036e2b2f444097855ea68828aa1 100644 (file)
@@ -1,24 +1,24 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Foreach
-* 
-* Compiles the {foreach} {foreachelse} {/foreach} tags
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Foreach
+ 
+ * Compiles the {foreach} {foreachelse} {/foreach} tags
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Compile Foreach Class
-*/
+ * Smarty Internal Plugin Compile Foreach Class
+ */
 class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {foreach} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {foreach} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
@@ -28,9 +28,9 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         // check and get attributes
         $_attr = $this->_get_attributes($args);
 
-        $this->_open_tag('foreach', array('foreach',$this->compiler->nocache));
-               // maybe nocache because of nocache variables
-               $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
+        $this->_open_tag('foreach', array('foreach', $this->compiler->nocache)); 
+        // maybe nocache because of nocache variables
+        $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache;
 
         $from = $_attr['from'];
         $item = $_attr['item'];
@@ -44,12 +44,12 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         if (isset($_attr['name'])) {
             $name = $_attr['name'];
             $has_name = true;
-            $SmartyVarName = '$smarty.foreach.' . trim($name,'\'"') . '.';
+            $SmartyVarName = '$smarty.foreach.' . trim($name, '\'"') . '.';
         } else {
             $name = null;
             $has_name = false;
         } 
-        $ItemVarName = '$' . trim($item,'\'"') . '@';
+        $ItemVarName = '$' . trim($item, '\'"') . '@'; 
         // evaluates which Smarty variables and properties have to be computed
         if ($has_name) {
             $usesSmartyFirst = strpos($tpl->template_source, $SmartyVarName . 'first') !== false;
@@ -62,7 +62,7 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
             $usesSmartyFirst = false;
             $usesSmartyLast = false;
             $usesSmartyTotal = false;
-        }
+        } 
 
         $usesPropFirst = $usesSmartyFirst || strpos($tpl->template_source, $ItemVarName . 'first') !== false;
         $usesPropLast = $usesSmartyLast || strpos($tpl->template_source, $ItemVarName . 'last') !== false;
@@ -73,8 +73,10 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
         // generate output code
         $output = "<?php ";
         $output .= " \$_smarty_tpl->tpl_vars[$item] = new Smarty_Variable;\n";
+        $compiler->local_var[$item] = true;
         if ($key != null) {
             $output .= " \$_smarty_tpl->tpl_vars[$key] = new Smarty_Variable;\n";
+            $compiler->local_var[$key] = true;
         } 
         $output .= " \$_from = $from; if (!is_array(\$_from) && !is_object(\$_from)) { settype(\$_from, 'array');}\n";
         if ($usesPropTotal) {
@@ -135,16 +137,16 @@ class Smarty_Internal_Compile_Foreach extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile Foreachelse Class
-*/ 
+ * Smarty Internal Plugin Compile Foreachelse Class
+ */
 class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {foreachelse} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {foreachelse} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
@@ -152,33 +154,32 @@ class Smarty_Internal_Compile_Foreachelse extends Smarty_Internal_CompileBase {
         $_attr = $this->_get_attributes($args);
 
         list($_open_tag, $nocache) = $this->_close_tag(array('foreach'));
-        $this->_open_tag('foreachelse',array('foreachelse', $nocache));
+        $this->_open_tag('foreachelse', array('foreachelse', $nocache));
 
         return "<?php }} else { ?>";
     } 
 } 
 
 /**
-* Smarty Internal Plugin Compile Foreachclose Class
-*/ 
+ * Smarty Internal Plugin Compile Foreachclose Class
+ */
 class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/foreach} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/foreach} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler; 
         // check and get attributes
-        $_attr = $this->_get_attributes($args);
-
-               // must endblock be nocache?
-               if ($this->compiler->nocache) {
-               $this->compiler->tag_nocache = true;
-        }
+        $_attr = $this->_get_attributes($args); 
+        // must endblock be nocache?
+        if ($this->compiler->nocache) {
+            $this->compiler->tag_nocache = true;
+        } 
 
         list($_open_tag, $this->compiler->nocache) = $this->_close_tag(array('foreach', 'foreachelse'));
 
@@ -187,6 +188,6 @@ class Smarty_Internal_Compile_Foreachclose extends Smarty_Internal_CompileBase {
         else
             return "<?php }} ?>";
     } 
-}
+} 
 
-?>
+?>
\ No newline at end of file
index 56c586480ae02d4ff1ec25217a7e9577b7bb4444..86363b2b8be8c7b12fab04b7bba52fce48212380 100644 (file)
@@ -37,7 +37,7 @@ class Smarty_Internal_Compile_Function extends Smarty_Internal_CompileBase {
         // make function known for recursive calls
         $this->compiler->smarty->template_functions[$_name]['compiled'] = ''; 
         // Init temporay context
-        $compiler->template->required_plugins = array('compiled' => array(), 'cache' => array());
+        $compiler->template->required_plugins = array('compiled' => array(), 'nocache' => array());
         $compiler->template->extract_code = true;
         $compiler->template->extracted_compiled_code = '';
         $compiler->template->has_nocache_code = false;
@@ -75,11 +75,11 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
             } 
             $plugins_string .= '?>';
         } 
-        if (!empty($compiler->template->required_plugins['cache'])) {
+        if (!empty($compiler->template->required_plugins['nocache'])) {
             $plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php ";
             foreach($compiler->template->required_plugins['nocache'] as $tmp) {
                 foreach($tmp as $data) {
-                    $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
+                    $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n";
                 } 
             } 
             $plugins_string .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
@@ -97,4 +97,4 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 0656b77b66534b8d84782bbf1992be0ee4fc4186..436ba24720d9a11fb243b84ce00e2fb616ea94ec 100644 (file)
@@ -45,7 +45,7 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
             $this->compiler->nocache = $this->compiler->nocache | $this->compiler->tag_nocache; 
             // compile code
             if (is_array($function)) {
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func(array('{$function[0]}','{$function[1]}'),{$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(array('{$function[0]}','{$function[1]}'),(array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";
             } else {
                 $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
             } 
@@ -60,7 +60,7 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
             $this->compiler->has_output = true; 
             // compile code
             if (is_array($function)) {
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func(array('{$function[0]}','{$function[1]}'),({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(array('{$function[0]}','{$function[1]}'),(array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
             } else {
                 $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
             } 
@@ -69,4 +69,4 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
     } 
 } 
 
-?>
\ No newline at end of file
+?>
index 8e8ff9448a44d0fb76d015c60f7038530a3eba99..3cf90d8e9b0efa3943dfc0d83f9e0fb98d118f5a 100644 (file)
@@ -1,36 +1,38 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Object Funtion
-* 
-* Compiles code for registered objects as function
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Object Funtion
+ 
+ * Compiles code for registered objects as function
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Compile Object Function Class
-*/
+ * Smarty Internal Plugin Compile Object Function Class
+ */
 class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the execution of function plugin
-    * 
-    * @param array $args array with attributes from parser
-    * @param string $tag name of function
-    * @param string $methode name of methode to call
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the execution of function plugin
+     
+     * @param array $args array with attributes from parser
+     * @param string $tag name of function
+     * @param string $methode name of methode to call
+     * @param object $compiler compiler object
+     * @return string compiled code
+     */
     public function compile($args, $compiler, $tag, $methode)
     {
-        $this->compiler = $compiler; 
-        // This tag does create output
-        $this->compiler->has_output = true;
-
+        $this->compiler = $compiler;
         $this->required_attributes = array();
         $this->optional_attributes = array('_any'); 
         // check and get attributes
-        $_attr = $this->_get_attributes($args); 
+        $_attr = $this->_get_attributes($args);
+        $_assign = null;
+        if (isset($_attr['assign'])) {
+            $_assign = $_attr['assign'];
+            unset($_attr['assign']);
+        } 
         // convert attributes into parameter array string
         if ($this->compiler->smarty->registered_objects[$tag][2]) {
             $_paramsArray = array();
@@ -42,13 +44,19 @@ class Smarty_Internal_Compile_Private_Object_Function extends Smarty_Internal_Co
                 } 
             } 
             $_params = 'array(' . implode(",", $_paramsArray) . ')';
-            $output = "<?php echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
+            $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl)";
         } else {
             $_params = implode(",", $_attr);
-            $output = "<?php echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params});?>\n";
+            $return = "\$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params})";
         } 
+        if (empty($_assign)) {
+            // This tag does create output
+            $this->compiler->has_output = true;
+            $output = "<?php echo {$return};?>\n";
+        } else {
+            $output = "<?php \$_smarty_tpl->assign({$_assign},{$return});?>\n";
+       }
         return $output;
     } 
 } 
-
-?>
+?>
\ No newline at end of file
index 7cfe473d8a860c9aacc17ad11d5dae876f68cc00..7f72a76d1014077a09d22c5b195a0b765b638701 100644 (file)
@@ -49,7 +49,7 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
             // display value
             $this->compiler->has_output = true;
             if (isset($this->compiler->smarty->registered_filters['variable'])) {
-                $output = '<?php echo Smarty_Internal_Filter_Handler::runFilter(\'variable\', ' . $_attr['value'] . ',$this->smarty, ' . $_attr['filter'] . ');?>';
+                $output = '<?php echo Smarty_Internal_Filter_Handler::runFilter(\'variable\', ' . $_attr['value'] . ',$_smarty_tpl->smarty, $_smarty_tpl, ' . $_attr['filter'] . ');?>';
             } else {
                 $output = '<?php echo ' . $_attr['value'] . ';?>';
             } 
@@ -58,4 +58,4 @@ class Smarty_Internal_Compile_Private_Print_Expression extends Smarty_Internal_C
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 300764d9cdb5f5e488cfe95df223b36f52fe8e22..3ad4d2fab141271131b077f7d8b641741e5df368 100644 (file)
@@ -48,9 +48,9 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             if (!is_array($function)) {\r
                 $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
             } else if (is_object($function[0])) {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func(\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0],{$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(\$_smarty_tpl->smarty->registered_plugins['block']['{$tag}'][0],array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";\r
             } else {\r
-                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func(array('{$function[0]}','{$function[1]}'),{$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";\r
+                $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}', {$_params}); \$_block_repeat=true; call_user_func_array(array('{$function[0]}','{$function[1]}'),array({$_params}, null, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl));while (\$_block_repeat) { ob_start();?>";\r
             } \r
         } else {\r
             // must endblock be nocache?\r
@@ -67,9 +67,9 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             if (!is_array($function)) {\r
                 $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo {$function}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } else if (is_object($function[0])) {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func(\$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0],{$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(\$_smarty_tpl->smarty->registered_plugins['block']['{$base_tag}'][0],array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } else {\r
-                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func(array('{$function[0]}','{$function[1]}'),{$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
+                $output = "<?php \$_block_content = ob_get_clean(); \$_block_repeat=false; echo call_user_func_array(array('{$function[0]}','{$function[1]}'),array({$_params}, \$_block_content, \$_smarty_tpl->smarty, &\$_block_repeat, \$_smarty_tpl)); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";\r
             } \r
         } \r
         return $output."\n";\r
index 31b410857cd09b79ff59a06da8945755a24e0ec9..3141e79319e4e7482faac788d76590b4df8d3aa2 100644 (file)
@@ -1,14 +1,14 @@
 <?php
 /**
-* Smarty Internal Plugin Config
-* 
-* Main class for config variables
-* 
-* @ignore 
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Config
+ 
+ * Main class for config variables
+ 
+ * @ignore 
+ * @package Smarty
+ * @subpackage Config
+ * @author Uwe Tews 
+ */
 class Smarty_Internal_Config {
     static $config_objects = array();
 
@@ -85,23 +85,23 @@ class Smarty_Internal_Config {
         } 
         // check for absolute path
         if (file_exists($this->config_resource_name))
-            return $this->config_resource_name;
+            return $this->config_resource_name; 
         // no tpl file found
         throw new Exception("Unable to load config file \"{$this->config_resource_name}\"");
         return false;
     } 
     /**
-    * Read config file source
-    * 
-    * @return string content of source file
-    */
+     * Read config file source
+     
+     * @return string content of source file
+     */
     /**
-    * Returns the template source code
-    * 
-    * The template source is being read by the actual resource handler
-    * 
-    * @return string the template source
-    */
+     * Returns the template source code
+     
+     * The template source is being read by the actual resource handler
+     
+     * @return string the template source
+     */
     public function getConfigSource ()
     {
         if ($this->config_source === null) {
@@ -123,10 +123,10 @@ class Smarty_Internal_Config {
     } 
 
     /**
-    * Returns the compiled  filepath
-    * 
-    * @return string the compiled filepath
-    */
+     * Returns the compiled  filepath
+     
+     * @return string the compiled filepath
+     */
     public function getCompiledFilepath ()
     {
         return $this->compiled_filepath === null ?
@@ -152,10 +152,10 @@ class Smarty_Internal_Config {
         return $_compile_dir . $_filepath . '.' . basename($this->config_resource_name) . '.config' . '.php';
     } 
     /**
-    * Returns the timpestamp of the compiled file
-    * 
-    * @return integer the file timestamp
-    */
+     * Returns the timpestamp of the compiled file
+     
+     * @return integer the file timestamp
+     */
     public function getCompiledTimestamp ()
     {
         return $this->compiled_timestamp === null ?
@@ -163,25 +163,25 @@ class Smarty_Internal_Config {
         $this->compiled_timestamp;
     } 
     /**
-    * Returns if the current config file must be compiled 
-    * 
-    * It does compare the timestamps of config source and the compiled config and checks the force compile configuration
-    * 
-    * @return boolean true if the file must be compiled
-    */
+     * Returns if the current config file must be compiled 
+     
+     * It does compare the timestamps of config source and the compiled config and checks the force compile configuration
+     
+     * @return boolean true if the file must be compiled
+     */
     public function mustCompile ()
     {
         return $this->mustCompile === null ?
-        $this->mustCompile = ($this->smarty->force_compile || $this->getCompiledTimestamp () !== $this->getTimestamp ()):
+        $this->mustCompile = ($this->smarty->force_compile || $this->smarty->compile_check && $this->getCompiledTimestamp () !== $this->getTimestamp ()):
         $this->mustCompile;
     } 
     /**
-    * Returns the compiled config file 
-    * 
-    * It checks if the config file must be compiled or just read the compiled version
-    * 
-    * @return string the compiled config file
-    */
+     * Returns the compiled config file 
+     
+     * It checks if the config file must be compiled or just read the compiled version
+     
+     * @return string the compiled config file
+     */
     public function getCompiledConfig ()
     {
         if ($this->compiled_config === null) {
@@ -196,8 +196,8 @@ class Smarty_Internal_Config {
     } 
 
     /**
-    * Compiles the config files
-    */
+     * Compiles the config files
+     */
     public function compileConfigSource ()
     { 
         // compile template
@@ -205,18 +205,26 @@ class Smarty_Internal_Config {
             // load compiler
             $this->compiler_object = new Smarty_Internal_Config_File_Compiler($this->smarty);
         } 
+        // compile locking
+        if ($this->smarty->compile_locking) {
+            if ($saved_timestamp = $this->getCompiledTimestamp()) {
+                touch($this->getCompiledFilepath());
+            } 
+        } 
         // call compiler
-        if ($this->compiler_object->compileSource($this)) {
-            // compiling succeded
-            // write compiled template
-            Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty); 
-            // make template and compiled file timestamp match
-            touch($this->getCompiledFilepath(), $this->getTimestamp());
-        } else {
-            // error compiling template
-            throw new Exception("Error compiling template {$this->getConfigFilepath ()}");
-            return false;
+        try {
+            $this->compiler_object->compileSource($this);
         } 
+        catch (Exception $e) {
+            // restore old timestamp in case of error
+            if ($this->smarty->compile_locking && $saved_timestamp) {
+                touch($this->getCompiledFilepath(), $saved_timestamp);
+            } 
+            throw $e;
+        } 
+        // compiling succeded
+        // write compiled template
+        Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->getCompiledConfig(), $this->smarty);
     } 
 
     /*
@@ -232,10 +240,12 @@ class Smarty_Internal_Config {
         } else {
             $this->smarty->properties['file_dependency'][sha1($this->getConfigFilepath())] = array($this->getConfigFilepath(), $this->getTimestamp());
         } 
-        $config_data = unserialize($this->getCompiledConfig()); 
-        // var_dump($config_data);
+        if ($this->mustCompile()) {
+            $this->compileConfigSource();
+        } 
+        include($this->getCompiledFilepath ());
         // copy global config vars
-        foreach ($config_data['vars'] as $variable => $value) {
+        foreach ($_config_vars['vars'] as $variable => $value) {
             if ($this->smarty->config_overwrite || !isset($scope->config_vars[$variable])) {
                 $scope->config_vars[$variable] = $value;
             } else {
@@ -243,9 +253,9 @@ class Smarty_Internal_Config {
             } 
         } 
         // scan sections
-        foreach ($config_data['sections'] as $this_section => $dummy) {
+        foreach ($_config_vars['sections'] as $this_section => $dummy) {
             if ($sections == null || in_array($this_section, (array)$sections)) {
-                foreach ($config_data['sections'][$this_section]['vars'] as $variable => $value) {
+                foreach ($_config_vars['sections'][$this_section]['vars'] as $variable => $value) {
                     if ($this->smarty->config_overwrite || !isset($scope->config_vars[$variable])) {
                         $scope->config_vars[$variable] = $value;
                     } else {
@@ -257,4 +267,4 @@ class Smarty_Internal_Config {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 1547911152d4caa0767ae46b0061b2800fd551da..17cfc81ce3e476af50f2ad9d326888cfee640ea0 100644 (file)
@@ -1,23 +1,22 @@
 <?php
 
 /**
-* Smarty Internal Plugin Config File Compiler
-* 
-* This is the config file compiler class. It calls the lexer and parser to
-* perform the compiling.
-* 
-* @package Smarty
-* @subpackage Config
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Config File Compiler
+ 
+ * This is the config file compiler class. It calls the lexer and parser to
+ * perform the compiling.
+ 
+ * @package Smarty
+ * @subpackage Config
+ * @author Uwe Tews 
+ */
 /**
-* Main config file compiler class
-*/
+ * Main config file compiler class
+ */
 class Smarty_Internal_Config_File_Compiler {
-   public $compile_error= false;
-   /**
-    * Initialize compiler
-    */
+    /**
+     * Initialize compiler
+     */
     public function __construct($smarty)
     {
         $this->smarty = $smarty; 
@@ -29,54 +28,47 @@ class Smarty_Internal_Config_File_Compiler {
     } 
 
     /**
-    * Methode to compile a Smarty template
-    * 
-    * @param  $template template object to compile
-    * @return bool true if compiling succeeded, false if it failed
-    */
+     * Methode to compile a Smarty template
+     
+     * @param  $template template object to compile
+     * @return bool true if compiling succeeded, false if it failed
+     */
     public function compileSource($config)
     {
         /* here is where the compiling takes place. Smarty
        tags in the templates are replaces with PHP code,
-       then written to compiled files. */ 
-       $this->config = $config; 
-       // get config file source
-        $_content = $config->getConfigSource()."\n";
+       then written to compiled files. */
+        $this->config = $config; 
+        // get config file source
+        $_content = $config->getConfigSource() . "\n"; 
         // on empty template just return
         if ($_content == '') {
             return true;
         } 
         // init the lexer/parser to compile the config file
         $lex = new Smarty_Internal_Configfilelexer($_content, $this->smarty);
-        $parser = new Smarty_Internal_Configfileparser($lex, $this); 
-        // $parser->PrintTrace();
+        $parser = new Smarty_Internal_Configfileparser($lex, $this);
+        if (isset($this->smarty->_parserdebug)) $parser->PrintTrace(); 
         // get tokens from lexer and parse them
         while ($lex->yylex()) {
-            // echo "<br>Parsing  {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
+            if (isset($this->smarty->_parserdebug)) echo "<br>Parsing  {$parser->yyTokenName[$lex->token]} Token {$lex->value} Line {$lex->line} \n";
             $parser->doParse($lex->token, $lex->value);
         } 
         // finish parsing process
         $parser->doParse(0, 0);
-
-        $config->compiled_config = serialize($this->config_data);
-        if (!$this->compile_error) {
-            return true;
-        } else {
-            // compilation error
-            return false;
-        } 
+        $config->compiled_config = '<?php $_config_vars = ' . var_export($this->config_data, true) . '; ?>';
     } 
     /**
-    * display compiler error messages without dying
-    * 
-    * If parameter $args is empty it is a parser detected syntax error.
-    * In this case the parser is called to obtain information about exspected tokens.
-    * 
-    * If parameter $args contains a string this is used as error message
-    * 
-    * @todo output exact position of parse error in source line
-    * @param  $args string individual error message or null
-    */
+     * display compiler error messages without dying
+     
+     * If parameter $args is empty it is a parser detected syntax error.
+     * In this case the parser is called to obtain information about exspected tokens.
+     
+     * If parameter $args contains a string this is used as error message
+     
+     * @todo output exact position of parse error in source line
+     * @param  $args string individual error message or null
+     */
     public function trigger_config_file_error($args = null)
     {
         $this->lex = Smarty_Internal_Configfilelexer::instance();
@@ -84,7 +76,7 @@ class Smarty_Internal_Config_File_Compiler {
         // get template source line which has error
         $line = $this->lex->line;
         if (isset($args)) {
-//            $line--;
+            // $line--;
         } 
         $match = preg_split("/\n/", $this->lex->data);
         $error_text = "Syntax error in config file '{$this->config->getConfigFilepath()}' on line {$line} '{$match[$line-1]}' ";
@@ -107,10 +99,7 @@ class Smarty_Internal_Config_File_Compiler {
             $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);
         } 
         throw new Exception($error_text);
-        // set error flag
-        $this->compile_error = true;
     } 
-
 } 
 
-?>
+?>
\ No newline at end of file
index a8a43d48d32339a959ceeceb14bd0dbb7e3a9a42..0ab058cbb51143ce7cb6e57ab611832b0f8e3e87 100644 (file)
@@ -26,7 +26,7 @@ class Smarty_Internal_Filter_Handler {
      * @param string $content the content which shall be processed by the filters
      * @return string the filtered content
      */
-    static function runFilter($type, $content, $smarty, $flag = null)
+    static function runFilter($type, $content, $smarty, $template, $flag = null)
     {
         $output = $content;
         if ($type != 'variable' || ($smarty->variable_filter && $flag !== false) || $flag === true) {
@@ -40,7 +40,7 @@ class Smarty_Internal_Filter_Handler {
                             $output = $plugin_name($output, $smarty);
                         } elseif (class_exists($plugin_name, false)) {
                             // loaded class of filter plugin
-                            $output = call_user_func(array($plugin_name, 'execute'), $output, $smarty);
+                            $output = call_user_func(array($plugin_name, 'execute'), $output, $smarty, $template);
                         } 
                     } else {
                         // nothing found, throw exception
@@ -52,9 +52,9 @@ class Smarty_Internal_Filter_Handler {
             if (!empty($smarty->registered_filters[$type])) {
                 foreach ($smarty->registered_filters[$type] as $key => $name) {
                     if (is_array($smarty->registered_filters[$type][$key])) {
-                        $output = call_user_func($smarty->registered_filters[$type][$key], $output, $smarty);
+                        $output = call_user_func($smarty->registered_filters[$type][$key], $output, $smarty, $template);
                     } else {
-                        $output = $smarty->registered_filters[$type][$key]($output, $smarty);
+                        $output = $smarty->registered_filters[$type][$key]($output, $smarty, $template);
                     } 
                 } 
             } 
index 67df1918167e82128a220882247502f9ab8bdeef..fb43d6fcf0e314f42952a32009f82de9e1c6d4d6 100644 (file)
@@ -108,9 +108,9 @@ class Smarty_Internal_Register {
     function modifier($modifier_name, $modifier_impl)
     {
         if (isset($this->smarty->registered_plugins['modifier'][$modifier_name])) {
-            throw new Exception("Plugin \"{$modifier}\" already registered");
+            throw new Exception("Plugin \"{$modifier_name}\" already registered");
         } elseif (!is_callable($modifier_impl)) {
-            throw new Exception("Plugin \"{$modifier}\" not callable");
+            throw new Exception("Plugin \"{$modifier_name}\" not callable");
         } else {
             $this->smarty->registered_plugins['modifier'][$modifier_name] =
             array($modifier_impl);
index 64526346ae33f998e53f07b82c8c8ca13f94b4ac..c4f588a66467ed9689efc6424ab2400cfcc74e89 100644 (file)
@@ -102,7 +102,7 @@ class Smarty_Internal_Resource_Extends {
                         preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $_close)) {
                     $this->smarty->trigger_error("unmatched {block} {/block} pairs in file '$_filepath'");
                 } 
-                preg_match_all("!{$this->_ldl}block(.+?){$this->_rdl}|{$this->_ldl}/block.*{$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
+                preg_match_all("!{$this->_ldl}block(.+?){$this->_rdl}|{$this->_ldl}/block(.*?){$this->_rdl}!", $_content, $_result, PREG_OFFSET_CAPTURE);
                 $_result_count = count($_result[0]);
                 $_start = 0;
                 while ($_start < $_result_count) {
index a6b7e7c3b215d542a6e11b38f533326b47e70488..25e92d9658c48684afccd6641245a9b4e2fa0a0b 100644 (file)
@@ -1,22 +1,24 @@
 <?php
 
 /**
-* Smarty Internal Plugin Smarty Template Compiler Base
-* 
-* This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Smarty Template Compiler Base
+ 
+ * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 require_once("smarty_internal_parsetree.php");
 /**
-* Class SmartyTemplateCompiler
-*/
+ * Class SmartyTemplateCompiler
+ */
 class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCompilerBase {
+    // array of vars which can be compiled in local scope
+    public $local_var = array();
     /**
-    * Initialize compiler
-    */
+     * Initialize compiler
+     */
     public function __construct($lexer_class, $parser_class, $smarty)
     {
         $this->smarty = $smarty;
@@ -27,11 +29,11 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
     } 
 
     /**
-    * Methode to compile a Smarty template
-    * 
-    * @param  $_content template source
-    * @return bool true if compiling succeeded, false if it failed
-    */
+     * Methode to compile a Smarty template
+     
+     * @param  $_content template source
+     * @return bool true if compiling succeeded, false if it failed
+     */
     protected function doCompile($_content)
     {
         /* here is where the compiling takes place. Smarty
@@ -39,11 +41,11 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
        then written to compiled files. */ 
         // init the lexer/parser to compile the template
         $this->lex = new $this->lexer_class($_content, $this);
-        $this->parser = new $this->parser_class($this->lex, $this); 
-        if (isset($this->smarty->_parserdebug)) $this->parser->PrintTrace();
+        $this->parser = new $this->parser_class($this->lex, $this);
+        if (isset($this->smarty->_parserdebug)) $this->parser->PrintTrace(); 
         // get tokens from lexer and parse them
         while ($this->lex->yylex() && !$this->abort_and_recompile) {
-            if (isset($this->smarty->_parserdebug)) echo "<pre>Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token ".htmlentities($this->lex->value)."</pre>";
+            if (isset($this->smarty->_parserdebug)) echo "<pre>Line {$this->lex->line} Parsing  {$this->parser->yyTokenName[$this->lex->token]} Token " . htmlentities($this->lex->value) . "</pre>";
             $this->parser->doParse($this->lex->token, $this->lex->value);
         } 
 
@@ -59,15 +61,9 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
             list($_open_tag, $_data) = array_pop($this->_tag_stack);
             $this->trigger_template_error("unclosed {" . $_open_tag . "} tag");
         } 
-
-        if (!$this->compile_error) {
-            // return compiled code
-            // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
-            return $this->parser->retvalue;
-        } else {
-            // compilation error
-            return false;
-        } 
+        // return compiled code
+        // return str_replace(array("? >\n<?php","? ><?php"), array('',''), $this->parser->retvalue);
+        return $this->parser->retvalue;
     } 
 } 
 
index 60bb8a982506166a8e1c3c11d943705341c9afd6..3dfd3f317c47d1b9aa89741fc18c3696713eda2e 100644 (file)
@@ -1,18 +1,18 @@
 <?php
 
 /**
-* Smarty Internal Plugin Template
-* 
-* This file contains the Smarty template engine
-* 
-* @package Smarty
-* @subpackage Templates
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Template
+ 
+ * This file contains the Smarty template engine
+ 
+ * @package Smarty
+ * @subpackage Templates
+ * @author Uwe Tews 
+ */
 
 /**
-* Main class with template data structures and methods
-*/
+ * Main class with template data structures and methods
+ */
 class Smarty_Internal_Template extends Smarty_Internal_Data {
     // object cache
     public $compiler_object = null;
@@ -65,22 +65,22 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     public $properties = array ('file_dependency' => array(),
         'nocache_hash' => '',
         'function' => array()); 
-    // storage for block data
-    public $block_data = array(); 
     // required plugins
     public $required_plugins = array('compiled' => array(), 'nocache' => array());
-
+    public $security = false;
+    public $saved_modifier = null;
+    public $smarty = null;
     /**
-    * Create template data object
-    * 
-    * Some of the global Smarty settings copied to template scope
-    * It load the required template resources and cacher plugins
-    * 
-    * @param string $template_resource template resource string
-    * @param object $_parent back pointer to parent object with variables or null
-    * @param mixed $_cache_id cache id or null
-    * @param mixed $_compile_id compile id or null
-    */
+     * Create template data object
+     
+     * Some of the global Smarty settings copied to template scope
+     * It load the required template resources and cacher plugins
+     
+     * @param string $template_resource template resource string
+     * @param object $_parent back pointer to parent object with variables or null
+     * @param mixed $_cache_id cache id or null
+     * @param mixed $_compile_id compile id or null
+     */
     public function __construct($template_resource, $smarty, $_parent = null, $_cache_id = null, $_compile_id = null, $_caching = null, $_cache_lifetime = null)
     {
         $this->smarty = &$smarty; 
@@ -109,12 +109,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the template filepath
-    * 
-    * The template filepath is determined by the actual resource handler
-    * 
-    * @return string the template filepath
-    */
+     * Returns the template filepath
+     
+     * The template filepath is determined by the actual resource handler
+     
+     * @return string the template filepath
+     */
     public function getTemplateFilepath ()
     {
         return $this->template_filepath === null ?
@@ -123,12 +123,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the timpestamp of the template source
-    * 
-    * The template timestamp is determined by the actual resource handler
-    * 
-    * @return integer the template timestamp
-    */
+     * Returns the timpestamp of the template source
+     
+     * The template timestamp is determined by the actual resource handler
+     
+     * @return integer the template timestamp
+     */
     public function getTemplateTimestamp ()
     {
         return $this->template_timestamp === null ?
@@ -137,12 +137,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the template source code
-    * 
-    * The template source is being read by the actual resource handler
-    * 
-    * @return string the template source
-    */
+     * Returns the template source code
+     
+     * The template source is being read by the actual resource handler
+     
+     * @return string the template source
+     */
     public function getTemplateSource ()
     {
         if ($this->template_source === null) {
@@ -154,12 +154,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns if the  template is existing
-    * 
-    * The status is determined by the actual resource handler
-    * 
-    * @return boolean true if the template exists
-    */
+     * Returns if the  template is existing
+     
+     * The status is determined by the actual resource handler
+     
+     * @return boolean true if the template exists
+     */
     public function isExisting ($error = false)
     {
         if ($this->isExisting === null) {
@@ -172,12 +172,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns if the current template must be compiled by the Smarty compiler
-    * 
-    * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration
-    * 
-    * @return boolean true if the template must be compiled
-    */
+     * Returns if the current template must be compiled by the Smarty compiler
+     
+     * It does compare the timestamps of template source and the compiled templates and checks the force compile configuration
+     
+     * @return boolean true if the template must be compiled
+     */
     public function mustCompile ()
     {
         $this->isExisting(true);
@@ -190,10 +190,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the compiled template filepath
-    * 
-    * @return string the template filepath
-    */
+     * Returns the compiled template filepath
+     
+     * @return string the template filepath
+     */
     public function getCompiledFilepath ()
     {
         return $this->compiled_filepath === null ?
@@ -202,10 +202,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the timpestamp of the compiled template
-    * 
-    * @return integer the template timestamp
-    */
+     * Returns the timpestamp of the compiled template
+     
+     * @return integer the template timestamp
+     */
     public function getCompiledTimestamp ()
     {
         return $this->compiled_timestamp === null ?
@@ -214,12 +214,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the compiled template 
-    * 
-    * It checks if the template must be compiled or just read from the template resource
-    * 
-    * @return string the compiled template
-    */
+     * Returns the compiled template 
+     
+     * It checks if the template must be compiled or just read from the template resource
+     
+     * @return string the compiled template
+     */
     public function getCompiledTemplate ()
     {
         if ($this->compiled_template === null) {
@@ -236,10 +236,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Compiles the template
-    * 
-    * If the template is not evaluated the compiled template is saved on disk
-    */
+     * Compiles the template
+     
+     * If the template is not evaluated the compiled template is saved on disk
+     */
     public function compileTemplateSource ()
     {
         if (!$this->resource_object->isEvaluated) {
@@ -255,17 +255,27 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             $this->smarty->loadPlugin($this->resource_object->compiler_class);
             $this->compiler_object = new $this->resource_object->compiler_class($this->resource_object->template_lexer_class, $this->resource_object->template_parser_class, $this->smarty);
         } 
+        // compile locking
+        if ($this->smarty->compile_locking && !$this->resource_object->isEvaluated) {
+            if ($saved_timestamp = $this->getCompiledTimestamp()) {
+                touch($this->getCompiledFilepath());
+            } 
+        } 
         // call compiler
-        if ($this->compiler_object->compileTemplate($this)) {
-            // compiling succeded
-            if (!$this->resource_object->isEvaluated) {
-                // write compiled template
-                Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty);
+        try {
+            $this->compiler_object->compileTemplate($this);
+        } 
+        catch (Exception $e) {
+            // restore old timestamp in case of error
+            if ($this->smarty->compile_locking && !$this->resource_object->isEvaluated && $saved_timestamp) {
+                touch($this->getCompiledFilepath(), $saved_timestamp);
             } 
-        } else {
-            // error compiling template
-            throw new Exception("Error compiling template {$this->getTemplateFilepath ()}");
-            return false;
+            throw $e;
+        }
+        // compiling succeded
+        if (!$this->resource_object->isEvaluated) {
+            // write compiled template
+            Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty);
         } 
         if ($this->smarty->debugging) {
             Smarty_Internal_Debug::end_compile($this);
@@ -273,12 +283,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the filepath of the cached template output
-    * 
-    * The filepath is determined by the actual cache resource
-    * 
-    * @return string the cache filepath
-    */
+     * Returns the filepath of the cached template output
+     
+     * The filepath is determined by the actual cache resource
+     
+     * @return string the cache filepath
+     */
     public function getCachedFilepath ()
     {
         return $this->cached_filepath === null ?
@@ -287,12 +297,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the timpestamp of the cached template output
-    * 
-    * The timestamp is determined by the actual cache resource
-    * 
-    * @return integer the template timestamp
-    */
+     * Returns the timpestamp of the cached template output
+     
+     * The timestamp is determined by the actual cache resource
+     
+     * @return integer the template timestamp
+     */
     public function getCachedTimestamp ()
     {
         return $this->cached_timestamp === null ?
@@ -301,10 +311,10 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the cached template output
-    * 
-    * @return string |booelan the template content or false if the file does not exist
-    */
+     * Returns the cached template output
+     
+     * @return string |booelan the template content or false if the file does not exist
+     */
     public function getCachedContent ()
     {
         return $this->rendered_content === null ?
@@ -313,8 +323,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Writes the cached template output
-    */
+     * Writes the cached template output
+     */
     public function writeCachedContent ($content)
     {
         if ($this->resource_object->isEvaluated || !($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) {
@@ -326,19 +336,19 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Checks of a valid version redered HTML output is in the cache
-    * 
-    * If the cache is valid the contents is stored in the template object
-    * 
-    * @return boolean true if cache is valid
-    */
+     * Checks of a valid version redered HTML output is in the cache
+     
+     * If the cache is valid the contents is stored in the template object
+     
+     * @return boolean true if cache is valid
+     */
     public function isCached ()
     {
         if ($this->isCached === null) {
             $this->isCached = false;
             if (($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED) && !$this->resource_object->isEvaluated) {
                 if (!isset($this->cache_resource_object)) {
-                    $this->cache_resource_object = $this->smarty->loadCacheResource();
+                    $this->cache_resource_object = $this->smarty->cache->loadResource();
                 } 
                 $cachedTimestamp = $this->getCachedTimestamp();
                 if ($cachedTimestamp === false || $this->force_compile || $this->force_cache) {
@@ -357,7 +367,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                         return $this->isCached;
                     } 
                     $this->cacheFileChecked = true;
-                    if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] > 0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) {
+                    if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED && $this->properties['cache_lifetime'] >= 0 && (time() > ($this->getCachedTimestamp() + $this->properties['cache_lifetime']))) {
                         $this->rendered_content = null;
                         return $this->isCached;
                     } 
@@ -385,12 +395,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Render the output using the compiled template or the PHP template source
-    * 
-    * The rendering process is accomplished by just including the PHP files.
-    * The only exceptions are evaluated templates (string template). Their code has 
-    * to be evaluated
-    */
+     * Render the output using the compiled template or the PHP template source
+     
+     * The rendering process is accomplished by just including the PHP files.
+     * The only exceptions are evaluated templates (string template). Their code has 
+     * to be evaluated
+     */
     public function renderTemplate ()
     {
         if ($this->resource_object->usesCompiler) {
@@ -504,13 +514,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Returns the rendered HTML output 
-    * 
-    * If the cache is valid the cached content is used, otherwise
-    * the output is rendered from the compiled template or PHP template source
-    * 
-    * @return string rendered HTML output
-    */
+     * Returns the rendered HTML output 
+     
+     * If the cache is valid the cached content is used, otherwise
+     * the output is rendered from the compiled template or PHP template source
+     
+     * @return string rendered HTML output
+     */
     public function getRenderedTemplate ()
     { 
         // disable caching for evaluated code
@@ -530,14 +540,14 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Parse a template resource in its name and type
-    * Load required resource handler
-    * 
-    * @param string $template_resource template resource specification
-    * @param string $resource_type return resource type
-    * @param string $resource_name return resource name
-    * @param object $resource_handler return resource handler object
-    */
+     * Parse a template resource in its name and type
+     * Load required resource handler
+     
+     * @param string $template_resource template resource specification
+     * @param string $resource_type return resource type
+     * @param string $resource_name return resource name
+     * @param object $resource_handler return resource handler object
+     */
     public function parseResourceName($template_resource, &$resource_type, &$resource_name, &$resource_handler)
     {
         if (empty($template_resource))
@@ -554,8 +564,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * get system filepath to template
-    */
+     * get system filepath to template
+     */
     public function buildTemplateFilepath ($file = null)
     {
         if ($file == null) {
@@ -590,8 +600,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Update Smarty variables in other scopes
-    */
+     * Update Smarty variables in other scopes
+     */
     public function updateParentVariables ($scope = SMARTY_LOCAL_SCOPE)
     {
         $has_root = false;
@@ -645,12 +655,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Split a template resource in its name and type
-    * 
-    * @param string $template_resource template resource specification
-    * @param string $resource_type return resource type
-    * @param string $resource_name return resource name
-    */
+     * Split a template resource in its name and type
+     
+     * @param string $template_resource template resource specification
+     * @param string $resource_type return resource type
+     * @param string $resource_name return resource name
+     */
     protected function getResourceTypeName ($template_resource, &$resource_type, &$resource_name)
     {
         if (strpos($template_resource, ':') === false) {
@@ -671,11 +681,11 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Load template resource handler by type
-    * 
-    * @param string $resource_type template resource type
-    * @return object resource handler object
-    */
+     * Load template resource handler by type
+     
+     * @param string $resource_type template resource type
+     * @return object resource handler object
+     */
     protected function loadTemplateResourceHandler ($resource_type)
     { 
         // try registered resource
@@ -718,8 +728,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Create property header
-    */
+     * Create property header
+     */
     public function createPropertyHeader ($cache = false)
     {
         $plugins_string = ''; 
@@ -769,8 +779,8 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * Decode saved properties from compiled template and cache files
-    */
+     * Decode saved properties from compiled template and cache files
+     */
     public function decodeProperties ($properties)
     {
         $this->has_nocache_code = $properties['has_nocache_code'];
@@ -788,25 +798,76 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     } 
 
     /**
-    * wrapper for display
-    */
+     * wrapper for display
+     */
     public function display ()
     {
         return $this->smarty->display($this);
     } 
 
     /**
-    * wrapper for fetch
-    */
+     * wrapper for fetch
+     */
     public function fetch ()
     {
         return $this->smarty->fetch($this);
     } 
+
+    /**
+     * lazy loads (valid) property objects
+     * 
+     * @param string $name property name
+     */
+    public function __get($name)
+    {
+        if (in_array($name, array('register', 'unregister', 'utility', 'cache'))) {
+            $class = "Smarty_Internal_" . ucfirst($name);
+            $this->$name = new $class($this);
+            return $this->$name;
+        } else if ($name == '_version') {
+            // Smarty 2 BC
+            $this->_version = self::SMARTY_VERSION;
+            return $this->_version;
+        } 
+        return null;
+    } 
+
+    /**
+     * Takes unknown class methods and lazy loads sysplugin files for them
+     * class name format: Smarty_Method_MethodName
+     * plugin filename format: method.methodname.php
+     * 
+     * @param string $name unknown methode name
+     * @param array $args aurgument array
+     */
+    public function __call($name, $args)
+    {
+        static $camel_func;
+        if (!isset($camel_func))
+            $camel_func = create_function('$c', 'return "_" . strtolower($c[1]);'); 
+        // see if this is a set/get for a property
+        $first3 = strtolower(substr($name, 0, 3));
+        if (in_array($first3, array('set', 'get')) && substr($name, 3, 1) !== '_') {
+            // try to keep case correct for future PHP 6.0 case-sensitive class methods
+            // lcfirst() not available < PHP 5.3.0, so improvise
+            $property_name = strtolower(substr($name, 3, 1)) . substr($name, 4); 
+            // convert camel case to underscored name
+            $property_name = preg_replace_callback('/([A-Z])/', $camel_func, $property_name);
+            if (!property_exists($this, $property_name)) {
+                throw new Exception("property '$property_name' does not exist.");
+                return false;
+            } 
+            if ($first3 == 'get')
+                return $this->$property_name;
+            else
+                return $this->$property_name = $args[0];
+        } 
+    } 
 } 
 
 /**
-* wrapper for template class
-*/
+ * wrapper for template class
+ */
 class Smarty_Template extends Smarty_Internal_Template {
 } 
 
index 0b008903f36a03d67bdacc13759cb536b3b925c6..c41d7750af3abf4541ff0dca9ccda2e12cd710dd 100644 (file)
@@ -50,8 +50,6 @@ class Smarty_Internal_TemplateCompilerBase {
         // flag for nochache sections\r
         $this->nocache = false;\r
         $this->tag_nocache = false; \r
-        // assume successfull compiling\r
-        $this->compile_error = false; \r
         // save template object in compiler class\r
         $this->template = $template;\r
         $this->smarty->_current_file = $this->template->getTemplateFilepath(); \r
@@ -69,7 +67,7 @@ class Smarty_Internal_TemplateCompilerBase {
             $_content = $template->getTemplateSource(); \r
             // run prefilter if required\r
             if (isset($this->smarty->autoload_filters['pre']) || isset($this->smarty->registered_filters['pre'])) {\r
-                $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $this->smarty);\r
+                $_content = Smarty_Internal_Filter_Handler::runFilter('pre', $_content, $this->smarty, $template);\r
             } \r
             // on empty template just return header\r
             if ($_content == '') {\r
@@ -82,22 +80,16 @@ class Smarty_Internal_TemplateCompilerBase {
             } \r
             // call compiler\r
             $_compiled_code = $this->doCompile($_content);\r
-        } while ($this->abort_and_recompile);\r
-        if (!$this->compile_error) {\r
-            // return compiled code to template object\r
-            if ($template->suppressFileDependency) {\r
-                $template->compiled_template = $_compiled_code;\r
-            } else {\r
-                $template->compiled_template = $template_header . $template->createPropertyHeader() . $_compiled_code;\r
-            } \r
-            // run postfilter if required\r
-            if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {\r
-                $template->compiled_template = Smarty_Internal_Filter_Handler::runFilter('post', $template->compiled_template, $this->smarty);\r
-            } \r
-            return true;\r
+        } while ($this->abort_and_recompile); \r
+        // return compiled code to template object\r
+        if ($template->suppressFileDependency) {\r
+            $template->compiled_template = $_compiled_code;\r
         } else {\r
-            // compilation error\r
-            return false;\r
+            $template->compiled_template = $template_header . $template->createPropertyHeader() . $_compiled_code;\r
+        } \r
+        // run postfilter if required\r
+        if (isset($this->smarty->autoload_filters['post']) || isset($this->smarty->registered_filters['post'])) {\r
+            $template->compiled_template = Smarty_Internal_Filter_Handler::runFilter('post', $template->compiled_template, $this->smarty, $template);\r
         } \r
     } \r
 \r
@@ -290,7 +282,7 @@ class Smarty_Internal_TemplateCompilerBase {
         } \r
         if (isset($function)) {\r
             if ($type == 'modifier') {\r
-                $this->template->saved_modifer[$plugin_name] = true;\r
+                $this->template->saved_modifier[$plugin_name] = true;\r
             } \r
             return $function;\r
         } \r
@@ -306,7 +298,7 @@ class Smarty_Internal_TemplateCompilerBase {
          * } \r
          * } \r
          * if ($type == 'modifier') {\r
-         * $this->template->saved_modifer[$plugin_name] = true;\r
+         * $this->template->saved_modifier[$plugin_name] = true;\r
          * } \r
          * return $this->template->required_plugins_call[$plugin_name][$type];\r
          * }\r
@@ -342,7 +334,7 @@ class Smarty_Internal_TemplateCompilerBase {
              * }\r
              */\r
             if ($type == 'modifier') {\r
-                $this->template->saved_modifer[$plugin_name] = true;\r
+                $this->template->saved_modifier[$plugin_name] = true;\r
             } \r
             return $function;\r
         } \r
@@ -376,13 +368,13 @@ class Smarty_Internal_TemplateCompilerBase {
                 $_output = str_replace("'", "\'", $content);\r
                 $_output = "<?php echo '/*%%SmartyNocache:{$this->nocache_hash}%%*/" . $_output . "/*/%%SmartyNocache:{$this->nocache_hash}%%*/';?>"; \r
                 // make sure we include modifer plugins for nocache code\r
-                if (isset($this->template->saved_modifer)) {\r
-                    foreach ($this->template->saved_modifer as $plugin_name => $dummy) {\r
+                if (isset($this->template->saved_modifier)) {\r
+                    foreach ($this->template->saved_modifier as $plugin_name => $dummy) {\r
                         if (isset($this->template->required_plugins['compiled'][$plugin_name]['modifier'])) {\r
                             $this->template->required_plugins['nocache'][$plugin_name]['modifier'] = $this->template->required_plugins['compiled'][$plugin_name]['modifier'];\r
                         } \r
                     } \r
-                    unset($this->template->saved_modifer);\r
+                    $this->template->saved_modifier = null;\r
                 } \r
             } else {\r
                 $_output = $content;\r
@@ -429,9 +421,7 @@ class Smarty_Internal_TemplateCompilerBase {
             // output parser error message\r
             $error_text .= ' - Unexpected "' . $this->lex->value . '", expected one of: ' . implode(' , ', $expect);\r
         } \r
-        throw new Exception($error_text); \r
-        // set error flag\r
-        $this->compile_error = true;\r
+        throw new Exception($error_text);\r
     } \r
 } \r
 \r
index 4a9ab57882b37b6182c310f67a4e5a389579cb54..e28e67191b575622ed2e86103c1bf6c5e73b8f24 100644 (file)
@@ -73,8 +73,6 @@ class Smarty_Internal_Templatelexer
                                'LITERALEND' => 'literal close',
                                'AS' => 'as',
                                'TO' => 'to',
-                               'NULL' => 'null',
-                               'BOOLEAN' => 'boolean'
                                );
                                
                                
@@ -143,13 +141,14 @@ class Smarty_Internal_Templatelexer
               10 => 0,
               11 => 0,
               12 => 0,
-              13 => 2,
-              16 => 0,
+              13 => 0,
+              14 => 2,
+              17 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?)))|^([\S\s]+)/";
+        $yy_global_pattern = "/^(\\{\\})|^(".$this->ldel."\\*([\S\s]*?)\\*".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^([\t ]*[\r\n]+[\t ]*)|^(".$this->ldel."strip".$this->rdel.")|^(".$this->ldel."\/strip".$this->rdel.")|^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(([\S\s]*?)(?=([\t ]*[\r\n]+[\t ]*|".$this->ldel."|<\\?|\\?>)))|^([\S\s]+)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -214,7 +213,6 @@ class Smarty_Internal_Templatelexer
 
   if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
     $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
-        $this->yypushstate(self::PHP);
   } elseif ($this->value == '<?xml') {
       $this->token = Smarty_Internal_Templateparser::TP_XMLTAG;
   } else {
@@ -225,31 +223,36 @@ class Smarty_Internal_Templatelexer
     function yy_r1_5($yy_subpatterns)
     {
 
+  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
+    }
+    function yy_r1_6($yy_subpatterns)
+    {
+
   if ($this->strip) {
      return false;
   } else {
      $this->token = Smarty_Internal_Templateparser::TP_OTHER;
   }
     }
-    function yy_r1_6($yy_subpatterns)
+    function yy_r1_7($yy_subpatterns)
     {
 
   $this->strip = true;
   return false;
     }
-    function yy_r1_7($yy_subpatterns)
+    function yy_r1_8($yy_subpatterns)
     {
 
   $this->strip = false;
   return false;
     }
-    function yy_r1_8($yy_subpatterns)
+    function yy_r1_9($yy_subpatterns)
     {
 
    $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
    $this->yypushstate(self::LITERAL);
     }
-    function yy_r1_9($yy_subpatterns)
+    function yy_r1_10($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -260,7 +263,7 @@ class Smarty_Internal_Templatelexer
      $this->taglineno = $this->line;
   }
     }
-    function yy_r1_10($yy_subpatterns)
+    function yy_r1_11($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -271,26 +274,26 @@ class Smarty_Internal_Templatelexer
      $this->taglineno = $this->line;
   }
     }
-    function yy_r1_11($yy_subpatterns)
+    function yy_r1_12($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r1_12($yy_subpatterns)
+    function yy_r1_13($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDEL;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r1_13($yy_subpatterns)
+    function yy_r1_14($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
     }
-    function yy_r1_16($yy_subpatterns)
+    function yy_r1_17($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
@@ -314,8 +317,7 @@ class Smarty_Internal_Templatelexer
               15 => 0,
               16 => 0,
               17 => 0,
-              18 => 0,
-              19 => 0,
+              18 => 1,
               20 => 1,
               22 => 1,
               24 => 1,
@@ -326,7 +328,8 @@ class Smarty_Internal_Templatelexer
               34 => 1,
               36 => 1,
               38 => 1,
-              40 => 1,
+              40 => 0,
+              41 => 0,
               42 => 0,
               43 => 0,
               44 => 0,
@@ -335,19 +338,19 @@ class Smarty_Internal_Templatelexer
               47 => 0,
               48 => 0,
               49 => 0,
-              50 => 0,
-              51 => 0,
-              52 => 3,
+              50 => 3,
+              54 => 0,
+              55 => 0,
               56 => 0,
               57 => 0,
               58 => 0,
               59 => 0,
               60 => 0,
-              61 => 0,
-              62 => 0,
+              61 => 1,
               63 => 1,
               65 => 1,
-              67 => 1,
+              67 => 0,
+              68 => 0,
               69 => 0,
               70 => 0,
               71 => 0,
@@ -359,20 +362,18 @@ class Smarty_Internal_Templatelexer
               77 => 0,
               78 => 0,
               79 => 0,
-              80 => 0,
-              81 => 0,
-              82 => 1,
+              80 => 1,
+              82 => 0,
+              83 => 0,
               84 => 0,
               85 => 0,
               86 => 0,
               87 => 0,
-              88 => 0,
-              89 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(\\s{1,}".$this->rdel.")|^(".$this->ldel."\/)|^(".$this->ldel.")|^(".$this->rdel.")|^(\\s+is\\s+in\\s+)|^(\\s+(AS|as)\\s+)|^(\\s+(to)\\s+)|^(\\s+(step)\\s+)|^(\\s+instanceof\\s+)|^(true|TRUE|True|false|FALSE|False)|^(null|NULL|Null)|^(\\s*===\\s*)|^(\\s*!==\\s*)|^(\\s*==\\s*|\\s+(EQ|eq)\\s+)|^(\\s*!=\\s*|\\s*<>\\s*|\\s+(NE|NEQ|ne|neq)\\s+)|^(\\s*>=\\s*|\\s+(GE|GTE|ge|gte)\\s+)|^(\\s*<=\\s*|\\s+(LE|LTE|le|lte)\\s+)|^(\\s*>\\s*|\\s+(GT|gt)\\s+)|^(\\s*<\\s*|\\s+(LT|lt)\\s+)|^(\\s+(MOD|mod)\\s+)|^(!\\s*|(NOT|not)\\s+)|^(\\s*&&\\s*|\\s*(AND|and)\\s+)|^(\\s*\\|\\|\\s*|\\s*(OR|or)\\s+)|^(\\s*(XOR|xor)\\s+)|^(\\s+is\\s+odd\\s+by\\s+)|^(\\s+is\\s+not\\s+odd\\s+by\\s+)|^(\\s+is\\s+odd)|^(\\s+is\\s+not\\s+odd)|^(\\s+is\\s+even\\s+by\\s+)|^(\\s+is\\s+not\\s+even\\s+by\\s+)|^(\\s+is\\s+even)|^(\\s+is\\s+not\\s+even)|^(\\s+is\\s+div\\s+by\\s+)|^(\\s+is\\s+not\\s+div\\s+by\\s+)|^(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\))|^(\\(\\s*)|^(\\s*\\))|^(\\[\\s*)|^(\\s*\\])|^(\\s*->\\s*)|^(\\s*=>\\s*)|^(\\s*=\\s*)|^((\\+\\+|--)\\s*)|^(\\s*(\\+|-)\\s*)|^(\\s*(\\*|\/|%)\\s*)|^(\\$)|^(\\s*;)|^(::)|^(\\s*:\\s*)|^(@)|^(#)|^(\")|^(`)|^(\\|)|^(\\.)|^(\\s*,\\s*)|^(\\s*&\\s*)|^(\\s*\\?\\s*)|^((if|elseif|else if|while)(?![^\s]))|^(foreach(?![^\s]))|^(for(?![^\s]))|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/";
+        $yy_global_pattern = "/^('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')|^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(\\s{1,}".$this->rdel.")|^(".$this->ldel."\/)|^(".$this->ldel.")|^(".$this->rdel.")|^(\\s+is\\s+in\\s+)|^(\\s+(AS|as)\\s+)|^(\\s+(to)\\s+)|^(\\s+(step)\\s+)|^(\\s+instanceof\\s+)|^(\\s*===\\s*)|^(\\s*!==\\s*)|^(\\s*==\\s*|\\s+(EQ|eq)\\s+)|^(\\s*!=\\s*|\\s*<>\\s*|\\s+(NE|NEQ|ne|neq)\\s+)|^(\\s*>=\\s*|\\s+(GE|GTE|ge|gte)\\s+)|^(\\s*<=\\s*|\\s+(LE|LTE|le|lte)\\s+)|^(\\s*>\\s*|\\s+(GT|gt)\\s+)|^(\\s*<\\s*|\\s+(LT|lt)\\s+)|^(\\s+(MOD|mod)\\s+)|^(!\\s*|(NOT|not)\\s+)|^(\\s*&&\\s*|\\s*(AND|and)\\s+)|^(\\s*\\|\\|\\s*|\\s*(OR|or)\\s+)|^(\\s*(XOR|xor)\\s+)|^(\\s+is\\s+odd\\s+by\\s+)|^(\\s+is\\s+not\\s+odd\\s+by\\s+)|^(\\s+is\\s+odd)|^(\\s+is\\s+not\\s+odd)|^(\\s+is\\s+even\\s+by\\s+)|^(\\s+is\\s+not\\s+even\\s+by\\s+)|^(\\s+is\\s+even)|^(\\s+is\\s+not\\s+even)|^(\\s+is\\s+div\\s+by\\s+)|^(\\s+is\\s+not\\s+div\\s+by\\s+)|^(\\((int(eger)?|bool(ean)?|float|double|real|string|binary|array|object)\\))|^(\\(\\s*)|^(\\s*\\))|^(\\[\\s*)|^(\\s*\\])|^(\\s*->\\s*)|^(\\s*=>\\s*)|^(\\s*=\\s*)|^((\\+\\+|--)\\s*)|^(\\s*(\\+|-)\\s*)|^(\\s*(\\*|\/|%)\\s*)|^(\\$)|^(\\s*;)|^(::)|^(\\s*:\\s*)|^(@)|^(#)|^(\")|^(`)|^(\\|)|^(\\.)|^(\\s*,\\s*)|^(\\s*&\\s*)|^(\\s*\\?\\s*)|^((if|elseif|else if|while)(?![^\s]))|^(foreach(?![^\s]))|^(for(?![^\s]))|^([0-9]*[a-zA-Z_]\\w*)|^(\\d+)|^(\\s+)|^(.)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -507,298 +508,292 @@ class Smarty_Internal_Templatelexer
     function yy_r2_16($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_BOOLEAN;
-    }
-    function yy_r2_17($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_NULL;
-    }
-    function yy_r2_18($yy_subpatterns)
-    {
-
   $this->token = Smarty_Internal_Templateparser::TP_IDENTITY;
     }
-    function yy_r2_19($yy_subpatterns)
+    function yy_r2_17($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_NONEIDENTITY;
     }
-    function yy_r2_20($yy_subpatterns)
+    function yy_r2_18($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_EQUALS;
     }
-    function yy_r2_22($yy_subpatterns)
+    function yy_r2_20($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_NOTEQUALS;
     }
-    function yy_r2_24($yy_subpatterns)
+    function yy_r2_22($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_GREATEREQUAL;
     }
-    function yy_r2_26($yy_subpatterns)
+    function yy_r2_24($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LESSEQUAL;
     }
-    function yy_r2_28($yy_subpatterns)
+    function yy_r2_26($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_GREATERTHAN;
     }
-    function yy_r2_30($yy_subpatterns)
+    function yy_r2_28($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LESSTHAN;
     }
-    function yy_r2_32($yy_subpatterns)
+    function yy_r2_30($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_MOD;
     }
-    function yy_r2_34($yy_subpatterns)
+    function yy_r2_32($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_NOT;
     }
-    function yy_r2_36($yy_subpatterns)
+    function yy_r2_34($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LAND;
     }
-    function yy_r2_38($yy_subpatterns)
+    function yy_r2_36($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LOR;
     }
-    function yy_r2_40($yy_subpatterns)
+    function yy_r2_38($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LXOR;
     }
-    function yy_r2_42($yy_subpatterns)
+    function yy_r2_40($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISODDBY;
     }
-    function yy_r2_43($yy_subpatterns)
+    function yy_r2_41($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISNOTODDBY;
     }
-    function yy_r2_44($yy_subpatterns)
+    function yy_r2_42($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISODD;
     }
-    function yy_r2_45($yy_subpatterns)
+    function yy_r2_43($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISNOTODD;
     }
-    function yy_r2_46($yy_subpatterns)
+    function yy_r2_44($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISEVENBY;
     }
-    function yy_r2_47($yy_subpatterns)
+    function yy_r2_45($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVENBY;
     }
-    function yy_r2_48($yy_subpatterns)
+    function yy_r2_46($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISEVEN;
     }
-    function yy_r2_49($yy_subpatterns)
+    function yy_r2_47($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISNOTEVEN;
     }
-    function yy_r2_50($yy_subpatterns)
+    function yy_r2_48($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISDIVBY;
     }
-    function yy_r2_51($yy_subpatterns)
+    function yy_r2_49($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISNOTDIVBY;
     }
-    function yy_r2_52($yy_subpatterns)
+    function yy_r2_50($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_TYPECAST;
     }
-    function yy_r2_56($yy_subpatterns)
+    function yy_r2_54($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OPENP;
     }
-    function yy_r2_57($yy_subpatterns)
+    function yy_r2_55($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_CLOSEP;
     }
-    function yy_r2_58($yy_subpatterns)
+    function yy_r2_56($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OPENB;
     }
-    function yy_r2_59($yy_subpatterns)
+    function yy_r2_57($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_CLOSEB;
     }
-    function yy_r2_60($yy_subpatterns)
+    function yy_r2_58($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_PTR; 
     }
-    function yy_r2_61($yy_subpatterns)
+    function yy_r2_59($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_APTR;
     }
-    function yy_r2_62($yy_subpatterns)
+    function yy_r2_60($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_EQUAL;
     }
-    function yy_r2_63($yy_subpatterns)
+    function yy_r2_61($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_INCDEC;
     }
-    function yy_r2_65($yy_subpatterns)
+    function yy_r2_63($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_UNIMATH;
     }
-    function yy_r2_67($yy_subpatterns)
+    function yy_r2_65($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_MATH;
     }
-    function yy_r2_69($yy_subpatterns)
+    function yy_r2_67($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_DOLLAR;
     }
-    function yy_r2_70($yy_subpatterns)
+    function yy_r2_68($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_SEMICOLON;
     }
-    function yy_r2_71($yy_subpatterns)
+    function yy_r2_69($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_DOUBLECOLON;
     }
-    function yy_r2_72($yy_subpatterns)
+    function yy_r2_70($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_COLON;
     }
-    function yy_r2_73($yy_subpatterns)
+    function yy_r2_71($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_AT;
     }
-    function yy_r2_74($yy_subpatterns)
+    function yy_r2_72($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_HATCH;
     }
-    function yy_r2_75($yy_subpatterns)
+    function yy_r2_73($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
   $this->yypushstate(self::DOUBLEQUOTEDSTRING);
     }
-    function yy_r2_76($yy_subpatterns)
+    function yy_r2_74($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
   $this->yypopstate();
     }
-    function yy_r2_77($yy_subpatterns)
+    function yy_r2_75($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_VERT;
     }
-    function yy_r2_78($yy_subpatterns)
+    function yy_r2_76($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_DOT;
     }
-    function yy_r2_79($yy_subpatterns)
+    function yy_r2_77($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_COMMA;
     }
-    function yy_r2_80($yy_subpatterns)
+    function yy_r2_78($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ANDSYM;
     }
-    function yy_r2_81($yy_subpatterns)
+    function yy_r2_79($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_QMARK;
     }
-    function yy_r2_82($yy_subpatterns)
+    function yy_r2_80($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_IF;
     }
-    function yy_r2_84($yy_subpatterns)
+    function yy_r2_82($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_FOREACH;
     }
-    function yy_r2_85($yy_subpatterns)
+    function yy_r2_83($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_FOR;
     }
-    function yy_r2_86($yy_subpatterns)
+    function yy_r2_84($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ID;
     }
-    function yy_r2_87($yy_subpatterns)
+    function yy_r2_85($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_INTEGER;
     }
-    function yy_r2_88($yy_subpatterns)
+    function yy_r2_86($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_SPACE;
     }
-    function yy_r2_89($yy_subpatterns)
+    function yy_r2_87($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
     }
 
 
+
     function yylex3()
     {
         $tokenMap = array (
               1 => 0,
-              2 => 1,
+              2 => 0,
+              3 => 0,
               4 => 0,
+              5 => 2,
+              8 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^(\\?>)|^([\s\S]+?(\\?>|\/\\*|'|\"|<<<\\s*'?\\w+'?\r?\n|\/\/|#))|^([\S\s]+)/";
+        $yy_global_pattern = "/^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^(([\S\s]*?)(?=(".$this->ldel."\/?literal".$this->rdel."|<\\?)))|^([\S\s]+)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -807,7 +802,7 @@ class Smarty_Internal_Templatelexer
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
                         'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP');
+                        $this->counter, 5) . '... state LITERAL');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
@@ -847,139 +842,64 @@ class Smarty_Internal_Templatelexer
     } // end function
 
 
-    const PHP = 3;
+    const LITERAL = 3;
     function yy_r3_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_PHPENDTAG;
-  $this->yypopstate();
+  $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
+  $this->yypushstate(self::LITERAL);
     }
     function yy_r3_2($yy_subpatterns)
     {
 
-   switch ($yy_subpatterns[0]) {
-   case '?>':
-      $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-      $this->value = substr($this->value, 0, -2);
-      break;
-   case "'":
-      $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-      $this->yypushstate(self::PHP_SINGLE_QUOTED_STRING);
-      break;
-   case '"':
-      $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE_START_DOUBLEQUOTE;
-      $this->yypushstate(self::PHP_DOUBLE_QUOTED_STRING);
-      break;
-   case '/*':
-      $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-      $this->yypushstate(self::PHP_ML_COMMENT);
-      break;
-   case '//':
-   case '#':
-      $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-      $this->yypushstate(self::PHP_SL_COMMENT);
-      break;
-   default:
-      $res = preg_match('/\A<<<\s*\'?(\w+)(\'?)\r?\n\z/', $yy_subpatterns[0], $matches);
-      assert($res === 1);
-      $is_nowdoc = $matches[2] === "'";
-      $this->token = $is_nowdoc
-        ? Smarty_Internal_Templateparser::TP_PHP_NOWDOC_START
-        : Smarty_Internal_Templateparser::TP_PHP_HEREDOC_START;
-      $this->heredoc_id_stack[] = $matches[1];
-      $this->yypushstate($is_nowdoc ? self::PHP_NOWDOC : self::PHP_HEREDOC);
-      break;
-   }
+  $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
+  $this->yypopstate();
     }
-    function yy_r3_4($yy_subpatterns)
+    function yy_r3_3($yy_subpatterns)
     {
 
-  $this->compiler->trigger_template_error ("missing PHP end tag");
+  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
+    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
+   } else {
+    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
+    $this->value = substr($this->value, 0, 2);
+   }
     }
-
-
-    function yylex4()
+    function yy_r3_4($yy_subpatterns)
     {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^([\s\S]*\\*\/)|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_ML_COMMENT');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
 
-    const PHP_ML_COMMENT = 4;
-    function yy_r4_1($yy_subpatterns)
+  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
+    }
+    function yy_r3_5($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;  
-  $this->yypopstate();
+  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
     }
-    function yy_r4_2($yy_subpatterns)
+    function yy_r3_8($yy_subpatterns)
     {
 
-  $this->compiler->trigger_template_error("missing PHP comment end */");
+  $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
     }
 
 
-    function yylex5()
+    function yylex4()
     {
         $tokenMap = array (
               1 => 0,
               2 => 0,
+              3 => 0,
+              4 => 0,
+              5 => 0,
+              6 => 0,
+              7 => 0,
+              8 => 0,
+              9 => 3,
+              13 => 0,
             );
         if ($this->counter >= strlen($this->data)) {
             return false; // end of input
         }
-        $yy_global_pattern = "/^(.+?(?=\\?>|\n))|^([\S\s]+)/";
+        $yy_global_pattern = "/^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(\")|^(`\\$)|^(\\$[0-9]*[a-zA-Z_]\\w*)|^(\\$)|^(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|^([\S\s]+)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -988,7 +908,7 @@ class Smarty_Internal_Templatelexer
                 if (!count($yymatches)) {
                     throw new Exception('Error: lexing failed because a rule matched' .
                         'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_SL_COMMENT');
+                        $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
                 }
                 next($yymatches); // skip global match
                 $this->token = key($yymatches); // token number
@@ -1000,7 +920,7 @@ class Smarty_Internal_Templatelexer
                     $yysubmatches = array();
                 }
                 $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r5_' . $this->token}($yysubmatches);
+                $r = $this->{'yy_r4_' . $this->token}($yysubmatches);
                 if ($r === null) {
                     $this->counter += strlen($this->value);
                     $this->line += substr_count($this->value, "\n");
@@ -1028,718 +948,19 @@ class Smarty_Internal_Templatelexer
     } // end function
 
 
-    const PHP_SL_COMMENT = 5;
-    function yy_r5_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;  
-  $this->yypopstate();
-    }
-    function yy_r5_2($yy_subpatterns)
+    const DOUBLEQUOTEDSTRING = 4;
+    function yy_r4_1($yy_subpatterns)
     {
 
-  /* this can happen for "//?>" */
-  $this->yypopstate();
-  return true;
+  if ($this->smarty->auto_literal) {
+     $this->token = Smarty_Internal_Templateparser::TP_OTHER;
+  } else {
+     $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
+     $this->yypushstate(self::SMARTY);
+     $this->taglineno = $this->line;
+  }
     }
-
-
-    function yylex6()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^([^\n]*\n)|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_NOWDOC');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r6_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_NOWDOC = 6;
-    function yy_r6_1($yy_subpatterns)
-    {
-
-  $heredoc_id = $this->heredoc_id_stack[sizeof($this->heredoc_id_stack)-1];
-  if (   $this->value === $heredoc_id."\n"
-      || $this->value === $heredoc_id."\r\n"
-      || $this->value === $heredoc_id.";\n"
-      || $this->value === $heredoc_id.";\r\n"
-     ) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHP_NOWDOC_END;
-    array_pop($this->heredoc_id_stack);
-    $this->yypopstate();
-  } else {
-    $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_CONTENT;
-  }
-    }
-    function yy_r6_2($yy_subpatterns)
-    {
-
-  $this->compiler->trigger_template_error("missing PHP NOWDOC end");
-    }
-
-
-    function yylex7()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^(\\{\\$|\\{\\$)|^([^\n]*\n)|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_HEREDOC');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r7_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_HEREDOC = 7;
-    function yy_r7_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_EMBED_START;
-  $this->yypushstate(self::PHP_RETURNING_TO_HEREDOC_FROM_EMBEDDED);    
-  $this->yypushstate(self::PHP_DOUBLE_QUOTED_STRING_EMBEDDED);    
-    }
-    function yy_r7_2($yy_subpatterns)
-    {
-
-  $heredoc_id = $this->heredoc_id_stack[sizeof($this->heredoc_id_stack)-1];
-  if (   $this->value === $heredoc_id."\n"
-      || $this->value === $heredoc_id."\r\n"
-      || $this->value === $heredoc_id.";\n"
-      || $this->value === $heredoc_id.";\r\n"
-     ) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHP_HEREDOC_END;
-    array_pop($this->heredoc_id_stack);
-    $this->yypopstate();
-  } else {
-    $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_CONTENT;
-    if (preg_match('/(.*?)(\{\$\|\$\{)/', $this->value, $matches)) {
-      $this->value = $matches[1];
-    }
-  }
-    }
-    function yy_r7_3($yy_subpatterns)
-    {
-
-  $this->compiler->trigger_template_error("missing PHP HEREDOC end");
-    }
-
-
-    function yylex8()
-    {
-        $tokenMap = array (
-              1 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^([^\n]*\n)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_RETURNING_TO_HEREDOC_FROM_EMBEDDED');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r8_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_RETURNING_TO_HEREDOC_FROM_EMBEDDED = 8;
-    function yy_r8_1($yy_subpatterns)
-    {
-
-  $this->yypopstate();
-  $heredoc_id = $this->heredoc_id_stack[sizeof($this->heredoc_id_stack)-1];
-  if (   $this->value === $heredoc_id."\n"
-      || $this->value === $heredoc_id."\r\n"
-      || $this->value === $heredoc_id.";\n"
-      || $this->value === $heredoc_id.";\r\n"
-     ) {
-    //Make sure it isn't interpreted as HEREDOC end.
-    $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_CONTENT;
-  } else {
-    return true; //retry in PHP_HEREDOC state
-  }
-    }
-
-
-    function yylex9()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^((?:[^\\\\']|\\\\.)*')|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_SINGLE_QUOTED_STRING');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r9_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_SINGLE_QUOTED_STRING = 9;
-    function yy_r9_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;  
-  $this->yypopstate();
-    }
-    function yy_r9_2($yy_subpatterns)
-    {
-
-  $this->compiler->trigger_template_error("missing PHP single quoted string end");
-    }
-
-
-    function yylex10()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^(\\{\\$|\\{\\$)|^(\")|^((?:\\\\.|[^\"\\\\])+?(?=\"|\\{\\$|\\$\\{))|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_DOUBLE_QUOTED_STRING');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r10_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_DOUBLE_QUOTED_STRING = 10;
-    function yy_r10_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_EMBED_START;
-  $this->yypushstate(self::PHP_DOUBLE_QUOTED_STRING_EMBEDDED);
-    }
-    function yy_r10_2($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE_DOUBLEQUOTE;
-  $this->yypopstate();
-    }
-    function yy_r10_3($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_CONTENT;
-    }
-    function yy_r10_4($yy_subpatterns)
-    {
-
-  $this->compiler->trigger_template_error("missing PHP double quoted string end");
-    }
-
-
-    function yylex11()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^(\")|^(')|^(<<<\\s*\\w+\r?\n)|^(<<<\\s*'\\w+'\r?\n)|^(\\})|^([^'\"}]+?(?='|\"|\\}|<<<\\s*'?\\w+'?\r?\n))/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state PHP_DOUBLE_QUOTED_STRING_EMBEDDED');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r11_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const PHP_DOUBLE_QUOTED_STRING_EMBEDDED = 11;
-    function yy_r11_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE_START_DOUBLEQUOTE;
-  $this->yypushstate(self::PHP_DOUBLE_QUOTED_STRING);
-    }
-    function yy_r11_2($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-  $this->yypushstate(self::PHP_SINGLE_QUOTED_STRING);
-    }
-    function yy_r11_3($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_HEREDOC_START;
-  $res = preg_match('/\A\<\<\<\s*(\w+)\r?\n\z/', $this->value, $matches);
-  assert($res === 1);
-  $this->heredoc_id_stack[] = $matches[1];
-  $this->yypushstate(self::PHP_HEREDOC);
-    }
-    function yy_r11_4($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_NOWDOC_START;
-  $res = preg_match('/\A\<\<\<\s*\'(\w+)\'\r?\n\z/', $this->value, $matches);
-  assert($res === 1);
-  $this->heredoc_id_stack[] = $matches[1];
-  $this->yypushstate(self::PHP_NOWDOC);
-    }
-    function yy_r11_5($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_DQ_EMBED_END;
-  $this->yypopstate();
-    }
-    function yy_r11_6($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_PHP_CODE;
-    }
-
-
-
-    function yylex12()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 2,
-              8 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^(".$this->ldel."literal".$this->rdel.")|^(".$this->ldel."\/literal".$this->rdel.")|^(<\\?(?:php\\w+|=|[a-zA-Z]+)?)|^(\\?>)|^(([\S\s]*?)(?=(".$this->ldel."\/?literal".$this->rdel."|<\\?)))|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state LITERAL');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r12_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const LITERAL = 12;
-    function yy_r12_1($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_LITERALSTART;
-  $this->yypushstate(self::LITERAL);
-    }
-    function yy_r12_2($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_LITERALEND;
-  $this->yypopstate();
-    }
-    function yy_r12_3($yy_subpatterns)
-    {
-
-  if (in_array($this->value, Array('<?', '<?=', '<?php'))) {
-    $this->token = Smarty_Internal_Templateparser::TP_PHPSTARTTAG;
-   } else {
-    $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
-    $this->value = substr($this->value, 0, 2);
-   }
-    }
-    function yy_r12_4($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    }
-    function yy_r12_5($yy_subpatterns)
-    {
-
-  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    }
-    function yy_r12_8($yy_subpatterns)
-    {
-
-  $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
-    }
-
-
-    function yylex13()
-    {
-        $tokenMap = array (
-              1 => 0,
-              2 => 0,
-              3 => 0,
-              4 => 0,
-              5 => 0,
-              6 => 0,
-              7 => 0,
-              8 => 0,
-              9 => 3,
-              13 => 0,
-            );
-        if ($this->counter >= strlen($this->data)) {
-            return false; // end of input
-        }
-        $yy_global_pattern = "/^(".$this->ldel."\\s{1,}\/)|^(".$this->ldel."\\s{1,})|^(".$this->ldel."\/)|^(".$this->ldel.")|^(\")|^(`\\$)|^(\\$[0-9]*[a-zA-Z_]\\w*)|^(\\$)|^(([^\"\\\\]*?)((?:\\\\.[^\"\\\\]*?)*?)(?=(".$this->ldel."|\\$|`\\$|\")))|^([\S\s]+)/";
-
-        do {
-            if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
-                $yysubmatches = $yymatches;
-                $yymatches = array_filter($yymatches, 'strlen'); // remove empty sub-patterns
-                if (!count($yymatches)) {
-                    throw new Exception('Error: lexing failed because a rule matched' .
-                        'an empty string.  Input "' . substr($this->data,
-                        $this->counter, 5) . '... state DOUBLEQUOTEDSTRING');
-                }
-                next($yymatches); // skip global match
-                $this->token = key($yymatches); // token number
-                if ($tokenMap[$this->token]) {
-                    // extract sub-patterns for passing to lex function
-                    $yysubmatches = array_slice($yysubmatches, $this->token + 1,
-                        $tokenMap[$this->token]);
-                } else {
-                    $yysubmatches = array();
-                }
-                $this->value = current($yymatches); // token value
-                $r = $this->{'yy_r13_' . $this->token}($yysubmatches);
-                if ($r === null) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    // accept this token
-                    return true;
-                } elseif ($r === true) {
-                    // we have changed state
-                    // process this token in the new state
-                    return $this->yylex();
-                } elseif ($r === false) {
-                    $this->counter += strlen($this->value);
-                    $this->line += substr_count($this->value, "\n");
-                    if ($this->counter >= strlen($this->data)) {
-                        return false; // end of input
-                    }
-                    // skip this token
-                    continue;
-                }            } else {
-                throw new Exception('Unexpected input at line' . $this->line .
-                    ': ' . $this->data[$this->counter]);
-            }
-            break;
-        } while (true);
-
-    } // end function
-
-
-    const DOUBLEQUOTEDSTRING = 13;
-    function yy_r13_1($yy_subpatterns)
-    {
-
-  if ($this->smarty->auto_literal) {
-     $this->token = Smarty_Internal_Templateparser::TP_OTHER;
-  } else {
-     $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
-     $this->yypushstate(self::SMARTY);
-     $this->taglineno = $this->line;
-  }
-    }
-    function yy_r13_2($yy_subpatterns)
+    function yy_r4_2($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -1750,27 +971,27 @@ class Smarty_Internal_Templatelexer
      $this->taglineno = $this->line;
   }
     }
-    function yy_r13_3($yy_subpatterns)
+    function yy_r4_3($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r13_4($yy_subpatterns)
+    function yy_r4_4($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDEL;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r13_5($yy_subpatterns)
+    function yy_r4_5($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_QUOTE;
   $this->yypopstate();
     }
-    function yy_r13_6($yy_subpatterns)
+    function yy_r4_6($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_BACKTICK;
@@ -1778,22 +999,22 @@ class Smarty_Internal_Templatelexer
   $this->yypushstate(self::SMARTY);
   $this->taglineno = $this->line;
     }
-    function yy_r13_7($yy_subpatterns)
+    function yy_r4_7($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_DOLLARID;
     }
-    function yy_r13_8($yy_subpatterns)
+    function yy_r4_8($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
     }
-    function yy_r13_9($yy_subpatterns)
+    function yy_r4_9($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
     }
-    function yy_r13_13($yy_subpatterns)
+    function yy_r4_13($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
index 8e1531cf39f2e137bdd26e5bffd6d395d1f12dcf..f42ffc330b6cd2e02d1d9851daaba0c133a172ad 100644 (file)
@@ -110,6 +110,7 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
                                $this->compiler->prefix_code = array();\r
                                $this->prefix_number = 0;\r
                                $this->block_nesting_level = 0;\r
+                               $this->is_xml = false;\r
     }\r
     public static function &instance($new_instance = null)\r
     {\r
@@ -131,7 +132,7 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
     }\r
 \r
     \r
-#line 127 "smarty_internal_templateparser.php"\r
+#line 128 "smarty_internal_templateparser.php"\r
 \r
     const TP_VERT                           =  1;\r
     const TP_COLON                          =  2;\r
@@ -141,791 +142,737 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
     const TP_FAKEPHPSTARTTAG                =  6;\r
     const TP_XMLTAG                         =  7;\r
     const TP_OTHER                          =  8;\r
-    const TP_PHP_CODE                       =  9;\r
-    const TP_PHP_CODE_START_DOUBLEQUOTE     = 10;\r
-    const TP_PHP_CODE_DOUBLEQUOTE           = 11;\r
-    const TP_PHP_HEREDOC_START              = 12;\r
-    const TP_PHP_HEREDOC_END                = 13;\r
-    const TP_PHP_NOWDOC_START               = 14;\r
-    const TP_PHP_NOWDOC_END                 = 15;\r
-    const TP_PHP_DQ_CONTENT                 = 16;\r
-    const TP_PHP_DQ_EMBED_START             = 17;\r
-    const TP_PHP_DQ_EMBED_END               = 18;\r
-    const TP_LITERALSTART                   = 19;\r
-    const TP_LITERALEND                     = 20;\r
-    const TP_LITERAL                        = 21;\r
-    const TP_LDEL                           = 22;\r
-    const TP_RDEL                           = 23;\r
-    const TP_DOLLAR                         = 24;\r
-    const TP_ID                             = 25;\r
-    const TP_EQUAL                          = 26;\r
-    const TP_FOREACH                        = 27;\r
-    const TP_PTR                            = 28;\r
-    const TP_IF                             = 29;\r
-    const TP_SPACE                          = 30;\r
-    const TP_FOR                            = 31;\r
-    const TP_SEMICOLON                      = 32;\r
-    const TP_INCDEC                         = 33;\r
-    const TP_TO                             = 34;\r
-    const TP_STEP                           = 35;\r
-    const TP_AS                             = 36;\r
-    const TP_APTR                           = 37;\r
-    const TP_LDELSLASH                      = 38;\r
-    const TP_INTEGER                        = 39;\r
-    const TP_COMMA                          = 40;\r
-    const TP_MATH                           = 41;\r
-    const TP_UNIMATH                        = 42;\r
-    const TP_ANDSYM                         = 43;\r
-    const TP_ISIN                           = 44;\r
-    const TP_ISDIVBY                        = 45;\r
-    const TP_ISNOTDIVBY                     = 46;\r
-    const TP_ISEVEN                         = 47;\r
-    const TP_ISNOTEVEN                      = 48;\r
-    const TP_ISEVENBY                       = 49;\r
-    const TP_ISNOTEVENBY                    = 50;\r
-    const TP_ISODD                          = 51;\r
-    const TP_ISNOTODD                       = 52;\r
-    const TP_ISODDBY                        = 53;\r
-    const TP_ISNOTODDBY                     = 54;\r
-    const TP_INSTANCEOF                     = 55;\r
-    const TP_OPENP                          = 56;\r
-    const TP_CLOSEP                         = 57;\r
-    const TP_QMARK                          = 58;\r
-    const TP_NOT                            = 59;\r
-    const TP_TYPECAST                       = 60;\r
-    const TP_DOT                            = 61;\r
-    const TP_BOOLEAN                        = 62;\r
-    const TP_NULL                           = 63;\r
-    const TP_SINGLEQUOTESTRING              = 64;\r
-    const TP_DOUBLECOLON                    = 65;\r
-    const TP_AT                             = 66;\r
-    const TP_HATCH                          = 67;\r
-    const TP_OPENB                          = 68;\r
-    const TP_CLOSEB                         = 69;\r
-    const TP_EQUALS                         = 70;\r
-    const TP_NOTEQUALS                      = 71;\r
-    const TP_GREATERTHAN                    = 72;\r
-    const TP_LESSTHAN                       = 73;\r
-    const TP_GREATEREQUAL                   = 74;\r
-    const TP_LESSEQUAL                      = 75;\r
-    const TP_IDENTITY                       = 76;\r
-    const TP_NONEIDENTITY                   = 77;\r
-    const TP_MOD                            = 78;\r
-    const TP_LAND                           = 79;\r
-    const TP_LOR                            = 80;\r
-    const TP_LXOR                           = 81;\r
-    const TP_QUOTE                          = 82;\r
-    const TP_BACKTICK                       = 83;\r
-    const TP_DOLLARID                       = 84;\r
-    const YY_NO_ACTION = 585;\r
-    const YY_ACCEPT_ACTION = 584;\r
-    const YY_ERROR_ACTION = 583;\r
+    const TP_LITERALSTART                   =  9;\r
+    const TP_LITERALEND                     = 10;\r
+    const TP_LITERAL                        = 11;\r
+    const TP_LDEL                           = 12;\r
+    const TP_RDEL                           = 13;\r
+    const TP_DOLLAR                         = 14;\r
+    const TP_ID                             = 15;\r
+    const TP_EQUAL                          = 16;\r
+    const TP_FOREACH                        = 17;\r
+    const TP_PTR                            = 18;\r
+    const TP_IF                             = 19;\r
+    const TP_SPACE                          = 20;\r
+    const TP_FOR                            = 21;\r
+    const TP_SEMICOLON                      = 22;\r
+    const TP_INCDEC                         = 23;\r
+    const TP_TO                             = 24;\r
+    const TP_STEP                           = 25;\r
+    const TP_AS                             = 26;\r
+    const TP_APTR                           = 27;\r
+    const TP_LDELSLASH                      = 28;\r
+    const TP_INTEGER                        = 29;\r
+    const TP_COMMA                          = 30;\r
+    const TP_MATH                           = 31;\r
+    const TP_UNIMATH                        = 32;\r
+    const TP_ANDSYM                         = 33;\r
+    const TP_ISIN                           = 34;\r
+    const TP_ISDIVBY                        = 35;\r
+    const TP_ISNOTDIVBY                     = 36;\r
+    const TP_ISEVEN                         = 37;\r
+    const TP_ISNOTEVEN                      = 38;\r
+    const TP_ISEVENBY                       = 39;\r
+    const TP_ISNOTEVENBY                    = 40;\r
+    const TP_ISODD                          = 41;\r
+    const TP_ISNOTODD                       = 42;\r
+    const TP_ISODDBY                        = 43;\r
+    const TP_ISNOTODDBY                     = 44;\r
+    const TP_INSTANCEOF                     = 45;\r
+    const TP_OPENP                          = 46;\r
+    const TP_CLOSEP                         = 47;\r
+    const TP_QMARK                          = 48;\r
+    const TP_NOT                            = 49;\r
+    const TP_TYPECAST                       = 50;\r
+    const TP_DOT                            = 51;\r
+    const TP_SINGLEQUOTESTRING              = 52;\r
+    const TP_DOUBLECOLON                    = 53;\r
+    const TP_AT                             = 54;\r
+    const TP_HATCH                          = 55;\r
+    const TP_OPENB                          = 56;\r
+    const TP_CLOSEB                         = 57;\r
+    const TP_EQUALS                         = 58;\r
+    const TP_NOTEQUALS                      = 59;\r
+    const TP_GREATERTHAN                    = 60;\r
+    const TP_LESSTHAN                       = 61;\r
+    const TP_GREATEREQUAL                   = 62;\r
+    const TP_LESSEQUAL                      = 63;\r
+    const TP_IDENTITY                       = 64;\r
+    const TP_NONEIDENTITY                   = 65;\r
+    const TP_MOD                            = 66;\r
+    const TP_LAND                           = 67;\r
+    const TP_LOR                            = 68;\r
+    const TP_LXOR                           = 69;\r
+    const TP_QUOTE                          = 70;\r
+    const TP_BACKTICK                       = 71;\r
+    const TP_DOLLARID                       = 72;\r
+    const YY_NO_ACTION = 548;\r
+    const YY_ACCEPT_ACTION = 547;\r
+    const YY_ERROR_ACTION = 546;\r
 \r
-    const YY_SZ_ACTTAB = 1995;\r
+    const YY_SZ_ACTTAB = 1810;\r
 static public $yy_action = array(\r
- /*     0 */   373,  584,   55,  252,  258,  280,    8,  196,  283,  115,\r
- /*    10 */    59,  107,  247,  119,  255,  112,  257,  122,   41,   43,\r
- /*    20 */    45,   40,   25,   27,  299,  298,   20,   28,  296,  297,\r
- /*    30 */    15,   14,    8,  330,   31,   17,  294,  239,  322,   35,\r
- /*    40 */   196,  112,  146,  294,  326,  337,  162,  312,  313,  314,\r
- /*    50 */   311,  310,  306,  307,  308,  309,  338,  339,  369,  196,\r
- /*    60 */   304,   23,   24,  202,   34,   37,   17,  360,    7,  322,\r
- /*    70 */    41,   43,   45,   40,   25,   27,  299,  298,   20,   28,\r
- /*    80 */   296,  297,   15,   14,  452,   17,  276,   17,  322,   36,\r
- /*    90 */   322,  452,  251,  258,  280,    2,  253,  109,  201,  312,\r
- /*   100 */   313,  314,  311,  310,  306,  307,  308,  309,  338,  339,\r
- /*   110 */   369,  133,  219,   17,  158,   42,  322,    8,   38,  213,\r
- /*   120 */   109,  154,  114,  365,   17,  351,  112,  322,  304,   22,\r
- /*   130 */   196,  227,   47,   46,  242,  315,  316,  317,  328,  243,\r
- /*   140 */    60,   41,   43,   45,   40,   25,   27,  299,  298,   20,\r
- /*   150 */    28,  296,  297,   15,   14,   56,   17,  231,   10,  322,\r
- /*   160 */    35,   54,    4,   60,   54,   32,   17,  117,  272,  241,\r
- /*   170 */   312,  313,  314,  311,  310,  306,  307,  308,  309,  338,\r
- /*   180 */   339,  369,  268,   41,   43,   45,   40,   25,   27,  299,\r
- /*   190 */   298,   20,   28,  296,  297,   15,   14,  139,  348,  282,\r
- /*   200 */   231,  209,  109,  218,  344,  273,  274,  185,   17,  358,\r
- /*   210 */   327,  322,  312,  313,  314,  311,  310,  306,  307,  308,\r
- /*   220 */   309,  338,  339,  369,  202,   41,   43,   45,   40,   25,\r
- /*   230 */    27,  299,  298,   20,   28,  296,  297,   15,   14,   97,\r
- /*   240 */   451,  324,  267,  180,  347,   60,  368,  196,  182,  265,\r
- /*   250 */   294,  207,  327,  196,  312,  313,  314,  311,  310,  306,\r
- /*   260 */   307,  308,  309,  338,  339,  369,   16,   41,   43,   45,\r
- /*   270 */    40,   25,   27,  299,  298,   20,   28,  296,  297,   15,\r
- /*   280 */    14,  149,   96,  261,   17,    8,  182,  199,  229,  116,\r
- /*   290 */   202,   54,  278,  101,  112,  304,  312,  313,  314,  311,\r
- /*   300 */   310,  306,  307,  308,  309,  338,  339,  369,  249,   41,\r
- /*   310 */    43,   45,   40,   25,   27,  299,  298,   20,   28,  296,\r
- /*   320 */   297,   15,   14,  156,  190,  224,   17,  321,  184,  322,\r
- /*   330 */   320,   13,  166,  347,  165,  347,  302,  304,  312,  313,\r
- /*   340 */   314,  311,  310,  306,  307,  308,  309,  338,  339,  369,\r
- /*   350 */   202,  287,   12,   41,   43,   45,   40,   25,   27,  299,\r
- /*   360 */   298,   20,   28,  296,  297,   15,   14,  202,  100,  244,\r
- /*   370 */   198,  362,  372,  381,  202,   19,  186,  222,  196,  114,\r
- /*   380 */   196,  327,  312,  313,  314,  311,  310,  306,  307,  308,\r
- /*   390 */   309,  338,  339,  369,  196,  328,    9,   23,   24,  240,\r
- /*   400 */    98,  271,   65,   21,   44,   41,   43,   45,   40,   25,\r
- /*   410 */    27,  299,  298,   20,   28,  296,  297,   15,   14,  145,\r
- /*   420 */   190,   44,  171,   64,  187,  367,  238,   13,   44,  353,\r
- /*   430 */   168,    5,  152,  304,  312,  313,  314,  311,  310,  306,\r
- /*   440 */   307,  308,  309,  338,  339,  369,  304,   41,   43,   45,\r
- /*   450 */    40,   25,   27,  299,  298,   20,   28,  296,  297,   15,\r
- /*   460 */    14,    8,  105,  236,   98,  342,  343,  380,  263,   98,\r
- /*   470 */   112,  183,  196,  196,  196,  327,  312,  313,  314,  311,\r
- /*   480 */   310,  306,  307,  308,  309,  338,  339,  369,  147,   41,\r
- /*   490 */    43,   45,   40,   25,   27,  299,  298,   20,   28,  296,\r
- /*   500 */   297,   15,   14,  332,  137,  329,  143,  281,  371,  288,\r
- /*   510 */   196,  267,  196,  279,  196,  196,  153,  327,  312,  313,\r
- /*   520 */   314,  311,  310,  306,  307,  308,  309,  338,  339,  369,\r
- /*   530 */   304,   41,   43,   45,   40,   25,   27,  299,  298,   20,\r
- /*   540 */    28,  296,  297,   15,   14,  148,  361,  293,  159,  341,\r
- /*   550 */   366,    6,  291,  196,  196,  270,  196,  196,  233,  304,\r
- /*   560 */   312,  313,  314,  311,  310,  306,  307,  308,  309,  338,\r
- /*   570 */   339,  369,  228,   41,   43,   45,   40,   25,   27,  299,\r
- /*   580 */   298,   20,   28,  296,  297,   15,   14,  349,  225,  305,\r
- /*   590 */   379,  174,  347,   63,  196,   26,  196,  196,   54,  110,\r
- /*   600 */   326,  178,  312,  313,  314,  311,  310,  306,  307,  308,\r
- /*   610 */   309,  338,  339,  369,   48,   41,   43,   45,   40,   25,\r
- /*   620 */    27,  299,  298,   20,   28,  296,  297,   15,   14,  202,\r
- /*   630 */   215,  333,  230,  116,  108,  209,  206,  116,  123,  221,\r
- /*   640 */   226,  246,  196,  262,  312,  313,  314,  311,  310,  306,\r
- /*   650 */   307,  308,  309,  338,  339,  369,  175,  128,  196,  303,\r
- /*   660 */   170,  289,  116,  250,    7,   41,   43,   45,   40,   25,\r
- /*   670 */    27,  299,  298,   20,   28,  296,  297,   15,   14,  144,\r
- /*   680 */   383,  275,  118,   26,  188,    5,  325,  113,  285,  211,\r
- /*   690 */   215,  334,  336,  304,  312,  313,  314,  311,  310,  306,\r
- /*   700 */   307,  308,  309,  338,  339,  369,  323,   41,   43,   45,\r
- /*   710 */    40,   25,   27,  299,  298,   20,   28,  296,  297,   15,\r
- /*   720 */    14,   18,  135,  245,  346,  277,  292,   62,  355,  335,\r
- /*   730 */   259,  126,  300,  242,  157,  327,  312,  313,  314,  311,\r
- /*   740 */   310,  306,  307,  308,  309,  338,  339,  369,  304,  354,\r
- /*   750 */   294,  382,  196,  111,   39,  217,  161,  350,  324,  295,\r
- /*   760 */    41,   43,   45,   40,   25,   27,  299,  298,   20,   28,\r
- /*   770 */   296,  297,   15,   14,  326,  131,   33,   11,   95,   61,\r
- /*   780 */    48,  254,  232,  256,  332,  332,  332,  332,  327,  312,\r
- /*   790 */   313,  314,  311,  310,  306,  307,  308,  309,  338,  339,\r
- /*   800 */   369,  202,   41,   43,   45,   40,   25,   27,  299,  298,\r
- /*   810 */    20,   28,  296,  297,   15,   14,  132,  332,  332,  332,\r
- /*   820 */   332,  332,  332,  378,  332,  332,  332,  332,  332,  327,\r
- /*   830 */   196,  312,  313,  314,  311,  310,  306,  307,  308,  309,\r
- /*   840 */   338,  339,  369,  332,  140,  332,  264,  332,  332,  136,\r
- /*   850 */   332,  332,  332,  332,    2,   44,  121,   57,  304,  125,\r
- /*   860 */     3,  223,  327,  235,    2,  142,  106,  191,  332,  163,\r
- /*   870 */   133,  219,  295,  332,   42,  332,  133,  332,  332,  304,\r
- /*   880 */   133,  219,  332,  304,   42,  332,  332,  332,   29,  332,\r
- /*   890 */   202,   47,   46,  295,  315,  316,  317,  295,   22,   60,\r
- /*   900 */     1,   47,   46,  332,  315,  316,  317,  332,  332,   60,\r
- /*   910 */     1,  269,  454,  332,   56,    2,  332,  106,  205,  454,\r
- /*   920 */   284,   30,  266,  332,   56,    2,  332,  109,  193,  332,\r
- /*   930 */   332,  133,  219,   17,  359,   42,  322,  332,  332,  332,\r
- /*   940 */   332,  133,  197,  332,   44,   42,  332,  332,  220,   22,\r
- /*   950 */   332,  332,   47,   46,  332,  315,  316,  317,  141,   22,\r
- /*   960 */    60,    1,   47,   46,  332,  315,  316,  317,  264,  332,\r
- /*   970 */    60,    1,  304,   23,   24,   56,    2,  332,  109,  201,\r
- /*   980 */   332,  332,    3,  332,  332,   56,    2,  332,  106,  205,\r
- /*   990 */   332,  332,  133,  219,  332,  332,   42,  332,  133,  332,\r
- /*  1000 */   332,  332,  133,  219,  332,  332,   42,  332,  332,  332,\r
- /*  1010 */    22,  332,  332,   47,   46,  332,  315,  316,  317,  151,\r
- /*  1020 */    29,   60,    1,   47,   46,  332,  315,  316,  317,  332,\r
- /*  1030 */   332,   60,    1,  304,   23,   24,   56,    2,  332,  106,\r
- /*  1040 */   194,  332,  290,   30,  266,  332,   56,    2,  332,  106,\r
- /*  1050 */   192,  332,  332,  133,  219,  332,  332,   42,  332,  332,\r
- /*  1060 */   332,  332,  332,  133,  219,  332,  332,   42,  332,  332,\r
- /*  1070 */   332,   22,  332,  332,   47,   46,  332,  315,  316,  317,\r
- /*  1080 */   332,   29,   60,    1,   47,   46,  332,  315,  316,  317,\r
- /*  1090 */   332,  332,   60,    1,  332,  332,  332,   56,    2,  332,\r
- /*  1100 */   120,  205,  332,  332,  332,  160,  332,   56,    2,  332,\r
- /*  1110 */   109,  204,  332,  332,  133,  219,  332,  332,   42,  304,\r
- /*  1120 */    23,   24,  332,  332,  133,  219,  332,  332,   42,  332,\r
- /*  1130 */   332,  332,   22,  332,  332,   47,   46,  332,  315,  316,\r
- /*  1140 */   317,  332,   22,   60,    1,   47,   46,  332,  315,  316,\r
- /*  1150 */   317,  332,  332,   60,  332,  332,  332,  319,   56,    2,\r
- /*  1160 */   332,  109,  203,  332,  332,  155,  332,  208,   56,  332,\r
- /*  1170 */   114,  332,  332,  332,  332,  133,  219,  332,  234,   42,\r
- /*  1180 */   332,  332,  332,  331,  318,  332,  328,  260,   99,  332,\r
- /*  1190 */   352,  356,  357,   22,  332,  332,   47,   46,  332,  315,\r
- /*  1200 */   316,  317,  332,  173,   60,  319,    2,  332,  332,  332,\r
- /*  1210 */   332,  332,  332,  138,  332,  208,   94,  332,  114,   56,\r
- /*  1220 */   332,  332,  133,  332,  332,  319,  370,  332,  332,  332,\r
- /*  1230 */   332,  331,  318,   58,  328,  104,   53,  129,  102,  332,\r
- /*  1240 */   332,  332,  332,  200,  364,  332,  370,  332,  319,  332,\r
- /*  1250 */   332,  331,  318,  332,  328,  319,   58,  332,  103,   51,\r
- /*  1260 */   129,  102,  332,  181,  332,  208,  332,  332,  114,  370,\r
- /*  1270 */   332,  332,  332,  332,  331,  318,  301,  328,  332,  332,\r
- /*  1280 */   332,  331,  318,  319,  328,  332,  332,  319,  332,  332,\r
- /*  1290 */   332,  150,  332,  208,   66,  134,  114,  208,   50,  127,\r
- /*  1300 */   114,  332,  332,  332,  370,  376,  374,  375,  370,  331,\r
- /*  1310 */   318,  332,  328,  331,  318,  319,  328,  332,  332,  210,\r
- /*  1320 */   173,  340,  377,  150,  332,  208,   66,  319,  114,  332,\r
- /*  1330 */   332,  332,  332,  332,  332,  150,  370,  208,   66,  332,\r
- /*  1340 */   114,  331,  318,  332,  328,  332,  332,  332,  370,  319,\r
- /*  1350 */   332,  216,  332,  331,  318,  332,  328,  138,  332,  208,\r
- /*  1360 */    94,  332,  114,  286,  332,  332,  332,  332,  332,  332,\r
- /*  1370 */   370,  332,  332,  319,  332,  331,  318,  332,  328,  332,\r
- /*  1380 */   332,  150,  332,  208,   66,  319,  114,  332,  363,  332,\r
- /*  1390 */   332,  332,  332,  130,  370,  208,   79,  248,  114,  331,\r
- /*  1400 */   318,  332,  328,  332,  332,  319,  370,  332,  332,  212,\r
- /*  1410 */   332,  331,  318,  150,  328,  208,   71,  319,  114,  332,\r
- /*  1420 */   332,  237,  332,  332,  332,  150,  370,  208,   52,  124,\r
- /*  1430 */   114,  331,  318,  332,  328,  332,  332,  332,  370,  319,\r
- /*  1440 */   332,  332,  332,  331,  318,  332,  328,  150,  332,  195,\r
- /*  1450 */    67,  332,  114,  332,  332,  332,  332,  332,  332,  332,\r
- /*  1460 */   370,  332,  332,  319,  332,  331,  318,  332,  328,  332,\r
- /*  1470 */   332,  150,  332,  208,   89,  319,  114,  332,  332,  332,\r
- /*  1480 */   332,  332,  332,  150,  370,  208,   92,  319,  114,  331,\r
- /*  1490 */   318,  332,  328,  332,  332,  150,  370,  208,   70,  319,\r
- /*  1500 */   114,  331,  318,  332,  328,  332,  332,  150,  370,  208,\r
- /*  1510 */    93,  319,  114,  331,  318,  332,  328,  332,  332,  150,\r
- /*  1520 */   370,  208,   88,  332,  114,  331,  318,  332,  328,  332,\r
- /*  1530 */   332,  332,  370,  319,  332,  332,  332,  331,  318,  332,\r
- /*  1540 */   328,  150,  319,  208,   78,  332,  114,  332,  332,  332,\r
- /*  1550 */   150,  332,  208,   81,  370,  114,  332,  332,  332,  331,\r
- /*  1560 */   318,  332,  328,  370,  319,  332,  332,  332,  331,  318,\r
- /*  1570 */   332,  328,  150,  319,  208,   82,  332,  114,  332,  332,\r
- /*  1580 */   332,  150,  332,  208,   73,  370,  114,  332,  332,  332,\r
- /*  1590 */   331,  318,  332,  328,  370,  332,  332,  319,  332,  331,\r
- /*  1600 */   318,  319,  328,  332,  332,  150,  332,  208,   86,  150,\r
- /*  1610 */   114,  208,   80,  332,  114,  332,  332,  332,  370,  332,\r
- /*  1620 */   332,  332,  370,  331,  318,  332,  328,  331,  318,  332,\r
- /*  1630 */   328,  319,  332,  332,  332,  332,  332,  332,  332,  150,\r
- /*  1640 */   319,  208,   76,  332,  114,  332,  332,  332,  150,  332,\r
- /*  1650 */   208,   90,  370,  114,  332,  332,  332,  331,  318,  332,\r
- /*  1660 */   328,  370,  319,  332,  332,  332,  331,  318,  332,  328,\r
- /*  1670 */   150,  319,  208,   83,  332,  114,  332,  332,  332,  150,\r
- /*  1680 */   332,  208,   84,  370,  114,  332,  332,  332,  331,  318,\r
- /*  1690 */   332,  328,  370,  332,  332,  319,  332,  331,  318,  319,\r
- /*  1700 */   328,  332,  332,  150,  332,  208,   75,  150,  114,  208,\r
- /*  1710 */    85,  332,  114,  332,  332,  332,  370,  332,  332,  332,\r
- /*  1720 */   370,  331,  318,  332,  328,  331,  318,  332,  328,  319,\r
- /*  1730 */   332,  332,  332,  332,  332,  332,  332,  150,  319,  208,\r
- /*  1740 */    49,  332,  114,  332,  332,  332,  150,  332,  208,   74,\r
- /*  1750 */   370,  114,  332,  332,  332,  331,  318,  332,  328,  370,\r
- /*  1760 */   319,  332,  332,  332,  331,  318,  332,  328,  150,  319,\r
- /*  1770 */   208,   72,  332,  114,  332,  332,  332,  150,  332,  208,\r
- /*  1780 */    68,  370,  114,  332,  332,  332,  331,  318,  332,  328,\r
- /*  1790 */   370,  332,  332,  319,  332,  331,  318,  319,  328,  332,\r
- /*  1800 */   332,  150,  332,  208,   91,  150,  114,  208,   77,  332,\r
- /*  1810 */   114,  332,  332,  332,  370,  332,  332,  332,  370,  331,\r
- /*  1820 */   318,  332,  328,  331,  318,  332,  328,  319,  332,  332,\r
- /*  1830 */   332,  332,  332,  332,  332,  150,  319,  208,   87,  332,\r
- /*  1840 */   114,  332,  332,  332,  150,  332,  208,   69,  370,  114,\r
- /*  1850 */   332,  332,  332,  331,  318,  332,  328,  370,  319,  202,\r
- /*  1860 */   332,  332,  331,  318,  332,  328,  172,  319,  208,  332,\r
- /*  1870 */   332,  114,  332,  332,  332,  177,  332,  208,  332,  332,\r
- /*  1880 */   114,  345,  332,  332,  331,  318,  214,  328,  196,  332,\r
- /*  1890 */   332,  319,  332,  331,  318,  319,  328,  332,  332,  189,\r
- /*  1900 */   332,  208,  332,  169,  114,  208,  332,  332,  114,  332,\r
- /*  1910 */   332,  332,  332,  332,    8,  332,  332,  331,  318,  332,\r
- /*  1920 */   328,  331,  318,  112,  328,  319,  332,  332,  332,  332,\r
- /*  1930 */   332,  332,  332,  179,  319,  208,  332,  332,  114,  332,\r
- /*  1940 */   332,  332,  176,  332,  208,  332,  332,  114,  332,  332,\r
- /*  1950 */   332,  331,  318,  332,  328,  332,  319,  332,  332,  332,\r
- /*  1960 */   331,  318,  332,  328,  167,  319,  208,  332,  332,  114,\r
- /*  1970 */   332,  332,  332,  164,  332,  208,  332,  332,  114,  332,\r
- /*  1980 */   332,  332,  331,  318,  332,  328,  332,  332,  332,  332,\r
- /*  1990 */   332,  331,  318,  332,  328,\r
+ /*     0 */   183,  280,    7,   38,  325,  217,  275,  199,   53,  119,\r
+ /*    10 */   104,  266,  317,  156,  323,  308,  305,  309,  335,  184,\r
+ /*    20 */   153,  298,  307,  283,  281,  193,  278,   32,  104,  319,\r
+ /*    30 */    47,   46,   45,   39,   16,   23,  341,  337,   21,   18,\r
+ /*    40 */   338,  339,   19,   20,  278,   43,  296,  293,  292,  288,\r
+ /*    50 */   289,  290,  153,  157,  323,    3,   24,  348,  355,  356,\r
+ /*    60 */   357,  358,  354,  353,  349,  350,  351,  352,  336,  183,\r
+ /*    70 */   280,  125,  183,  117,  100,   12,   99,   51,  121,  102,\r
+ /*    80 */   148,  322,  112,   26,  331,  168,    4,  335,  184,  191,\r
+ /*    90 */   333,  184,  283,  281,  286,  278,  459,  184,  316,   47,\r
+ /*   100 */    46,   45,   39,   16,   23,  341,  337,   21,   18,  338,\r
+ /*   110 */   339,   19,   20,  294,  295,  297,   12,   12,  547,   84,\r
+ /*   120 */   226,  295,  297,  112,  112,   36,  348,  355,  356,  357,\r
+ /*   130 */   358,  354,  353,  349,  350,  351,  352,  336,  183,  137,\r
+ /*   140 */    87,  280,  261,  240,  254,  182,  253,  199,   49,  118,\r
+ /*   150 */   104,   38,  123,  286,  275,   29,  172,  184,  335,   10,\r
+ /*   160 */   421,   13,   14,  283,  281,  277,  278,  421,   47,   46,\r
+ /*   170 */    45,   39,   16,   23,  341,  337,   21,   18,  338,  339,\r
+ /*   180 */    19,   20,  183,  318,   28,  280,  113,  133,  152,  282,\r
+ /*   190 */   184,  199,   43,  202,  104,  348,  355,  356,  357,  358,\r
+ /*   200 */   354,  353,  349,  350,  351,  352,  336,  283,  281,  306,\r
+ /*   210 */   278,  299,   47,   46,   45,   39,   16,   23,  341,  337,\r
+ /*   220 */    21,   18,  338,  339,   19,   20,   38,   89,   38,  275,\r
+ /*   230 */    29,  275,  271,  238,  122,  113,  195,    2,  244,  348,\r
+ /*   240 */   355,  356,  357,  358,  354,  353,  349,  350,  351,  352,\r
+ /*   250 */   336,  183,  280,  125,  183,  187,  174,   12,  199,   83,\r
+ /*   260 */   229,  104,  200,  163,  112,  419,  302,  274,  245,  335,\r
+ /*   270 */   202,  215,  419,  184,  283,  281,   89,  278,  204,  207,\r
+ /*   280 */   234,   47,   46,   45,   39,   16,   23,  341,  337,   21,\r
+ /*   290 */    18,  338,  339,   19,   20,  236,   17,  232,   12,  313,\r
+ /*   300 */     8,   38,   54,   54,  275,  112,  184,  340,  348,  355,\r
+ /*   310 */   356,  357,  358,  354,  353,  349,  350,  351,  352,  336,\r
+ /*   320 */   183,  280,   35,  165,  418,  100,  104,  101,   52,  121,\r
+ /*   330 */   102,  184,   38,  326,  271,  275,  172,  196,  335,  184,\r
+ /*   340 */    10,   13,  278,  283,  281,  359,  278,  218,  228,  183,\r
+ /*   350 */    47,   46,   45,   39,   16,   23,  341,  337,   21,   18,\r
+ /*   360 */   338,  339,   19,   20,  183,  344,   38,  280,  184,  211,\r
+ /*   370 */   265,  273,  184,  199,   26,  271,  104,  348,  355,  356,\r
+ /*   380 */   357,  358,  354,  353,  349,  350,  351,  352,  336,  283,\r
+ /*   390 */   281,  147,  278,  274,   47,   46,   45,   39,   16,   23,\r
+ /*   400 */   341,  337,   21,   18,  338,  339,   19,   20,  183,  208,\r
+ /*   410 */   230,   38,   38,  327,  275,  275,   33,   40,  107,  225,\r
+ /*   420 */   166,  348,  355,  356,  357,  358,  354,  353,  349,  350,\r
+ /*   430 */   351,  352,  336,  224,  267,  184,  158,  323,   47,   46,\r
+ /*   440 */    45,   39,   16,   23,  341,  337,   21,   18,  338,  339,\r
+ /*   450 */    19,   20,  183,  210,   38,  280,  332,  185,   92,  284,\r
+ /*   460 */   155,  199,  233,  184,  104,  348,  355,  356,  357,  358,\r
+ /*   470 */   354,  353,  349,  350,  351,  352,  336,  283,  281,  145,\r
+ /*   480 */   278,  201,   47,   46,   45,   39,   16,   23,  341,  337,\r
+ /*   490 */    21,   18,  338,  339,   19,   20,  183,  324,   95,  239,\r
+ /*   500 */   161,  323,  189,  178,  184,   43,  347,  150,  247,  348,\r
+ /*   510 */   355,  356,  357,  358,  354,  353,  349,  350,  351,  352,\r
+ /*   520 */   336,  286,  235,  115,  208,  268,   47,   46,   45,   39,\r
+ /*   530 */    16,   23,  341,  337,   21,   18,  338,  339,   19,   20,\r
+ /*   540 */   183,  312,  160,  280,  345,  203,  231,  272,  184,  199,\r
+ /*   550 */   154,  184,  104,  348,  355,  356,  357,  358,  354,  353,\r
+ /*   560 */   349,  350,  351,  352,  336,  283,  281,  279,  278,  188,\r
+ /*   570 */    47,   46,   45,   39,   16,   23,  341,  337,   21,   18,\r
+ /*   580 */   338,  339,   19,   20,  183,   37,  214,  280,  315,   93,\r
+ /*   590 */   114,  241,  108,  199,  194,  184,  104,  348,  355,  356,\r
+ /*   600 */   357,  358,  354,  353,  349,  350,  351,  352,  336,  283,\r
+ /*   610 */   281,   90,  278,  255,   47,   46,   45,   39,   16,   23,\r
+ /*   620 */   341,  337,   21,   18,  338,  339,   19,   20,  183,  300,\r
+ /*   630 */    12,  256,  310,  271,  198,  258,  184,  112,  184,  221,\r
+ /*   640 */   328,  348,  355,  356,  357,  358,  354,  353,  349,  350,\r
+ /*   650 */   351,  352,  336,  213,  109,  252,  216,   11,   47,   46,\r
+ /*   660 */    45,   39,   16,   23,  341,  337,   21,   18,  338,  339,\r
+ /*   670 */    19,   20,  183,  303,  243,  280,  334,    4,  184,  311,\r
+ /*   680 */   184,  199,   54,  184,  104,  348,  355,  356,  357,  358,\r
+ /*   690 */   354,  353,  349,  350,  351,  352,  336,  283,  281,   34,\r
+ /*   700 */   278,    9,   47,   46,   45,   39,   16,   23,  341,  337,\r
+ /*   710 */    21,   18,  338,  339,   19,   20,   38,  196,  304,  275,\r
+ /*   720 */    27,  262,  263,  233,  238,  184,  106,  250,    2,  348,\r
+ /*   730 */   355,  356,  357,  358,  354,  353,  349,  350,  351,  352,\r
+ /*   740 */   336,  183,  280,  301,  125,  291,  217,  201,  199,   64,\r
+ /*   750 */    43,  104,  134,   43,  212,   38,  329,  162,  275,  335,\r
+ /*   760 */   237,    6,  159,  266,  283,  281,  286,  278,   94,  135,\r
+ /*   770 */   220,   47,   46,   45,   39,   16,   23,  341,  337,   21,\r
+ /*   780 */    18,  338,  339,   19,   20,  183,  246,   17,  232,  330,\r
+ /*   790 */    88,  219,    5,  274,   41,   54,  184,  257,  348,  355,\r
+ /*   800 */   356,  357,  358,  354,  353,  349,  350,  351,  352,  336,\r
+ /*   810 */   111,  197,  139,  276,  248,   47,   46,   45,   39,   16,\r
+ /*   820 */    23,  341,  337,   21,   18,  338,  339,   19,   20,  183,\r
+ /*   830 */   287,  343,  314,   22,  144,   91,  270,  184,  184,  184,\r
+ /*   840 */   142,  227,  348,  355,  356,  357,  358,  354,  353,  349,\r
+ /*   850 */   350,  351,  352,  336,  286,   40,  249,  303,  303,   47,\r
+ /*   860 */    46,   45,   39,   16,   23,  341,  337,   21,   18,  338,\r
+ /*   870 */   339,   19,   20,  183,  264,  303,  280,  303,  303,  303,\r
+ /*   880 */   269,  116,  199,  303,  303,  104,  348,  355,  356,  357,\r
+ /*   890 */   358,  354,  353,  349,  350,  351,  352,  336,  283,  281,\r
+ /*   900 */   303,  278,  303,   47,   46,   45,   39,   16,   23,  341,\r
+ /*   910 */   337,   21,   18,  338,  339,   19,   20,  167,  303,  303,\r
+ /*   920 */   303,  303,  303,  303,  303,  303,  303,   31,   15,  303,\r
+ /*   930 */   348,  355,  356,  357,  358,  354,  353,  349,  350,  351,\r
+ /*   940 */   352,  336,  132,    3,  303,  105,   86,  167,  120,  303,\r
+ /*   950 */   222,    3,  205,  110,  169,  303,  286,   31,   15,  125,\r
+ /*   960 */   209,   98,  126,   48,  303,  131,  303,  125,  209,  129,\r
+ /*   970 */   164,   48,  303,  303,  277,  277,  303,   25,  303,  286,\r
+ /*   980 */    44,   42,  277,  285,  303,   30,   89,    1,   44,   42,\r
+ /*   990 */     3,  285,  110,  175,   89,    1,  242,  151,  143,  303,\r
+ /*  1000 */   303,   85,    3,  167,  110,  175,  125,  209,  303,   85,\r
+ /*  1010 */    48,  286,  286,   31,   15,  136,  303,  146,  125,  209,\r
+ /*  1020 */   303,  303,   48,  303,   30,  270,  303,   44,   42,  286,\r
+ /*  1030 */   285,  286,  303,   89,    1,    3,   25,  113,  175,   44,\r
+ /*  1040 */    42,  124,  285,  270,  128,   89,    1,    3,   85,  113,\r
+ /*  1050 */   170,  125,  209,   97,  277,   48,  303,  277,   96,  303,\r
+ /*  1060 */    85,  303,  303,  125,  179,  303,  277,   48,  303,   30,\r
+ /*  1070 */   303,  277,   44,   42,  149,  285,  127,  303,   89,    1,\r
+ /*  1080 */     3,   30,  110,  173,   44,   42,  303,  285,  286,  277,\r
+ /*  1090 */    89,    1,    3,   85,  103,  175,  125,  209,  303,  303,\r
+ /*  1100 */    48,  130,  270,  303,  303,   85,  303,  141,  125,  209,\r
+ /*  1110 */   303,  303,   48,  303,   30,  286,  303,   44,   42,  303,\r
+ /*  1120 */   285,  286,  303,   89,    1,    3,   30,  110,  171,   44,\r
+ /*  1130 */    42,  303,  285,  303,  303,   89,    1,    3,   85,  113,\r
+ /*  1140 */   175,  125,  209,  303,  303,   48,  303,  303,  303,  303,\r
+ /*  1150 */    85,  303,  303,  125,  209,  303,  303,   48,  303,   25,\r
+ /*  1160 */   303,  303,   44,   42,  303,  285,  303,  303,   89,    1,\r
+ /*  1170 */     3,   30,  113,  177,   44,   42,  303,  285,  303,  303,\r
+ /*  1180 */    89,  303,  303,   85,  303,  303,  125,  209,  303,  303,\r
+ /*  1190 */    48,  303,  280,  303,  303,   85,  176,  303,  199,   71,\r
+ /*  1200 */   303,  104,  303,  303,   30,  303,  303,   44,   42,  335,\r
+ /*  1210 */   285,  303,  303,   89,  283,  281,  280,  278,  303,  303,\r
+ /*  1220 */   217,  303,  199,   62,  303,  104,  180,  321,   85,  303,\r
+ /*  1230 */   303,  303,  303,  335,  303,  303,  303,  303,  283,  281,\r
+ /*  1240 */   280,  278,  303,  303,  217,  303,  199,   62,  206,  104,\r
+ /*  1250 */   303,  303,  280,  303,  303,  303,  217,  335,  199,   62,\r
+ /*  1260 */   303,  104,  283,  281,  280,  278,  303,  303,  176,  335,\r
+ /*  1270 */   199,   71,  223,  104,  283,  281,  303,  278,  303,  303,\r
+ /*  1280 */   303,  335,  303,  303,  251,  303,  283,  281,  280,  278,\r
+ /*  1290 */   303,  303,  217,  303,  199,   62,  303,  104,  303,  320,\r
+ /*  1300 */   280,  303,  303,  303,  217,  335,  199,   65,  303,  104,\r
+ /*  1310 */   283,  281,  303,  278,  303,  303,  303,  335,  303,  303,\r
+ /*  1320 */   190,  303,  283,  281,  280,  278,  303,  303,  217,  303,\r
+ /*  1330 */   199,   73,  303,  104,  303,  303,  280,  303,  303,  303,\r
+ /*  1340 */   217,  335,  199,   72,  303,  104,  283,  281,  280,  278,\r
+ /*  1350 */   303,  303,  217,  335,  199,   63,  303,  104,  283,  281,\r
+ /*  1360 */   303,  278,  303,  303,  303,  335,  303,  303,  303,  303,\r
+ /*  1370 */   283,  281,  280,  278,  303,  303,  217,  303,  199,   70,\r
+ /*  1380 */   303,  104,  303,  303,  280,  303,  303,  303,  217,  335,\r
+ /*  1390 */   199,   67,  303,  104,  283,  281,  303,  278,  303,  303,\r
+ /*  1400 */   303,  335,  303,  303,  303,  303,  283,  281,  280,  278,\r
+ /*  1410 */   303,  303,  217,  303,  199,   75,  303,  104,  303,  303,\r
+ /*  1420 */   280,  303,  303,  303,  217,  335,  199,   74,  303,  104,\r
+ /*  1430 */   283,  281,  280,  278,  303,  303,  217,  335,  199,   79,\r
+ /*  1440 */   303,  104,  283,  281,  303,  278,  303,  303,  303,  335,\r
+ /*  1450 */   303,  303,  303,  303,  283,  281,  280,  278,  303,  303,\r
+ /*  1460 */   217,  303,  199,   66,  303,  104,  303,  303,  280,  303,\r
+ /*  1470 */   303,  303,  217,  335,  199,   57,  303,  104,  283,  281,\r
+ /*  1480 */   303,  278,  303,  303,  303,  335,  303,  303,  303,  303,\r
+ /*  1490 */   283,  281,  280,  278,  303,  303,  217,  303,  199,   76,\r
+ /*  1500 */   303,  104,  303,  303,  280,  303,  303,  303,  217,  335,\r
+ /*  1510 */   199,   82,  303,  104,  283,  281,  280,  278,  303,  303,\r
+ /*  1520 */   217,  335,  181,   59,  303,  104,  283,  281,  303,  278,\r
+ /*  1530 */   303,  303,  303,  335,  303,  303,  303,  303,  283,  281,\r
+ /*  1540 */   280,  278,  303,  303,  217,  303,  199,   81,  303,  104,\r
+ /*  1550 */   303,  303,  280,  303,  303,  303,  217,  335,  199,   77,\r
+ /*  1560 */   303,  104,  283,  281,  303,  278,  303,  303,  303,  335,\r
+ /*  1570 */   303,  303,  303,  303,  283,  281,  280,  278,  303,  303,\r
+ /*  1580 */   217,  303,  199,   50,  303,  104,  303,  303,  280,  303,\r
+ /*  1590 */   303,  303,  217,  335,  199,   55,  303,  104,  283,  281,\r
+ /*  1600 */   280,  278,  303,  303,  217,  335,  199,   69,  303,  104,\r
+ /*  1610 */   283,  281,  303,  278,  303,  303,  303,  335,  303,  303,\r
+ /*  1620 */   303,  303,  283,  281,  280,  278,  303,  303,  217,  303,\r
+ /*  1630 */   199,   60,  303,  104,  303,  303,  280,  303,  303,  303,\r
+ /*  1640 */   217,  335,  199,   61,  303,  104,  283,  281,  303,  278,\r
+ /*  1650 */   303,  303,  303,  335,  303,  303,  303,  303,  283,  281,\r
+ /*  1660 */   280,  278,  303,  303,  217,  303,  199,   56,  303,  104,\r
+ /*  1670 */   303,  303,  280,  303,  303,  303,  217,  335,  199,   80,\r
+ /*  1680 */   303,  104,  283,  281,  280,  278,  303,  303,  217,  335,\r
+ /*  1690 */   199,   68,  303,  104,  283,  281,  303,  278,  303,  303,\r
+ /*  1700 */   303,  335,  303,  303,  303,  303,  283,  281,  280,  278,\r
+ /*  1710 */   303,  303,  217,  303,  199,   58,  303,  104,  303,  303,\r
+ /*  1720 */   280,  303,  303,  303,  217,  335,  199,   78,  303,  104,\r
+ /*  1730 */   283,  281,  303,  278,  303,  303,  303,  335,  303,  303,\r
+ /*  1740 */   303,  138,  283,  281,  280,  278,  167,  303,  192,  303,\r
+ /*  1750 */   199,  303,  303,  104,  280,  286,   31,   15,  342,  303,\r
+ /*  1760 */   199,  186,  303,  104,  303,  303,  283,  281,  303,  278,\r
+ /*  1770 */   303,  346,  303,  303,  303,  303,  283,  281,  303,  278,\r
+ /*  1780 */   140,  303,  303,  303,  280,  167,  303,  303,  259,  303,\r
+ /*  1790 */   199,  303,  303,  104,  286,   31,   15,  303,  303,  303,\r
+ /*  1800 */   303,  260,  303,  303,  303,  303,  283,  281,  303,  278,\r
     );\r
     static public $yy_lookahead = array(\r
- /*     0 */    23,   86,   87,   88,   89,   90,   56,   30,    9,   10,\r
- /*    10 */    25,   12,   27,   14,   29,   65,   31,   24,   41,   42,\r
- /*    20 */    43,   44,   45,   46,   47,   48,   49,   50,   51,   52,\r
- /*    30 */    53,   54,   56,   23,   22,   22,   33,   61,   25,   26,\r
- /*    40 */    30,   65,  119,   33,  121,   69,   98,   70,   71,   72,\r
- /*    50 */    73,   74,   75,   76,   77,   78,   79,   80,   81,   30,\r
- /*    60 */   112,  113,  114,    1,   35,   34,   22,   23,   56,   25,\r
- /*    70 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,\r
- /*    80 */    51,   52,   53,   54,   23,   22,   83,   22,   25,   26,\r
- /*    90 */    25,   30,   88,   89,   90,   22,   33,   24,   25,   70,\r
- /*   100 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,\r
- /*   110 */    81,   38,   39,   22,   98,   42,   25,   56,   22,   99,\r
- /*   120 */    24,   25,  102,   23,   22,   23,   65,   25,  112,   56,\r
- /*   130 */    30,   66,   59,   60,    2,   62,   63,   64,  118,   37,\r
- /*   140 */    67,   41,   42,   43,   44,   45,   46,   47,   48,   49,\r
- /*   150 */    50,   51,   52,   53,   54,   82,   22,   66,   26,   25,\r
- /*   160 */    26,   28,   26,   67,   28,   22,   22,   24,   25,   25,\r
- /*   170 */    70,   71,   72,   73,   74,   75,   76,   77,   78,   79,\r
- /*   180 */    80,   81,   39,   41,   42,   43,   44,   45,   46,   47,\r
- /*   190 */    48,   49,   50,   51,   52,   53,   54,  108,   90,   57,\r
- /*   200 */    66,   65,   24,   25,   96,   62,   63,   23,   22,   23,\r
- /*   210 */   121,   25,   70,   71,   72,   73,   74,   75,   76,   77,\r
- /*   220 */    78,   79,   80,   81,    1,   41,   42,   43,   44,   45,\r
- /*   230 */    46,   47,   48,   49,   50,   51,   52,   53,   54,  108,\r
- /*   240 */    23,  120,   89,  122,  123,   67,   23,   30,  103,   23,\r
- /*   250 */    33,   28,  121,   30,   70,   71,   72,   73,   74,   75,\r
- /*   260 */    76,   77,   78,   79,   80,   81,   37,   41,   42,   43,\r
- /*   270 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,\r
- /*   280 */    54,   98,  129,  130,   22,   56,  103,   25,   93,   94,\r
- /*   290 */     1,   28,   16,   17,   65,  112,   70,   71,   72,   73,\r
- /*   300 */    74,   75,   76,   77,   78,   79,   80,   81,   13,   41,\r
- /*   310 */    42,   43,   44,   45,   46,   47,   48,   49,   50,   51,\r
- /*   320 */    52,   53,   54,   98,   61,   36,   22,   25,  103,   25,\r
- /*   330 */   123,   68,  122,  123,  122,  123,   25,  112,   70,   71,\r
- /*   340 */    72,   73,   74,   75,   76,   77,   78,   79,   80,   81,\r
- /*   350 */     1,   83,   40,   41,   42,   43,   44,   45,   46,   47,\r
- /*   360 */    48,   49,   50,   51,   52,   53,   54,    1,  108,  105,\r
- /*   370 */   106,   23,   23,   23,    1,   58,   99,   66,   30,  102,\r
- /*   380 */    30,  121,   70,   71,   72,   73,   74,   75,   76,   77,\r
- /*   390 */    78,   79,   80,   81,   30,  118,   40,  113,  114,   91,\r
- /*   400 */    92,  124,  104,   37,   55,   41,   42,   43,   44,   45,\r
- /*   410 */    46,   47,   48,   49,   50,   51,   52,   53,   54,   98,\r
- /*   420 */    61,   55,   32,  104,  103,   69,   25,   68,   55,   23,\r
- /*   430 */    40,   26,   98,  112,   70,   71,   72,   73,   74,   75,\r
- /*   440 */    76,   77,   78,   79,   80,   81,  112,   41,   42,   43,\r
- /*   450 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,\r
- /*   460 */    54,   56,  108,   91,   92,   23,   23,   23,   91,   92,\r
- /*   470 */    65,   23,   30,   30,   30,  121,   70,   71,   72,   73,\r
- /*   480 */    74,   75,   76,   77,   78,   79,   80,   81,  119,   41,\r
- /*   490 */    42,   43,   44,   45,   46,   47,   48,   49,   50,   51,\r
- /*   500 */    52,   53,   54,   23,  108,   23,  119,   23,   23,   57,\r
- /*   510 */    30,   89,   30,   23,   30,   30,   98,  121,   70,   71,\r
- /*   520 */    72,   73,   74,   75,   76,   77,   78,   79,   80,   81,\r
- /*   530 */   112,   41,   42,   43,   44,   45,   46,   47,   48,   49,\r
- /*   540 */    50,   51,   52,   53,   54,   98,   23,   23,  119,   23,\r
- /*   550 */    23,   30,  130,   30,   30,   23,   30,   30,   25,  112,\r
- /*   560 */    70,   71,   72,   73,   74,   75,   76,   77,   78,   79,\r
- /*   570 */    80,   81,   39,   41,   42,   43,   44,   45,   46,   47,\r
- /*   580 */    48,   49,   50,   51,   52,   53,   54,   23,  109,   23,\r
- /*   590 */    23,  122,  123,  104,   30,   26,   30,   30,   28,   24,\r
- /*   600 */   121,  104,   70,   71,   72,   73,   74,   75,   76,   77,\r
- /*   610 */    78,   79,   80,   81,    2,   41,   42,   43,   44,   45,\r
- /*   620 */    46,   47,   48,   49,   50,   51,   52,   53,   54,    1,\r
- /*   630 */    61,  117,   93,   94,   24,   65,   93,   94,  124,   24,\r
- /*   640 */    25,   36,   30,   69,   70,   71,   72,   73,   74,   75,\r
- /*   650 */    76,   77,   78,   79,   80,   81,   32,   30,   30,   25,\r
- /*   660 */    25,   93,   94,   23,   56,   41,   42,   43,   44,   45,\r
- /*   670 */    46,   47,   48,   49,   50,   51,   52,   53,   54,   98,\r
- /*   680 */    15,   11,   24,   26,  103,   26,   25,   24,   57,   25,\r
- /*   690 */    61,   69,   67,  112,   70,   71,   72,   73,   74,   75,\r
- /*   700 */    76,   77,   78,   79,   80,   81,   25,   41,   42,   43,\r
- /*   710 */    44,   45,   46,   47,   48,   49,   50,   51,   52,   53,\r
- /*   720 */    54,    2,  108,   57,   25,    5,   23,   25,   18,   67,\r
- /*   730 */    23,   57,   39,    2,   98,  121,   70,   71,   72,   73,\r
- /*   740 */    74,   75,   76,   77,   78,   79,   80,   81,  112,   23,\r
- /*   750 */    33,  112,   30,   24,   30,  111,  119,   20,  120,  126,\r
- /*   760 */    41,   42,   43,   44,   45,   46,   47,   48,   49,   50,\r
- /*   770 */    51,   52,   53,   54,  121,  108,  107,   56,   95,  119,\r
- /*   780 */     2,   30,  107,  105,  131,  131,  131,  131,  121,   70,\r
- /*   790 */    71,   72,   73,   74,   75,   76,   77,   78,   79,   80,\r
- /*   800 */    81,    1,   41,   42,   43,   44,   45,   46,   47,   48,\r
- /*   810 */    49,   50,   51,   52,   53,   54,  108,  131,  131,  131,\r
- /*   820 */   131,  131,  131,   23,  131,  131,  131,  131,  131,  121,\r
- /*   830 */    30,   70,   71,   72,   73,   74,   75,   76,   77,   78,\r
- /*   840 */    79,   80,   81,  131,   98,  131,    8,  131,  131,  108,\r
- /*   850 */   131,  131,  131,  131,   22,   55,   24,   25,  112,   27,\r
- /*   860 */    22,   29,  121,   31,   22,   98,   24,   25,  131,   98,\r
- /*   870 */    38,   39,  126,  131,   42,  131,   38,  131,  131,  112,\r
- /*   880 */    38,   39,  131,  112,   42,  131,  131,  131,   56,  131,\r
- /*   890 */     1,   59,   60,  126,   62,   63,   64,  126,   56,   67,\r
- /*   900 */    68,   59,   60,  131,   62,   63,   64,  131,  131,   67,\r
- /*   910 */    68,   69,   23,  131,   82,   22,  131,   24,   25,   30,\r
- /*   920 */    82,   83,   84,  131,   82,   22,  131,   24,   25,  131,\r
- /*   930 */   131,   38,   39,   22,   23,   42,   25,  131,  131,  131,\r
- /*   940 */   131,   38,   39,  131,   55,   42,  131,  131,   37,   56,\r
- /*   950 */   131,  131,   59,   60,  131,   62,   63,   64,   98,   56,\r
- /*   960 */    67,   68,   59,   60,  131,   62,   63,   64,    8,  131,\r
- /*   970 */    67,   68,  112,  113,  114,   82,   22,  131,   24,   25,\r
- /*   980 */   131,  131,   22,  131,  131,   82,   22,  131,   24,   25,\r
- /*   990 */   131,  131,   38,   39,  131,  131,   42,  131,   38,  131,\r
- /*  1000 */   131,  131,   38,   39,  131,  131,   42,  131,  131,  131,\r
- /*  1010 */    56,  131,  131,   59,   60,  131,   62,   63,   64,   98,\r
- /*  1020 */    56,   67,   68,   59,   60,  131,   62,   63,   64,  131,\r
- /*  1030 */   131,   67,   68,  112,  113,  114,   82,   22,  131,   24,\r
- /*  1040 */    25,  131,   82,   83,   84,  131,   82,   22,  131,   24,\r
- /*  1050 */    25,  131,  131,   38,   39,  131,  131,   42,  131,  131,\r
- /*  1060 */   131,  131,  131,   38,   39,  131,  131,   42,  131,  131,\r
- /*  1070 */   131,   56,  131,  131,   59,   60,  131,   62,   63,   64,\r
- /*  1080 */   131,   56,   67,   68,   59,   60,  131,   62,   63,   64,\r
- /*  1090 */   131,  131,   67,   68,  131,  131,  131,   82,   22,  131,\r
- /*  1100 */    24,   25,  131,  131,  131,   98,  131,   82,   22,  131,\r
- /*  1110 */    24,   25,  131,  131,   38,   39,  131,  131,   42,  112,\r
- /*  1120 */   113,  114,  131,  131,   38,   39,  131,  131,   42,  131,\r
- /*  1130 */   131,  131,   56,  131,  131,   59,   60,  131,   62,   63,\r
- /*  1140 */    64,  131,   56,   67,   68,   59,   60,  131,   62,   63,\r
- /*  1150 */    64,  131,  131,   67,  131,  131,  131,   89,   82,   22,\r
- /*  1160 */   131,   24,   25,  131,  131,   97,  131,   99,   82,  131,\r
- /*  1170 */   102,  131,  131,  131,  131,   38,   39,  131,  110,   42,\r
- /*  1180 */   131,  131,  131,  115,  116,  131,  118,    3,    4,  131,\r
- /*  1190 */     6,    7,    8,   56,  131,  131,   59,   60,  131,   62,\r
- /*  1200 */    63,   64,  131,   19,   67,   89,   22,  131,  131,  131,\r
- /*  1210 */   131,  131,  131,   97,  131,   99,  100,  131,  102,   82,\r
- /*  1220 */   131,  131,   38,  131,  131,   89,  110,  131,  131,  131,\r
- /*  1230 */   131,  115,  116,   97,  118,   99,  100,  101,  102,  131,\r
- /*  1240 */   131,  131,  131,  127,  128,  131,  110,  131,   89,  131,\r
- /*  1250 */   131,  115,  116,  131,  118,   89,   97,  131,   99,  100,\r
- /*  1260 */   101,  102,  131,   97,  131,   99,  131,  131,  102,  110,\r
- /*  1270 */   131,  131,  131,  131,  115,  116,  110,  118,  131,  131,\r
- /*  1280 */   131,  115,  116,   89,  118,  131,  131,   89,  131,  131,\r
- /*  1290 */   131,   97,  131,   99,  100,   97,  102,   99,  100,  101,\r
- /*  1300 */   102,  131,  131,  131,  110,    4,    5,    6,  110,  115,\r
- /*  1310 */   116,  131,  118,  115,  116,   89,  118,  131,  131,  125,\r
- /*  1320 */    19,   20,   21,   97,  131,   99,  100,   89,  102,  131,\r
- /*  1330 */   131,  131,  131,  131,  131,   97,  110,   99,  100,  131,\r
- /*  1340 */   102,  115,  116,  131,  118,  131,  131,  131,  110,   89,\r
- /*  1350 */   131,  125,  131,  115,  116,  131,  118,   97,  131,   99,\r
- /*  1360 */   100,  131,  102,  125,  131,  131,  131,  131,  131,  131,\r
- /*  1370 */   110,  131,  131,   89,  131,  115,  116,  131,  118,  131,\r
- /*  1380 */   131,   97,  131,   99,  100,   89,  102,  131,  128,  131,\r
- /*  1390 */   131,  131,  131,   97,  110,   99,  100,  101,  102,  115,\r
- /*  1400 */   116,  131,  118,  131,  131,   89,  110,  131,  131,  125,\r
- /*  1410 */   131,  115,  116,   97,  118,   99,  100,   89,  102,  131,\r
- /*  1420 */   131,  105,  131,  131,  131,   97,  110,   99,  100,  101,\r
- /*  1430 */   102,  115,  116,  131,  118,  131,  131,  131,  110,   89,\r
- /*  1440 */   131,  131,  131,  115,  116,  131,  118,   97,  131,   99,\r
- /*  1450 */   100,  131,  102,  131,  131,  131,  131,  131,  131,  131,\r
- /*  1460 */   110,  131,  131,   89,  131,  115,  116,  131,  118,  131,\r
- /*  1470 */   131,   97,  131,   99,  100,   89,  102,  131,  131,  131,\r
- /*  1480 */   131,  131,  131,   97,  110,   99,  100,   89,  102,  115,\r
- /*  1490 */   116,  131,  118,  131,  131,   97,  110,   99,  100,   89,\r
- /*  1500 */   102,  115,  116,  131,  118,  131,  131,   97,  110,   99,\r
- /*  1510 */   100,   89,  102,  115,  116,  131,  118,  131,  131,   97,\r
- /*  1520 */   110,   99,  100,  131,  102,  115,  116,  131,  118,  131,\r
- /*  1530 */   131,  131,  110,   89,  131,  131,  131,  115,  116,  131,\r
- /*  1540 */   118,   97,   89,   99,  100,  131,  102,  131,  131,  131,\r
- /*  1550 */    97,  131,   99,  100,  110,  102,  131,  131,  131,  115,\r
- /*  1560 */   116,  131,  118,  110,   89,  131,  131,  131,  115,  116,\r
- /*  1570 */   131,  118,   97,   89,   99,  100,  131,  102,  131,  131,\r
- /*  1580 */   131,   97,  131,   99,  100,  110,  102,  131,  131,  131,\r
- /*  1590 */   115,  116,  131,  118,  110,  131,  131,   89,  131,  115,\r
- /*  1600 */   116,   89,  118,  131,  131,   97,  131,   99,  100,   97,\r
- /*  1610 */   102,   99,  100,  131,  102,  131,  131,  131,  110,  131,\r
- /*  1620 */   131,  131,  110,  115,  116,  131,  118,  115,  116,  131,\r
- /*  1630 */   118,   89,  131,  131,  131,  131,  131,  131,  131,   97,\r
- /*  1640 */    89,   99,  100,  131,  102,  131,  131,  131,   97,  131,\r
- /*  1650 */    99,  100,  110,  102,  131,  131,  131,  115,  116,  131,\r
- /*  1660 */   118,  110,   89,  131,  131,  131,  115,  116,  131,  118,\r
- /*  1670 */    97,   89,   99,  100,  131,  102,  131,  131,  131,   97,\r
- /*  1680 */   131,   99,  100,  110,  102,  131,  131,  131,  115,  116,\r
- /*  1690 */   131,  118,  110,  131,  131,   89,  131,  115,  116,   89,\r
- /*  1700 */   118,  131,  131,   97,  131,   99,  100,   97,  102,   99,\r
- /*  1710 */   100,  131,  102,  131,  131,  131,  110,  131,  131,  131,\r
- /*  1720 */   110,  115,  116,  131,  118,  115,  116,  131,  118,   89,\r
- /*  1730 */   131,  131,  131,  131,  131,  131,  131,   97,   89,   99,\r
- /*  1740 */   100,  131,  102,  131,  131,  131,   97,  131,   99,  100,\r
- /*  1750 */   110,  102,  131,  131,  131,  115,  116,  131,  118,  110,\r
- /*  1760 */    89,  131,  131,  131,  115,  116,  131,  118,   97,   89,\r
- /*  1770 */    99,  100,  131,  102,  131,  131,  131,   97,  131,   99,\r
- /*  1780 */   100,  110,  102,  131,  131,  131,  115,  116,  131,  118,\r
- /*  1790 */   110,  131,  131,   89,  131,  115,  116,   89,  118,  131,\r
- /*  1800 */   131,   97,  131,   99,  100,   97,  102,   99,  100,  131,\r
- /*  1810 */   102,  131,  131,  131,  110,  131,  131,  131,  110,  115,\r
- /*  1820 */   116,  131,  118,  115,  116,  131,  118,   89,  131,  131,\r
- /*  1830 */   131,  131,  131,  131,  131,   97,   89,   99,  100,  131,\r
- /*  1840 */   102,  131,  131,  131,   97,  131,   99,  100,  110,  102,\r
- /*  1850 */   131,  131,  131,  115,  116,  131,  118,  110,   89,    1,\r
- /*  1860 */   131,  131,  115,  116,  131,  118,   97,   89,   99,  131,\r
- /*  1870 */   131,  102,  131,  131,  131,   97,  131,   99,  131,  131,\r
- /*  1880 */   102,   23,  131,  131,  115,  116,   28,  118,   30,  131,\r
- /*  1890 */   131,   89,  131,  115,  116,   89,  118,  131,  131,   97,\r
- /*  1900 */   131,   99,  131,   97,  102,   99,  131,  131,  102,  131,\r
- /*  1910 */   131,  131,  131,  131,   56,  131,  131,  115,  116,  131,\r
- /*  1920 */   118,  115,  116,   65,  118,   89,  131,  131,  131,  131,\r
- /*  1930 */   131,  131,  131,   97,   89,   99,  131,  131,  102,  131,\r
- /*  1940 */   131,  131,   97,  131,   99,  131,  131,  102,  131,  131,\r
- /*  1950 */   131,  115,  116,  131,  118,  131,   89,  131,  131,  131,\r
- /*  1960 */   115,  116,  131,  118,   97,   89,   99,  131,  131,  102,\r
- /*  1970 */   131,  131,  131,   97,  131,   99,  131,  131,  102,  131,\r
- /*  1980 */   131,  131,  115,  116,  131,  118,  131,  131,  131,  131,\r
- /*  1990 */   131,  115,  116,  131,  118,\r
+ /*     0 */     1,   77,   30,   12,   13,   81,   15,   83,   84,   85,\r
+ /*    10 */    86,  104,   13,  106,  107,    4,    5,    6,   94,   20,\r
+ /*    20 */     9,   10,   11,   99,  100,   83,  102,   27,   86,   57,\r
+ /*    30 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
+ /*    40 */    41,   42,   43,   44,  102,   45,    3,    4,    5,    6,\r
+ /*    50 */     7,    8,    9,  106,  107,   12,   27,   58,   59,   60,\r
+ /*    60 */    61,   62,   63,   64,   65,   66,   67,   68,   69,    1,\r
+ /*    70 */    77,   28,    1,   20,   81,   46,   83,   84,   85,   86,\r
+ /*    80 */    82,   13,   53,   16,   13,   87,   16,   94,   20,   18,\r
+ /*    90 */    13,   20,   99,  100,   96,  102,   26,   20,   15,   31,\r
+ /*   100 */    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,\r
+ /*   110 */    42,   43,   44,   76,   77,   78,   46,   46,   74,   75,\r
+ /*   120 */    76,   77,   78,   53,   53,   12,   58,   59,   60,   61,\r
+ /*   130 */    62,   63,   64,   65,   66,   67,   68,   69,    1,   82,\r
+ /*   140 */    15,   77,   17,   47,   19,   81,   21,   83,   84,   85,\r
+ /*   150 */    86,   12,   92,   96,   15,   16,   51,   20,   94,   46,\r
+ /*   160 */    13,   56,   25,   99,  100,  105,  102,   20,   31,   32,\r
+ /*   170 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
+ /*   180 */    43,   44,    1,   13,   12,   77,   14,   15,   15,   81,\r
+ /*   190 */    20,   83,   45,   54,   86,   58,   59,   60,   61,   62,\r
+ /*   200 */    63,   64,   65,   66,   67,   68,   69,   99,  100,   78,\r
+ /*   210 */   102,   80,   31,   32,   33,   34,   35,   36,   37,   38,\r
+ /*   220 */    39,   40,   41,   42,   43,   44,   12,   55,   12,   15,\r
+ /*   230 */    16,   15,   23,    8,   47,   14,   15,   12,   57,   58,\r
+ /*   240 */    59,   60,   61,   62,   63,   64,   65,   66,   67,   68,\r
+ /*   250 */    69,    1,   77,   28,    1,   93,   81,   46,   83,   84,\r
+ /*   260 */    85,   86,   51,   13,   53,   13,   13,  105,   57,   94,\r
+ /*   270 */    54,   18,   20,   20,   99,  100,   55,  102,   14,   15,\r
+ /*   280 */    71,   31,   32,   33,   34,   35,   36,   37,   38,   39,\r
+ /*   290 */    40,   41,   42,   43,   44,   70,   71,   72,   46,   13,\r
+ /*   300 */    16,   12,   18,   18,   15,   53,   20,   15,   58,   59,\r
+ /*   310 */    60,   61,   62,   63,   64,   65,   66,   67,   68,   69,\r
+ /*   320 */     1,   77,   48,   83,   13,   81,   86,   83,   84,   85,\r
+ /*   330 */    86,   20,   12,   13,   23,   15,   51,   53,   94,   20,\r
+ /*   340 */    46,   56,  102,   99,  100,   13,  102,   27,  108,    1,\r
+ /*   350 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
+ /*   360 */    41,   42,   43,   44,    1,   13,   12,   77,   20,   15,\r
+ /*   370 */    15,   81,   20,   83,   16,   23,   86,   58,   59,   60,\r
+ /*   380 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   99,\r
+ /*   390 */   100,  103,  102,  105,   31,   32,   33,   34,   35,   36,\r
+ /*   400 */    37,   38,   39,   40,   41,   42,   43,   44,    1,   51,\r
+ /*   410 */    47,   12,   12,   13,   15,   15,   12,    2,   14,   15,\r
+ /*   420 */    13,   58,   59,   60,   61,   62,   63,   64,   65,   66,\r
+ /*   430 */    67,   68,   69,   29,   15,   20,  106,  107,   31,   32,\r
+ /*   440 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
+ /*   450 */    43,   44,    1,   54,   12,   77,   13,   15,   88,   81,\r
+ /*   460 */    88,   83,   77,   20,   86,   58,   59,   60,   61,   62,\r
+ /*   470 */    63,   64,   65,   66,   67,   68,   69,   99,  100,  103,\r
+ /*   480 */   102,    2,   31,   32,   33,   34,   35,   36,   37,   38,\r
+ /*   490 */    39,   40,   41,   42,   43,   44,    1,   13,  113,  114,\r
+ /*   500 */   106,  107,   89,   90,   20,   45,   15,   82,   13,   58,\r
+ /*   510 */    59,   60,   61,   62,   63,   64,   65,   66,   67,   68,\r
+ /*   520 */    69,   96,   71,   14,   51,   29,   31,   32,   33,   34,\r
+ /*   530 */    35,   36,   37,   38,   39,   40,   41,   42,   43,   44,\r
+ /*   540 */     1,   13,   22,   77,   13,   54,   13,   81,   20,   83,\r
+ /*   550 */    30,   20,   86,   58,   59,   60,   61,   62,   63,   64,\r
+ /*   560 */    65,   66,   67,   68,   69,   99,  100,   55,  102,   26,\r
+ /*   570 */    31,   32,   33,   34,   35,   36,   37,   38,   39,   40,\r
+ /*   580 */    41,   42,   43,   44,    1,    2,   47,   77,   13,   15,\r
+ /*   590 */    14,   81,   14,   83,   26,   20,   86,   58,   59,   60,\r
+ /*   600 */    61,   62,   63,   64,   65,   66,   67,   68,   69,   99,\r
+ /*   610 */   100,   88,  102,   13,   31,   32,   33,   34,   35,   36,\r
+ /*   620 */    37,   38,   39,   40,   41,   42,   43,   44,    1,   13,\r
+ /*   630 */    46,   13,   55,   23,   15,   47,   20,   53,   20,   15,\r
+ /*   640 */    13,   58,   59,   60,   61,   62,   63,   64,   65,   66,\r
+ /*   650 */    67,   68,   69,   29,   14,   13,   15,   20,   31,   32,\r
+ /*   660 */    33,   34,   35,   36,   37,   38,   39,   40,   41,   42,\r
+ /*   670 */    43,   44,    1,   13,   57,   77,   13,   16,   20,   81,\r
+ /*   680 */    20,   83,   18,   20,   86,   58,   59,   60,   61,   62,\r
+ /*   690 */    63,   64,   65,   66,   67,   68,   69,   99,  100,   24,\r
+ /*   700 */   102,   30,   31,   32,   33,   34,   35,   36,   37,   38,\r
+ /*   710 */    39,   40,   41,   42,   43,   44,   12,   53,   13,   15,\r
+ /*   720 */    16,   13,   15,   77,    8,   20,   14,   23,   12,   58,\r
+ /*   730 */    59,   60,   61,   62,   63,   64,   65,   66,   67,   68,\r
+ /*   740 */    69,    1,   77,   96,   28,   10,   81,    2,   83,   84,\r
+ /*   750 */    45,   86,   82,   45,   89,   12,   13,   87,   15,   94,\r
+ /*   760 */   114,   16,   22,  104,   99,  100,   96,  102,   79,  103,\r
+ /*   770 */    27,   31,   32,   33,   34,   35,   36,   37,   38,   39,\r
+ /*   780 */    40,   41,   42,   43,   44,    1,   70,   71,   72,   13,\r
+ /*   790 */   103,   95,   46,  105,   20,   18,   20,   13,   58,   59,\r
+ /*   800 */    60,   61,   62,   63,   64,   65,   66,   67,   68,   69,\r
+ /*   810 */    14,   91,  103,  107,   20,   31,   32,   33,   34,   35,\r
+ /*   820 */    36,   37,   38,   39,   40,   41,   42,   43,   44,    1,\r
+ /*   830 */    13,   13,   13,   91,  103,   88,  110,   20,   20,   20,\r
+ /*   840 */    82,   13,   58,   59,   60,   61,   62,   63,   64,   65,\r
+ /*   850 */    66,   67,   68,   69,   96,    2,   89,  115,  115,   31,\r
+ /*   860 */    32,   33,   34,   35,   36,   37,   38,   39,   40,   41,\r
+ /*   870 */    42,   43,   44,    1,  101,  115,   77,  115,  115,  115,\r
+ /*   880 */    81,  108,   83,  115,  115,   86,   58,   59,   60,   61,\r
+ /*   890 */    62,   63,   64,   65,   66,   67,   68,   69,   99,  100,\r
+ /*   900 */   115,  102,  115,   31,   32,   33,   34,   35,   36,   37,\r
+ /*   910 */    38,   39,   40,   41,   42,   43,   44,   87,  115,  115,\r
+ /*   920 */   115,  115,  115,  115,  115,  115,  115,   97,   98,  115,\r
+ /*   930 */    58,   59,   60,   61,   62,   63,   64,   65,   66,   67,\r
+ /*   940 */    68,   69,   82,   12,  115,   14,   15,   87,   17,  115,\r
+ /*   950 */    19,   12,   21,   14,   15,  115,   96,   97,   98,   28,\r
+ /*   960 */    29,   92,   92,   32,  115,   82,  115,   28,   29,   92,\r
+ /*   970 */    87,   32,  115,  115,  105,  105,  115,   46,  115,   96,\r
+ /*   980 */    49,   50,  105,   52,  115,   46,   55,   56,   49,   50,\r
+ /*   990 */    12,   52,   14,   15,   55,   56,   57,   82,   82,  115,\r
+ /*  1000 */   115,   70,   12,   87,   14,   15,   28,   29,  115,   70,\r
+ /*  1010 */    32,   96,   96,   97,   98,   82,  115,   82,   28,   29,\r
+ /*  1020 */   115,  115,   32,  115,   46,  110,  115,   49,   50,   96,\r
+ /*  1030 */    52,   96,  115,   55,   56,   12,   46,   14,   15,   49,\r
+ /*  1040 */    50,   92,   52,  110,   92,   55,   56,   12,   70,   14,\r
+ /*  1050 */    15,   28,   29,   92,  105,   32,  115,  105,   92,  115,\r
+ /*  1060 */    70,  115,  115,   28,   29,  115,  105,   32,  115,   46,\r
+ /*  1070 */   115,  105,   49,   50,   82,   52,   92,  115,   55,   56,\r
+ /*  1080 */    12,   46,   14,   15,   49,   50,  115,   52,   96,  105,\r
+ /*  1090 */    55,   56,   12,   70,   14,   15,   28,   29,  115,  115,\r
+ /*  1100 */    32,   82,  110,  115,  115,   70,  115,   82,   28,   29,\r
+ /*  1110 */   115,  115,   32,  115,   46,   96,  115,   49,   50,  115,\r
+ /*  1120 */    52,   96,  115,   55,   56,   12,   46,   14,   15,   49,\r
+ /*  1130 */    50,  115,   52,  115,  115,   55,   56,   12,   70,   14,\r
+ /*  1140 */    15,   28,   29,  115,  115,   32,  115,  115,  115,  115,\r
+ /*  1150 */    70,  115,  115,   28,   29,  115,  115,   32,  115,   46,\r
+ /*  1160 */   115,  115,   49,   50,  115,   52,  115,  115,   55,   56,\r
+ /*  1170 */    12,   46,   14,   15,   49,   50,  115,   52,  115,  115,\r
+ /*  1180 */    55,  115,  115,   70,  115,  115,   28,   29,  115,  115,\r
+ /*  1190 */    32,  115,   77,  115,  115,   70,   81,  115,   83,   84,\r
+ /*  1200 */   115,   86,  115,  115,   46,  115,  115,   49,   50,   94,\r
+ /*  1210 */    52,  115,  115,   55,   99,  100,   77,  102,  115,  115,\r
+ /*  1220 */    81,  115,   83,   84,  115,   86,  111,  112,   70,  115,\r
+ /*  1230 */   115,  115,  115,   94,  115,  115,  115,  115,   99,  100,\r
+ /*  1240 */    77,  102,  115,  115,   81,  115,   83,   84,  109,   86,\r
+ /*  1250 */   115,  115,   77,  115,  115,  115,   81,   94,   83,   84,\r
+ /*  1260 */   115,   86,   99,  100,   77,  102,  115,  115,   81,   94,\r
+ /*  1270 */    83,   84,  109,   86,   99,  100,  115,  102,  115,  115,\r
+ /*  1280 */   115,   94,  115,  115,  109,  115,   99,  100,   77,  102,\r
+ /*  1290 */   115,  115,   81,  115,   83,   84,  115,   86,  115,  112,\r
+ /*  1300 */    77,  115,  115,  115,   81,   94,   83,   84,  115,   86,\r
+ /*  1310 */    99,  100,  115,  102,  115,  115,  115,   94,  115,  115,\r
+ /*  1320 */   109,  115,   99,  100,   77,  102,  115,  115,   81,  115,\r
+ /*  1330 */    83,   84,  115,   86,  115,  115,   77,  115,  115,  115,\r
+ /*  1340 */    81,   94,   83,   84,  115,   86,   99,  100,   77,  102,\r
+ /*  1350 */   115,  115,   81,   94,   83,   84,  115,   86,   99,  100,\r
+ /*  1360 */   115,  102,  115,  115,  115,   94,  115,  115,  115,  115,\r
+ /*  1370 */    99,  100,   77,  102,  115,  115,   81,  115,   83,   84,\r
+ /*  1380 */   115,   86,  115,  115,   77,  115,  115,  115,   81,   94,\r
+ /*  1390 */    83,   84,  115,   86,   99,  100,  115,  102,  115,  115,\r
+ /*  1400 */   115,   94,  115,  115,  115,  115,   99,  100,   77,  102,\r
+ /*  1410 */   115,  115,   81,  115,   83,   84,  115,   86,  115,  115,\r
+ /*  1420 */    77,  115,  115,  115,   81,   94,   83,   84,  115,   86,\r
+ /*  1430 */    99,  100,   77,  102,  115,  115,   81,   94,   83,   84,\r
+ /*  1440 */   115,   86,   99,  100,  115,  102,  115,  115,  115,   94,\r
+ /*  1450 */   115,  115,  115,  115,   99,  100,   77,  102,  115,  115,\r
+ /*  1460 */    81,  115,   83,   84,  115,   86,  115,  115,   77,  115,\r
+ /*  1470 */   115,  115,   81,   94,   83,   84,  115,   86,   99,  100,\r
+ /*  1480 */   115,  102,  115,  115,  115,   94,  115,  115,  115,  115,\r
+ /*  1490 */    99,  100,   77,  102,  115,  115,   81,  115,   83,   84,\r
+ /*  1500 */   115,   86,  115,  115,   77,  115,  115,  115,   81,   94,\r
+ /*  1510 */    83,   84,  115,   86,   99,  100,   77,  102,  115,  115,\r
+ /*  1520 */    81,   94,   83,   84,  115,   86,   99,  100,  115,  102,\r
+ /*  1530 */   115,  115,  115,   94,  115,  115,  115,  115,   99,  100,\r
+ /*  1540 */    77,  102,  115,  115,   81,  115,   83,   84,  115,   86,\r
+ /*  1550 */   115,  115,   77,  115,  115,  115,   81,   94,   83,   84,\r
+ /*  1560 */   115,   86,   99,  100,  115,  102,  115,  115,  115,   94,\r
+ /*  1570 */   115,  115,  115,  115,   99,  100,   77,  102,  115,  115,\r
+ /*  1580 */    81,  115,   83,   84,  115,   86,  115,  115,   77,  115,\r
+ /*  1590 */   115,  115,   81,   94,   83,   84,  115,   86,   99,  100,\r
+ /*  1600 */    77,  102,  115,  115,   81,   94,   83,   84,  115,   86,\r
+ /*  1610 */    99,  100,  115,  102,  115,  115,  115,   94,  115,  115,\r
+ /*  1620 */   115,  115,   99,  100,   77,  102,  115,  115,   81,  115,\r
+ /*  1630 */    83,   84,  115,   86,  115,  115,   77,  115,  115,  115,\r
+ /*  1640 */    81,   94,   83,   84,  115,   86,   99,  100,  115,  102,\r
+ /*  1650 */   115,  115,  115,   94,  115,  115,  115,  115,   99,  100,\r
+ /*  1660 */    77,  102,  115,  115,   81,  115,   83,   84,  115,   86,\r
+ /*  1670 */   115,  115,   77,  115,  115,  115,   81,   94,   83,   84,\r
+ /*  1680 */   115,   86,   99,  100,   77,  102,  115,  115,   81,   94,\r
+ /*  1690 */    83,   84,  115,   86,   99,  100,  115,  102,  115,  115,\r
+ /*  1700 */   115,   94,  115,  115,  115,  115,   99,  100,   77,  102,\r
+ /*  1710 */   115,  115,   81,  115,   83,   84,  115,   86,  115,  115,\r
+ /*  1720 */    77,  115,  115,  115,   81,   94,   83,   84,  115,   86,\r
+ /*  1730 */    99,  100,  115,  102,  115,  115,  115,   94,  115,  115,\r
+ /*  1740 */   115,   82,   99,  100,   77,  102,   87,  115,   81,  115,\r
+ /*  1750 */    83,  115,  115,   86,   77,   96,   97,   98,   81,  115,\r
+ /*  1760 */    83,   94,  115,   86,  115,  115,   99,  100,  115,  102,\r
+ /*  1770 */   115,   94,  115,  115,  115,  115,   99,  100,  115,  102,\r
+ /*  1780 */    82,  115,  115,  115,   77,   87,  115,  115,   81,  115,\r
+ /*  1790 */    83,  115,  115,   86,   96,   97,   98,  115,  115,  115,\r
+ /*  1800 */   115,   94,  115,  115,  115,  115,   99,  100,  115,  102,\r
 );\r
-    const YY_SHIFT_USE_DFLT = -51;\r
-    const YY_SHIFT_MAX = 246;\r
+    const YY_SHIFT_USE_DFLT = -29;\r
+    const YY_SHIFT_MAX = 223;\r
     static public $yy_shift_ofst = array(\r
- /*     0 */  1184, 1015,  832,  832,  964, 1025, 1076,  893,  893, 1015,\r
- /*    10 */   964,  893,  893,  842,  893,  893,  893,  893,  893,  893,\r
- /*    20 */   893,  893,  893,  893,  893,  893,  893,  893,  893,  893,\r
- /*    30 */   893,  893,  893,  893,  893,  893,  893,  893,  893,  903,\r
- /*    40 */   954,   73,   73,   73, 1137,   73,   73,   73, 1086,   29,\r
- /*    50 */   -23,  100,  364,  364,   96, 1184,  838, 1858,  800,  223,\r
- /*    60 */   178,  263,  628,  612,  612,  612,  312,  268,  226,  184,\r
- /*    70 */   142,  406,  624,  574,  448,  490,  532,  666,  719,  761,\r
- /*    80 */   761,  761,  761,  761,  761,  761,  761,  761,  761,  761,\r
- /*    90 */   761,  761,  761,  761,  761, 1301,  960,  134,   -1,   -1,\r
- /*   100 */    63,   -1,  136,   10,  217,   91,  144,  276,  304,  304,\r
- /*   110 */   304,  304,  615,  304,  570,  276,  276,  304,  304,  276,\r
- /*   120 */   144,  262,  304,  133,  722,  724,  133,  722,  729,  722,\r
- /*   130 */   889,  911,  102,  -15,  349,   44,   13,  186,  366,   65,\r
- /*   140 */   566,  348,  526,  359,  524,  564,  359,  359,  523,  567,\r
- /*   150 */   373,  444,  443,  350,   12,  289,  485,  482,  527,  359,\r
- /*   160 */   484,  359,  480,  442,   62,  133,  133,   62,  729,   62,\r
- /*   170 */   721,  751,   62,  737,  133,  751,   62,   62,  778,   62,\r
- /*   180 */   133,   62,  -51,  -51,  -51,  -51,  -51,  -51,  -51,  -51,\r
- /*   190 */   143,  -24,   61,  405,  229,    3,  533,  569,  390,  132,\r
- /*   200 */   356,  -50,  311,  -50,  -50,  -50,  295,  401,  717,  699,\r
- /*   210 */   452,  622,  631,  625,  702,  693,  674,  707,  662,  629,\r
- /*   220 */   663,  635,  634,  521,  610,  640,  608,  661,  657,  665,\r
- /*   230 */   670,  681,  658,  659,  605,  627,  710,  726,  703,  664,\r
- /*   240 */   720,  731,  302,   -7,   31,  317,  575,\r
+ /*     0 */    43, 1068,  931,  931, 1113,  978,  990, 1068,  990,  978,\r
+ /*    10 */   978, 1080,  978,  939,  978,  978,  978,  978,  978,  978,\r
+ /*    20 */   978,  978,  978,  978,  978,  978,  978,  978,  978,  978,\r
+ /*    30 */   978,  978,  978,  978,  978,  978,  978,  978,  978, 1023,\r
+ /*    40 */  1023, 1035, 1125, 1158, 1125, 1125, 1125, 1125, 1125,   -1,\r
+ /*    50 */   137,   68,  319,  319,  172,  407,  250,  181,  363,  451,\r
+ /*    60 */   828,  784,  671,  740,  627,  583,  495,  539,  872,  872,\r
+ /*    70 */   872,  872,  872,  872,  872,  872,  872,  872,  872,  872,\r
+ /*    80 */   872,  872,  872,  872,   43,  716,   71,  253,  285,  221,\r
+ /*    90 */   415,  415,  415,  348,   11,  225,  704,  139,  216,  352,\r
+ /*   100 */   705,  311,  284,  354,  664,  442,  289,  289,  289,  289,\r
+ /*   110 */   354,  289,  264,  289,  289,  289,  777,  796,  658,  658,\r
+ /*   120 */   774,  658,  777,  743,  320,  125,  399,  400,   -9,  214,\r
+ /*   130 */   575,  484,  531,  113,  443,  105,   77,  170,  819,  105,\r
+ /*   140 */   286,  528,  818,  618,  105,  105,  616,  105,  660,  817,\r
+ /*   150 */   776,  663,  746,  735,  796,  853,  777,  777,  777,  794,\r
+ /*   160 */   794,  777,  -29,  -29,  -29,  -29,  -29,  -29,  -29,  211,\r
+ /*   170 */    70,  252,  404,   29,  147,  584,    0,  584,  520,  358,\r
+ /*   180 */   -28,  209,  708,  491,  624,  745,  543,  642,  640,  675,\r
+ /*   190 */   588,  574,  568,  577,  712,  512,   83,  509,  617,  610,\r
+ /*   200 */   619,  707,  355,  292,  173,   53,   96,  294,  496,  473,\r
+ /*   210 */   419,  479,  332,   67,  274,  641,  533,  460,  576,  600,\r
+ /*   220 */   578,  661,  637,  187,\r
 );\r
-    const YY_REDUCE_USE_DFLT = -86;\r
-    const YY_REDUCE_MAX = 189;\r
+    const YY_REDUCE_USE_DFLT = -94;\r
+    const YY_REDUCE_MAX = 168;\r
     static public $yy_reduce_ofst = array(\r
- /*     0 */   -85, 1116, 1136, 1159, 1328, 1296, 1316, 1284, 1194, 1260,\r
- /*    10 */  1198, 1226, 1238, 1484, 1475, 1508, 1512, 1542, 1453, 1444,\r
- /*    20 */  1386, 1374, 1398, 1410, 1422, 1551, 1573, 1704, 1738, 1708,\r
- /*    30 */  1350, 1747, 1680, 1671, 1606, 1582, 1610, 1640, 1649, 1068,\r
- /*    40 */  1166, 1769, 1876, 1867, 1845, 1806, 1836, 1778, 1802, 1007,\r
- /*    50 */   921,  -52,  860,  -52,  277,    4,  153,  321,  183,  225,\r
- /*    60 */    20,  121,  581,  746,  767,  771,  284,  284,  284,  284,\r
- /*    70 */   284,  284,  284,  284,  284,  284,  284,  284,  284,  284,\r
- /*    80 */   284,  284,  284,  284,  284,  284,  284,  284,  284,  284,\r
- /*    90 */   284,  284,  284,  284,  284,  108,  422,  -77,  377,  308,\r
- /*   100 */   479,  372,  469,  636,  636,  -77,  354,  543,  708,  354,\r
- /*   110 */   667,  741,  514,  614,  469,  539,  568,   89,  260,  195,\r
- /*   120 */   131,  354,  396,  212,  447,  334,  210,  418,  264,   16,\r
- /*   130 */   145,  653,  653,  644,  145,  653,  653,  653,  145,  653,\r
- /*   140 */   639,  639,  639,  638,  639,  639,  638,  638,  639,  639,\r
- /*   150 */   145,  639,  639,  639,  637,  145,  639,  639,  639,  638,\r
- /*   160 */   639,  638,  639,  639,  145,  207,  207,  145,  678,  145,\r
- /*   170 */   660,  669,  145,  683,  207,  675,  145,  145,  633,  145,\r
- /*   180 */   207,  145,  497,  429,  489,  387,  369,  298,  319,  145,\r
+ /*     0 */    44, 1115,   -7,  244,  175, 1163,   64, 1187,  -76, 1175,\r
+ /*    10 */  1139,  665, 1211, 1391, 1379, 1415, 1427, 1439, 1355, 1343,\r
+ /*    20 */  1259, 1247, 1271, 1295, 1331, 1307, 1463, 1475, 1583, 1607,\r
+ /*    30 */  1631, 1643, 1595, 1559, 1499, 1223, 1511, 1523, 1547, 1677,\r
+ /*    40 */  1707, 1667,  799,  510,  290,  598,  378,  108,  466, 1698,\r
+ /*    50 */   916,  860,  860, 1659,  240,  830,  830,  830,  830,  830,\r
+ /*    60 */   830,  830,  830,  830,  830,  830,  830,  830,  830,  830,\r
+ /*    70 */   830,  830,  830,  830,  830,  830,  830,  830,  830,  830,\r
+ /*    80 */   830,  830,  830,  830,   37,  385,  883,   -2,  -93,  -58,\r
+ /*    90 */   915,  933,  992,  670,  131,  646,  162,  288,  288,  758,\r
+ /*   100 */   935,  758,  330,  961,  330,  869,   60,  870,  952,  949,\r
+ /*   110 */   869,  877,  773,  869,  984,  966,  394,  413, 1025, 1019,\r
+ /*   120 */   425,   57,  -53,  688,  688,  696,  688,  688,  688,  688,\r
+ /*   130 */   647,  647,  647,  709,  647,  659,  647,  647,  647,  659,\r
+ /*   140 */   647,  647,  647,  647,  659,  659,  647,  659,  647,  647,\r
+ /*   150 */   647,  647,  687,  689,  767,  726,  706,  706,  706,  720,\r
+ /*   160 */   742,  706,  747,  731,  523,  666,  376,  372,  370,\r
 );\r
     static public $yyExpectedTokens = array(\r
-        /* 0 */ array(3, 4, 6, 7, 8, 19, 22, 38, ),\r
-        /* 1 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 2 */ array(22, 24, 25, 27, 29, 31, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 3 */ array(22, 24, 25, 27, 29, 31, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 4 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 5 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 6 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 7 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 8 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 9 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 10 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 11 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 12 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 13 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 69, 82, ),\r
-        /* 14 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 15 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 16 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 17 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 18 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 19 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 20 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 21 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 22 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 23 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 24 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 25 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 26 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 27 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 28 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 29 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 30 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 31 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 32 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 33 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 34 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 35 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 36 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 37 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 38 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 39 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 40 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 68, 82, ),\r
-        /* 41 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 42 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 43 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 44 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 45 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 46 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 47 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 48 */ array(22, 24, 25, 38, 39, 42, 56, 59, 60, 62, 63, 64, 67, 82, ),\r
-        /* 49 */ array(30, 35, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 50 */ array(23, 30, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 51 */ array(23, 30, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 52 */ array(30, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 53 */ array(30, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 54 */ array(22, 24, 25, 67, ),\r
-        /* 55 */ array(3, 4, 6, 7, 8, 19, 22, 38, ),\r
-        /* 56 */ array(8, 22, 38, 82, 83, 84, ),\r
-        /* 57 */ array(1, 23, 28, 30, 56, 65, ),\r
-        /* 58 */ array(1, 23, 30, 55, ),\r
-        /* 59 */ array(1, 23, 28, 30, ),\r
-        /* 60 */ array(24, 25, 67, ),\r
-        /* 61 */ array(28, 61, 68, ),\r
-        /* 62 */ array(1, 30, ),\r
-        /* 63 */ array(2, 30, ),\r
-        /* 64 */ array(2, 30, ),\r
-        /* 65 */ array(2, 30, ),\r
-        /* 66 */ array(40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 67 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 83, ),\r
-        /* 68 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 69 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 70 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 57, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 71 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 72 */ array(32, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 73 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 74 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 75 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 76 */ array(23, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 77 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 57, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 78 */ array(2, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 79 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 80 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 81 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 82 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 83 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 84 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 85 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 86 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 87 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 88 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 89 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 90 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 91 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 92 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 93 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 94 */ array(41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, ),\r
-        /* 95 */ array(4, 5, 6, 19, 20, 21, ),\r
-        /* 96 */ array(8, 22, 38, 82, 83, 84, ),\r
-        /* 97 */ array(22, 25, 26, 66, ),\r
-        /* 98 */ array(9, 10, 12, 14, ),\r
-        /* 99 */ array(9, 10, 12, 14, ),\r
-        /* 100 */ array(22, 25, 26, 33, ),\r
-        /* 101 */ array(9, 10, 12, 14, ),\r
-        /* 102 */ array(26, 28, 65, ),\r
-        /* 103 */ array(23, 30, 33, ),\r
-        /* 104 */ array(23, 30, 33, ),\r
-        /* 105 */ array(22, 25, 66, ),\r
-        /* 106 */ array(22, 25, ),\r
-        /* 107 */ array(16, 17, ),\r
-        /* 108 */ array(22, 25, ),\r
-        /* 109 */ array(22, 25, ),\r
-        /* 110 */ array(22, 25, ),\r
-        /* 111 */ array(22, 25, ),\r
-        /* 112 */ array(24, 25, ),\r
-        /* 113 */ array(22, 25, ),\r
-        /* 114 */ array(28, 65, ),\r
-        /* 115 */ array(16, 17, ),\r
-        /* 116 */ array(16, 17, ),\r
-        /* 117 */ array(22, 25, ),\r
-        /* 118 */ array(22, 25, ),\r
-        /* 119 */ array(16, 17, ),\r
-        /* 120 */ array(22, 25, ),\r
-        /* 121 */ array(22, 25, ),\r
-        /* 122 */ array(22, 25, ),\r
-        /* 123 */ array(28, ),\r
-        /* 124 */ array(30, ),\r
-        /* 125 */ array(30, ),\r
-        /* 126 */ array(28, ),\r
-        /* 127 */ array(30, ),\r
-        /* 128 */ array(24, ),\r
-        /* 129 */ array(30, ),\r
-        /* 130 */ array(1, 23, 30, 55, ),\r
-        /* 131 */ array(22, 23, 25, 37, ),\r
-        /* 132 */ array(22, 23, 25, 37, ),\r
-        /* 133 */ array(25, 27, 29, 31, ),\r
-        /* 134 */ array(1, 23, 55, ),\r
-        /* 135 */ array(22, 23, 25, ),\r
-        /* 136 */ array(22, 25, 26, ),\r
-        /* 137 */ array(22, 23, 25, ),\r
-        /* 138 */ array(1, 37, 55, ),\r
-        /* 139 */ array(22, 25, 66, ),\r
-        /* 140 */ array(23, 30, ),\r
-        /* 141 */ array(23, 30, ),\r
-        /* 142 */ array(23, 30, ),\r
-        /* 143 */ array(61, 68, ),\r
-        /* 144 */ array(23, 30, ),\r
-        /* 145 */ array(23, 30, ),\r
-        /* 146 */ array(61, 68, ),\r
-        /* 147 */ array(61, 68, ),\r
-        /* 148 */ array(23, 30, ),\r
-        /* 149 */ array(23, 30, ),\r
-        /* 150 */ array(1, 55, ),\r
-        /* 151 */ array(23, 30, ),\r
-        /* 152 */ array(23, 30, ),\r
-        /* 153 */ array(23, 30, ),\r
-        /* 154 */ array(22, 56, ),\r
-        /* 155 */ array(1, 36, ),\r
-        /* 156 */ array(23, 30, ),\r
-        /* 157 */ array(23, 30, ),\r
-        /* 158 */ array(23, 30, ),\r
-        /* 159 */ array(61, 68, ),\r
-        /* 160 */ array(23, 30, ),\r
-        /* 161 */ array(61, 68, ),\r
-        /* 162 */ array(23, 30, ),\r
-        /* 163 */ array(23, 30, ),\r
-        /* 164 */ array(1, ),\r
-        /* 165 */ array(28, ),\r
-        /* 166 */ array(28, ),\r
-        /* 167 */ array(1, ),\r
-        /* 168 */ array(24, ),\r
-        /* 169 */ array(1, ),\r
-        /* 170 */ array(56, ),\r
-        /* 171 */ array(30, ),\r
-        /* 172 */ array(1, ),\r
-        /* 173 */ array(20, ),\r
-        /* 174 */ array(28, ),\r
-        /* 175 */ array(30, ),\r
-        /* 176 */ array(1, ),\r
-        /* 177 */ array(1, ),\r
-        /* 178 */ array(2, ),\r
-        /* 179 */ array(1, ),\r
-        /* 180 */ array(28, ),\r
-        /* 181 */ array(1, ),\r
-        /* 182 */ array(),\r
-        /* 183 */ array(),\r
-        /* 184 */ array(),\r
-        /* 185 */ array(),\r
-        /* 186 */ array(),\r
-        /* 187 */ array(),\r
-        /* 188 */ array(),\r
-        /* 189 */ array(),\r
-        /* 190 */ array(22, 24, 25, 39, 62, 63, ),\r
-        /* 191 */ array(56, 61, 65, 69, ),\r
-        /* 192 */ array(23, 30, 56, 65, ),\r
-        /* 193 */ array(26, 56, 65, ),\r
-        /* 194 */ array(37, 56, 65, ),\r
-        /* 195 */ array(33, 83, ),\r
-        /* 196 */ array(25, 39, ),\r
-        /* 197 */ array(26, 61, ),\r
-        /* 198 */ array(32, 40, ),\r
-        /* 199 */ array(2, 26, ),\r
-        /* 200 */ array(40, 69, ),\r
-        /* 201 */ array(56, 65, ),\r
-        /* 202 */ array(25, 66, ),\r
-        /* 203 */ array(56, 65, ),\r
-        /* 204 */ array(56, 65, ),\r
-        /* 205 */ array(56, 65, ),\r
-        /* 206 */ array(13, ),\r
-        /* 207 */ array(25, ),\r
-        /* 208 */ array(33, ),\r
-        /* 209 */ array(25, ),\r
-        /* 210 */ array(57, ),\r
-        /* 211 */ array(69, ),\r
-        /* 212 */ array(57, ),\r
-        /* 213 */ array(67, ),\r
-        /* 214 */ array(25, ),\r
-        /* 215 */ array(39, ),\r
-        /* 216 */ array(57, ),\r
-        /* 217 */ array(23, ),\r
-        /* 218 */ array(67, ),\r
-        /* 219 */ array(61, ),\r
-        /* 220 */ array(24, ),\r
-        /* 221 */ array(25, ),\r
-        /* 222 */ array(25, ),\r
-        /* 223 */ array(30, ),\r
-        /* 224 */ array(24, ),\r
-        /* 225 */ array(23, ),\r
-        /* 226 */ array(56, ),\r
-        /* 227 */ array(25, ),\r
-        /* 228 */ array(26, ),\r
-        /* 229 */ array(15, ),\r
-        /* 230 */ array(11, ),\r
-        /* 231 */ array(25, ),\r
-        /* 232 */ array(24, ),\r
-        /* 233 */ array(26, ),\r
-        /* 234 */ array(36, ),\r
-        /* 235 */ array(30, ),\r
-        /* 236 */ array(18, ),\r
-        /* 237 */ array(23, ),\r
-        /* 238 */ array(23, ),\r
-        /* 239 */ array(25, ),\r
-        /* 240 */ array(5, ),\r
-        /* 241 */ array(2, ),\r
-        /* 242 */ array(25, ),\r
-        /* 243 */ array(24, ),\r
-        /* 244 */ array(34, ),\r
-        /* 245 */ array(58, ),\r
-        /* 246 */ array(24, ),\r
+        /* 0 */ array(3, 4, 5, 6, 7, 8, 9, 12, 28, ),\r
+        /* 1 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 2 */ array(12, 14, 15, 17, 19, 21, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 3 */ array(12, 14, 15, 17, 19, 21, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 4 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 5 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 6 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 7 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 8 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 9 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 10 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 11 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 12 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 13 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 57, 70, ),\r
+        /* 14 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 15 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 16 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 17 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 18 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 19 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 20 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 21 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 22 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 23 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 24 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 25 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 26 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 27 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 28 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 29 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 30 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 31 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 32 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 33 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 34 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 35 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 36 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 37 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 38 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 39 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 40 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 41 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 56, 70, ),\r
+        /* 42 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 43 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 44 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 45 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 46 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 47 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 48 */ array(12, 14, 15, 28, 29, 32, 46, 49, 50, 52, 55, 70, ),\r
+        /* 49 */ array(1, 13, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 50 */ array(1, 20, 25, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 51 */ array(1, 13, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 52 */ array(1, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 53 */ array(1, 20, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 54 */ array(12, 14, 15, 55, ),\r
+        /* 55 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 56 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 57 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 58 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 59 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, ),\r
+        /* 60 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 61 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 62 */ array(1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 63 */ array(1, 22, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 64 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 65 */ array(1, 2, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 66 */ array(1, 13, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 67 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 47, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 68 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 69 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 70 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 71 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 72 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 73 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 74 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 75 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 76 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 77 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 78 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 79 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 80 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 81 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 82 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 83 */ array(1, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, ),\r
+        /* 84 */ array(3, 4, 5, 6, 7, 8, 9, 12, 28, ),\r
+        /* 85 */ array(8, 12, 28, 70, 71, 72, ),\r
+        /* 86 */ array(1, 13, 18, 20, 46, 53, ),\r
+        /* 87 */ array(1, 13, 18, 20, ),\r
+        /* 88 */ array(18, 51, 56, ),\r
+        /* 89 */ array(14, 15, 55, ),\r
+        /* 90 */ array(2, 20, ),\r
+        /* 91 */ array(2, 20, ),\r
+        /* 92 */ array(2, 20, ),\r
+        /* 93 */ array(1, 20, ),\r
+        /* 94 */ array(4, 5, 6, 9, 10, 11, ),\r
+        /* 95 */ array(8, 12, 28, 70, 71, 72, ),\r
+        /* 96 */ array(12, 15, 16, 23, ),\r
+        /* 97 */ array(12, 15, 16, 54, ),\r
+        /* 98 */ array(12, 15, 54, ),\r
+        /* 99 */ array(13, 20, 23, ),\r
+        /* 100 */ array(13, 20, 45, ),\r
+        /* 101 */ array(13, 20, 23, ),\r
+        /* 102 */ array(16, 18, 53, ),\r
+        /* 103 */ array(12, 15, ),\r
+        /* 104 */ array(18, 53, ),\r
+        /* 105 */ array(12, 15, ),\r
+        /* 106 */ array(12, 15, ),\r
+        /* 107 */ array(12, 15, ),\r
+        /* 108 */ array(12, 15, ),\r
+        /* 109 */ array(12, 15, ),\r
+        /* 110 */ array(12, 15, ),\r
+        /* 111 */ array(12, 15, ),\r
+        /* 112 */ array(14, 15, ),\r
+        /* 113 */ array(12, 15, ),\r
+        /* 114 */ array(12, 15, ),\r
+        /* 115 */ array(12, 15, ),\r
+        /* 116 */ array(18, ),\r
+        /* 117 */ array(14, ),\r
+        /* 118 */ array(20, ),\r
+        /* 119 */ array(20, ),\r
+        /* 120 */ array(20, ),\r
+        /* 121 */ array(20, ),\r
+        /* 122 */ array(18, ),\r
+        /* 123 */ array(12, 13, 15, 27, ),\r
+        /* 124 */ array(12, 13, 15, 27, ),\r
+        /* 125 */ array(15, 17, 19, 21, ),\r
+        /* 126 */ array(12, 15, 54, ),\r
+        /* 127 */ array(12, 13, 15, ),\r
+        /* 128 */ array(12, 13, 15, ),\r
+        /* 129 */ array(12, 15, 16, ),\r
+        /* 130 */ array(13, 20, ),\r
+        /* 131 */ array(13, 20, ),\r
+        /* 132 */ array(13, 20, ),\r
+        /* 133 */ array(12, 46, ),\r
+        /* 134 */ array(13, 20, ),\r
+        /* 135 */ array(51, 56, ),\r
+        /* 136 */ array(13, 20, ),\r
+        /* 137 */ array(13, 20, ),\r
+        /* 138 */ array(13, 20, ),\r
+        /* 139 */ array(51, 56, ),\r
+        /* 140 */ array(13, 20, ),\r
+        /* 141 */ array(13, 20, ),\r
+        /* 142 */ array(13, 20, ),\r
+        /* 143 */ array(13, 20, ),\r
+        /* 144 */ array(51, 56, ),\r
+        /* 145 */ array(51, 56, ),\r
+        /* 146 */ array(13, 20, ),\r
+        /* 147 */ array(51, 56, ),\r
+        /* 148 */ array(13, 20, ),\r
+        /* 149 */ array(13, 20, ),\r
+        /* 150 */ array(13, 20, ),\r
+        /* 151 */ array(13, 20, ),\r
+        /* 152 */ array(46, ),\r
+        /* 153 */ array(10, ),\r
+        /* 154 */ array(14, ),\r
+        /* 155 */ array(2, ),\r
+        /* 156 */ array(18, ),\r
+        /* 157 */ array(18, ),\r
+        /* 158 */ array(18, ),\r
+        /* 159 */ array(20, ),\r
+        /* 160 */ array(20, ),\r
+        /* 161 */ array(18, ),\r
+        /* 162 */ array(),\r
+        /* 163 */ array(),\r
+        /* 164 */ array(),\r
+        /* 165 */ array(),\r
+        /* 166 */ array(),\r
+        /* 167 */ array(),\r
+        /* 168 */ array(),\r
+        /* 169 */ array(46, 51, 53, 57, ),\r
+        /* 170 */ array(16, 26, 46, 53, ),\r
+        /* 171 */ array(13, 20, 46, 53, ),\r
+        /* 172 */ array(12, 14, 15, 29, ),\r
+        /* 173 */ array(27, 46, 53, ),\r
+        /* 174 */ array(13, 20, 45, ),\r
+        /* 175 */ array(46, 53, ),\r
+        /* 176 */ array(27, 45, ),\r
+        /* 177 */ array(46, 53, ),\r
+        /* 178 */ array(22, 30, ),\r
+        /* 179 */ array(16, 51, ),\r
+        /* 180 */ array(30, 57, ),\r
+        /* 181 */ array(23, 71, ),\r
+        /* 182 */ array(13, 45, ),\r
+        /* 183 */ array(15, 54, ),\r
+        /* 184 */ array(15, 29, ),\r
+        /* 185 */ array(2, 16, ),\r
+        /* 186 */ array(26, ),\r
+        /* 187 */ array(13, ),\r
+        /* 188 */ array(14, ),\r
+        /* 189 */ array(24, ),\r
+        /* 190 */ array(47, ),\r
+        /* 191 */ array(15, ),\r
+        /* 192 */ array(26, ),\r
+        /* 193 */ array(55, ),\r
+        /* 194 */ array(14, ),\r
+        /* 195 */ array(55, ),\r
+        /* 196 */ array(15, ),\r
+        /* 197 */ array(14, ),\r
+        /* 198 */ array(57, ),\r
+        /* 199 */ array(23, ),\r
+        /* 200 */ array(15, ),\r
+        /* 201 */ array(15, ),\r
+        /* 202 */ array(15, ),\r
+        /* 203 */ array(15, ),\r
+        /* 204 */ array(15, ),\r
+        /* 205 */ array(20, ),\r
+        /* 206 */ array(47, ),\r
+        /* 207 */ array(46, ),\r
+        /* 208 */ array(29, ),\r
+        /* 209 */ array(51, ),\r
+        /* 210 */ array(15, ),\r
+        /* 211 */ array(2, ),\r
+        /* 212 */ array(13, ),\r
+        /* 213 */ array(16, ),\r
+        /* 214 */ array(48, ),\r
+        /* 215 */ array(15, ),\r
+        /* 216 */ array(13, ),\r
+        /* 217 */ array(45, ),\r
+        /* 218 */ array(14, ),\r
+        /* 219 */ array(13, ),\r
+        /* 220 */ array(14, ),\r
+        /* 221 */ array(16, ),\r
+        /* 222 */ array(20, ),\r
+        /* 223 */ array(47, ),\r
+        /* 224 */ array(),\r
+        /* 225 */ array(),\r
+        /* 226 */ array(),\r
+        /* 227 */ array(),\r
+        /* 228 */ array(),\r
+        /* 229 */ array(),\r
+        /* 230 */ array(),\r
+        /* 231 */ array(),\r
+        /* 232 */ array(),\r
+        /* 233 */ array(),\r
+        /* 234 */ array(),\r
+        /* 235 */ array(),\r
+        /* 236 */ array(),\r
+        /* 237 */ array(),\r
+        /* 238 */ array(),\r
+        /* 239 */ array(),\r
+        /* 240 */ array(),\r
+        /* 241 */ array(),\r
+        /* 242 */ array(),\r
+        /* 243 */ array(),\r
+        /* 244 */ array(),\r
+        /* 245 */ array(),\r
+        /* 246 */ array(),\r
         /* 247 */ array(),\r
         /* 248 */ array(),\r
         /* 249 */ array(),\r
@@ -1039,77 +986,50 @@ static public $yy_action = array(
         /* 357 */ array(),\r
         /* 358 */ array(),\r
         /* 359 */ array(),\r
-        /* 360 */ array(),\r
-        /* 361 */ array(),\r
-        /* 362 */ array(),\r
-        /* 363 */ array(),\r
-        /* 364 */ array(),\r
-        /* 365 */ array(),\r
-        /* 366 */ array(),\r
-        /* 367 */ array(),\r
-        /* 368 */ array(),\r
-        /* 369 */ array(),\r
-        /* 370 */ array(),\r
-        /* 371 */ array(),\r
-        /* 372 */ array(),\r
-        /* 373 */ array(),\r
-        /* 374 */ array(),\r
-        /* 375 */ array(),\r
-        /* 376 */ array(),\r
-        /* 377 */ array(),\r
-        /* 378 */ array(),\r
-        /* 379 */ array(),\r
-        /* 380 */ array(),\r
-        /* 381 */ array(),\r
-        /* 382 */ array(),\r
-        /* 383 */ array(),\r
 );\r
     static public $yy_default = array(\r
- /*     0 */   583,  566,  583,  583,  583,  583,  583,  537,  537,  583,\r
- /*    10 */   583,  537,  537,  583,  583,  583,  583,  583,  583,  583,\r
- /*    20 */   583,  583,  583,  583,  583,  583,  583,  583,  583,  583,\r
- /*    30 */   583,  583,  583,  583,  583,  583,  583,  583,  583,  583,\r
- /*    40 */   583,  583,  583,  583,  583,  583,  583,  583,  583,  451,\r
- /*    50 */   583,  583,  451,  451,  583,  384,  583,  462,  461,  583,\r
- /*    60 */   583,  545,  451,  451,  451,  451,  536,  583,  583,  583,\r
- /*    70 */   583,  583,  583,  583,  583,  583,  583,  583,  583,  453,\r
- /*    80 */   568,  484,  481,  457,  460,  433,  480,  477,  471,  567,\r
- /*    90 */   472,  473,  476,  468,  569,  583,  583,  508,  395,  395,\r
- /*   100 */   583,  395,  501,  485,  485,  508,  583,  401,  583,  583,\r
- /*   110 */   583,  583,  583,  583,  501,  401,  401,  583,  583,  401,\r
- /*   120 */   583,  583,  583,  540,  451,  451,  541,  451,  583,  451,\r
- /*   130 */   461,  583,  583,  583,  461,  583,  583,  583,  461,  509,\r
- /*   140 */   583,  583,  583,  531,  583,  583,  506,  529,  583,  583,\r
- /*   150 */   461,  583,  583,  583,  508,  583,  583,  583,  583,  530,\r
- /*   160 */   583,  528,  583,  583,  486,  542,  543,  465,  583,  466,\r
- /*   170 */   508,  582,  464,  407,  524,  582,  483,  487,  500,  488,\r
- /*   180 */   546,  470,  548,  508,  548,  508,  508,  548,  548,  549,\r
- /*   190 */   583,  462,  462,  456,  462,  485,  583,  490,  583,  522,\r
- /*   200 */   583,  583,  583,  482,  550,  462,  583,  583,  485,  583,\r
- /*   210 */   583,  583,  583,  583,  583,  583,  583,  583,  583,  490,\r
- /*   220 */   583,  583,  583,  583,  583,  583,  544,  583,  583,  583,\r
- /*   230 */   583,  583,  583,  456,  583,  583,  583,  583,  583,  583,\r
- /*   240 */   583,  522,  583,  583,  458,  495,  583,  445,  455,  398,\r
- /*   250 */   432,  386,  385,  434,  581,  443,  459,  444,  387,  442,\r
- /*   260 */   388,  573,  518,  394,  580,  515,  576,  579,  514,  519,\r
- /*   270 */   523,  532,  511,  512,  513,  397,  574,  390,  402,  436,\r
- /*   280 */   389,  435,  495,  396,  570,  534,  535,  575,  533,  400,\r
- /*   290 */   571,  572,  448,  427,  489,  547,  478,  479,  475,  474,\r
- /*   300 */   491,  469,  539,  538,  450,  447,  556,  557,  558,  559,\r
- /*   310 */   555,  554,  551,  552,  553,  492,  493,  496,  497,  499,\r
- /*   320 */   527,  463,  522,  502,  507,  510,  521,  520,  503,  415,\r
- /*   330 */   577,  494,  416,  498,  517,  504,  505,  516,  560,  561,\r
- /*   340 */   405,  429,  428,  425,  406,  426,  525,  526,  408,  424,\r
- /*   350 */   404,  437,  391,  430,  431,  403,  392,  393,  438,  439,\r
- /*   360 */   440,  423,  422,  565,  564,  578,  417,  563,  441,  562,\r
- /*   370 */   467,  446,  418,  419,  412,  411,  410,  409,  413,  414,\r
- /*   380 */   420,  421,  449,  399,\r
+ /*     0 */   546,  529,  546,  546,  546,  500,  546,  546,  546,  500,\r
+ /*    10 */   500,  546,  500,  546,  546,  546,  546,  546,  546,  546,\r
+ /*    20 */   546,  546,  546,  546,  546,  546,  546,  546,  546,  546,\r
+ /*    30 */   546,  546,  546,  546,  546,  546,  546,  546,  546,  546,\r
+ /*    40 */   546,  546,  546,  546,  546,  546,  546,  546,  546,  546,\r
+ /*    50 */   418,  546,  418,  418,  546,  546,  546,  546,  546,  546,\r
+ /*    60 */   546,  546,  499,  546,  546,  546,  546,  546,  427,  451,\r
+ /*    70 */   440,  532,  448,  443,  447,  531,  438,  400,  435,  444,\r
+ /*    80 */   530,  424,  439,  420,  360,  546,  459,  546,  508,  546,\r
+ /*    90 */   418,  418,  418,  418,  546,  546,  546,  473,  473,  452,\r
+ /*   100 */   428,  452,  466,  546,  466,  546,  546,  546,  546,  546,\r
+ /*   110 */   546,  546,  546,  546,  546,  546,  503,  546,  418,  418,\r
+ /*   120 */   418,  418,  504,  546,  546,  546,  474,  546,  546,  546,\r
+ /*   130 */   546,  546,  546,  473,  546,  492,  546,  546,  546,  491,\r
+ /*   140 */   546,  546,  546,  546,  493,  494,  546,  471,  546,  546,\r
+ /*   150 */   546,  546,  473,  374,  546,  434,  509,  506,  487,  545,\r
+ /*   160 */   545,  505,  511,  473,  511,  473,  473,  511,  511,  459,\r
+ /*   170 */   423,  459,  546,  459,  428,  459,  428,  449,  546,  457,\r
+ /*   180 */   546,  452,  428,  546,  546,  485,  546,  546,  546,  425,\r
+ /*   190 */   546,  546,  546,  546,  546,  546,  546,  546,  546,  452,\r
+ /*   200 */   546,  546,  546,  546,  546,  546,  546,  507,  546,  457,\r
+ /*   210 */   546,  485,  546,  546,  461,  546,  546,  428,  546,  546,\r
+ /*   220 */   546,  423,  546,  546,  477,  476,  361,  486,  495,  422,\r
+ /*   230 */   461,  415,  539,  542,  537,  538,  534,  535,  543,  536,\r
+ /*   240 */   497,  450,  482,  480,  481,  479,  533,  403,  544,  426,\r
+ /*   250 */   401,  498,  399,  411,  410,  409,  402,  478,  496,  512,\r
+ /*   260 */   513,  412,  385,  429,  464,  467,  472,  475,  458,  455,\r
+ /*   270 */   510,  456,  453,  454,  484,  485,  490,  483,  468,  469,\r
+ /*   280 */   465,  463,  430,  460,  431,  462,  417,  414,  368,  369,\r
+ /*   290 */   370,  371,  367,  366,  362,  363,  364,  365,  372,  373,\r
+ /*   300 */   381,  416,  408,  413,  380,  379,  375,  376,  377,  378,\r
+ /*   310 */   470,  432,  388,  387,  389,  390,  488,  386,  384,  526,\r
+ /*   320 */   528,  527,  541,  489,  391,  405,  406,  407,  397,  404,\r
+ /*   330 */   392,  393,  394,  396,  395,  433,  525,  442,  445,  446,\r
+ /*   340 */   501,  441,  437,  382,  540,  383,  436,  502,  514,  521,\r
+ /*   350 */   522,  523,  524,  520,  519,  515,  516,  517,  518,  398,\r
 );\r
-    const YYNOCODE = 132;\r
+    const YYNOCODE = 116;\r
     const YYSTACKDEPTH = 100;\r
-    const YYNSTATE = 384;\r
-    const YYNRULE = 199;\r
-    const YYERRORSYMBOL = 85;\r
+    const YYNSTATE = 360;\r
+    const YYNRULE = 186;\r
+    const YYERRORSYMBOL = 73;\r
     const YYERRSYMDT = 'yy0';\r
     const YYFALLBACK = 0;\r
     static public $yyFallback = array(\r
@@ -1140,28 +1060,24 @@ static public $yy_action = array(
     public $yyTokenName = array( \r
   '$',             'VERT',          'COLON',         'COMMENT',     \r
   'PHPSTARTTAG',   'PHPENDTAG',     'FAKEPHPSTARTTAG',  'XMLTAG',      \r
-  'OTHER',         'PHP_CODE',      'PHP_CODE_START_DOUBLEQUOTE',  'PHP_CODE_DOUBLEQUOTE',\r
-  'PHP_HEREDOC_START',  'PHP_HEREDOC_END',  'PHP_NOWDOC_START',  'PHP_NOWDOC_END',\r
-  'PHP_DQ_CONTENT',  'PHP_DQ_EMBED_START',  'PHP_DQ_EMBED_END',  'LITERALSTART',\r
-  'LITERALEND',    'LITERAL',       'LDEL',          'RDEL',        \r
-  'DOLLAR',        'ID',            'EQUAL',         'FOREACH',     \r
-  'PTR',           'IF',            'SPACE',         'FOR',         \r
-  'SEMICOLON',     'INCDEC',        'TO',            'STEP',        \r
-  'AS',            'APTR',          'LDELSLASH',     'INTEGER',     \r
-  'COMMA',         'MATH',          'UNIMATH',       'ANDSYM',      \r
-  'ISIN',          'ISDIVBY',       'ISNOTDIVBY',    'ISEVEN',      \r
-  'ISNOTEVEN',     'ISEVENBY',      'ISNOTEVENBY',   'ISODD',       \r
-  'ISNOTODD',      'ISODDBY',       'ISNOTODDBY',    'INSTANCEOF',  \r
-  'OPENP',         'CLOSEP',        'QMARK',         'NOT',         \r
-  'TYPECAST',      'DOT',           'BOOLEAN',       'NULL',        \r
+  'OTHER',         'LITERALSTART',  'LITERALEND',    'LITERAL',     \r
+  'LDEL',          'RDEL',          'DOLLAR',        'ID',          \r
+  'EQUAL',         'FOREACH',       'PTR',           'IF',          \r
+  'SPACE',         'FOR',           'SEMICOLON',     'INCDEC',      \r
+  'TO',            'STEP',          'AS',            'APTR',        \r
+  'LDELSLASH',     'INTEGER',       'COMMA',         'MATH',        \r
+  'UNIMATH',       'ANDSYM',        'ISIN',          'ISDIVBY',     \r
+  'ISNOTDIVBY',    'ISEVEN',        'ISNOTEVEN',     'ISEVENBY',    \r
+  'ISNOTEVENBY',   'ISODD',         'ISNOTODD',      'ISODDBY',     \r
+  'ISNOTODDBY',    'INSTANCEOF',    'OPENP',         'CLOSEP',      \r
+  'QMARK',         'NOT',           'TYPECAST',      'DOT',         \r
   'SINGLEQUOTESTRING',  'DOUBLECOLON',   'AT',            'HATCH',       \r
   'OPENB',         'CLOSEB',        'EQUALS',        'NOTEQUALS',   \r
   'GREATERTHAN',   'LESSTHAN',      'GREATEREQUAL',  'LESSEQUAL',   \r
   'IDENTITY',      'NONEIDENTITY',  'MOD',           'LAND',        \r
   'LOR',           'LXOR',          'QUOTE',         'BACKTICK',    \r
   'DOLLARID',      'error',         'start',         'template',    \r
-  'template_element',  'smartytag',     'literal',       'php_code',    \r
-  'php_code_element',  'php_dq_contents',  'php_dq_content',  'literal_elements',\r
+  'template_element',  'smartytag',     'literal',       'literal_elements',\r
   'literal_element',  'value',         'attributes',    'variable',    \r
   'expr',          'ternary',       'varindexed',    'modifier',    \r
   'modparameters',  'statement',     'statements',    'optspace',    \r
@@ -1180,199 +1096,186 @@ static public $yy_action = array(
  /*   3 */ "template_element ::= smartytag",\r
  /*   4 */ "template_element ::= COMMENT",\r
  /*   5 */ "template_element ::= literal",\r
- /*   6 */ "template_element ::= PHPSTARTTAG php_code PHPENDTAG",\r
- /*   7 */ "template_element ::= FAKEPHPSTARTTAG",\r
- /*   8 */ "template_element ::= XMLTAG",\r
- /*   9 */ "template_element ::= OTHER",\r
- /*  10 */ "php_code ::= php_code_element php_code",\r
- /*  11 */ "php_code ::=",\r
- /*  12 */ "php_code_element ::= PHP_CODE",\r
- /*  13 */ "php_code_element ::= PHP_CODE_START_DOUBLEQUOTE php_dq_contents PHP_CODE_DOUBLEQUOTE",\r
- /*  14 */ "php_code_element ::= PHP_HEREDOC_START php_dq_contents PHP_HEREDOC_END",\r
- /*  15 */ "php_code_element ::= PHP_NOWDOC_START php_dq_contents PHP_NOWDOC_END",\r
- /*  16 */ "php_dq_contents ::= php_dq_content php_dq_contents",\r
- /*  17 */ "php_dq_contents ::=",\r
- /*  18 */ "php_dq_content ::= PHP_DQ_CONTENT",\r
- /*  19 */ "php_dq_content ::= PHP_DQ_EMBED_START php_code PHP_DQ_EMBED_END",\r
- /*  20 */ "literal ::= LITERALSTART LITERALEND",\r
- /*  21 */ "literal ::= LITERALSTART literal_elements LITERALEND",\r
- /*  22 */ "literal_elements ::= literal_elements literal_element",\r
- /*  23 */ "literal_elements ::=",\r
- /*  24 */ "literal_element ::= literal",\r
- /*  25 */ "literal_element ::= LITERAL",\r
- /*  26 */ "literal_element ::= PHPSTARTTAG",\r
- /*  27 */ "literal_element ::= FAKEPHPSTARTTAG",\r
- /*  28 */ "literal_element ::= PHPENDTAG",\r
- /*  29 */ "smartytag ::= LDEL value RDEL",\r
- /*  30 */ "smartytag ::= LDEL value attributes RDEL",\r
- /*  31 */ "smartytag ::= LDEL variable attributes RDEL",\r
- /*  32 */ "smartytag ::= LDEL expr attributes RDEL",\r
- /*  33 */ "smartytag ::= LDEL ternary attributes RDEL",\r
- /*  34 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",\r
- /*  35 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",\r
- /*  36 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",\r
- /*  37 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL",\r
- /*  38 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",\r
- /*  39 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL",\r
- /*  40 */ "smartytag ::= LDEL ID attributes RDEL",\r
- /*  41 */ "smartytag ::= LDEL FOREACH attributes RDEL",\r
- /*  42 */ "smartytag ::= LDEL ID RDEL",\r
- /*  43 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",\r
- /*  44 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL",\r
- /*  45 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL",\r
- /*  46 */ "smartytag ::= LDEL IF SPACE expr RDEL",\r
- /*  47 */ "smartytag ::= LDEL IF SPACE statement RDEL",\r
- /*  48 */ "smartytag ::= LDEL FOR SPACE statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction RDEL",\r
- /*  49 */ "foraction ::= EQUAL expr",\r
- /*  50 */ "foraction ::= INCDEC",\r
- /*  51 */ "smartytag ::= LDEL FOR SPACE statement TO expr attributes RDEL",\r
- /*  52 */ "smartytag ::= LDEL FOR SPACE statement TO expr STEP expr RDEL",\r
- /*  53 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar RDEL",\r
- /*  54 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  55 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar RDEL",\r
- /*  56 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  57 */ "smartytag ::= LDELSLASH ID RDEL",\r
- /*  58 */ "smartytag ::= LDELSLASH specialclose RDEL",\r
- /*  59 */ "specialclose ::= IF",\r
- /*  60 */ "specialclose ::= FOR",\r
- /*  61 */ "specialclose ::= FOREACH",\r
- /*  62 */ "smartytag ::= LDELSLASH ID attributes RDEL",\r
- /*  63 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL",\r
- /*  64 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",\r
- /*  65 */ "attributes ::= attributes attribute",\r
- /*  66 */ "attributes ::= attribute",\r
- /*  67 */ "attributes ::=",\r
- /*  68 */ "attribute ::= SPACE ID EQUAL ID",\r
- /*  69 */ "attribute ::= SPACE ID EQUAL expr",\r
- /*  70 */ "attribute ::= SPACE ID EQUAL value",\r
- /*  71 */ "attribute ::= SPACE ID EQUAL ternary",\r
- /*  72 */ "attribute ::= SPACE ID",\r
- /*  73 */ "attribute ::= SPACE INTEGER EQUAL expr",\r
- /*  74 */ "statements ::= statement",\r
- /*  75 */ "statements ::= statements COMMA statement",\r
- /*  76 */ "statement ::= DOLLAR varvar EQUAL expr",\r
- /*  77 */ "expr ::= value",\r
- /*  78 */ "expr ::= ID",\r
- /*  79 */ "expr ::= DOLLAR ID COLON ID",\r
- /*  80 */ "expr ::= expr MATH value",\r
- /*  81 */ "expr ::= expr UNIMATH value",\r
- /*  82 */ "expr ::= expr ANDSYM value",\r
- /*  83 */ "expr ::= array",\r
- /*  84 */ "expr ::= expr ifcond expr",\r
- /*  85 */ "expr ::= expr ISIN array",\r
- /*  86 */ "expr ::= expr ISIN value",\r
- /*  87 */ "expr ::= expr lop expr",\r
- /*  88 */ "expr ::= expr ISDIVBY expr",\r
- /*  89 */ "expr ::= expr ISNOTDIVBY expr",\r
- /*  90 */ "expr ::= expr ISEVEN",\r
- /*  91 */ "expr ::= expr ISNOTEVEN",\r
- /*  92 */ "expr ::= expr ISEVENBY expr",\r
- /*  93 */ "expr ::= expr ISNOTEVENBY expr",\r
- /*  94 */ "expr ::= expr ISODD",\r
- /*  95 */ "expr ::= expr ISNOTODD",\r
- /*  96 */ "expr ::= expr ISODDBY expr",\r
- /*  97 */ "expr ::= expr ISNOTODDBY expr",\r
- /*  98 */ "expr ::= value INSTANCEOF ID",\r
- /*  99 */ "expr ::= value INSTANCEOF value",\r
- /* 100 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",\r
- /* 101 */ "value ::= variable",\r
- /* 102 */ "value ::= UNIMATH value",\r
- /* 103 */ "value ::= NOT value",\r
- /* 104 */ "value ::= TYPECAST value",\r
- /* 105 */ "value ::= variable INCDEC",\r
- /* 106 */ "value ::= INTEGER",\r
- /* 107 */ "value ::= INTEGER DOT INTEGER",\r
- /* 108 */ "value ::= BOOLEAN",\r
- /* 109 */ "value ::= NULL",\r
- /* 110 */ "value ::= function",\r
- /* 111 */ "value ::= OPENP expr CLOSEP",\r
- /* 112 */ "value ::= SINGLEQUOTESTRING",\r
- /* 113 */ "value ::= doublequoted_with_quotes",\r
- /* 114 */ "value ::= ID DOUBLECOLON static_class_access",\r
- /* 115 */ "value ::= smartytag",\r
- /* 116 */ "value ::= value modifier modparameters",\r
- /* 117 */ "variable ::= varindexed",\r
- /* 118 */ "variable ::= DOLLAR varvar AT ID",\r
- /* 119 */ "variable ::= object",\r
- /* 120 */ "variable ::= HATCH ID HATCH",\r
- /* 121 */ "variable ::= HATCH variable HATCH",\r
- /* 122 */ "varindexed ::= DOLLAR varvar arrayindex",\r
- /* 123 */ "arrayindex ::= arrayindex indexdef",\r
- /* 124 */ "arrayindex ::=",\r
- /* 125 */ "indexdef ::= DOT DOLLAR varvar",\r
- /* 126 */ "indexdef ::= DOT DOLLAR varvar AT ID",\r
- /* 127 */ "indexdef ::= DOT ID",\r
- /* 128 */ "indexdef ::= DOT BOOLEAN",\r
- /* 129 */ "indexdef ::= DOT NULL",\r
- /* 130 */ "indexdef ::= DOT INTEGER",\r
- /* 131 */ "indexdef ::= DOT LDEL expr RDEL",\r
- /* 132 */ "indexdef ::= OPENB ID CLOSEB",\r
- /* 133 */ "indexdef ::= OPENB ID DOT ID CLOSEB",\r
- /* 134 */ "indexdef ::= OPENB expr CLOSEB",\r
- /* 135 */ "indexdef ::= OPENB CLOSEB",\r
- /* 136 */ "varvar ::= varvarele",\r
- /* 137 */ "varvar ::= varvar varvarele",\r
- /* 138 */ "varvarele ::= ID",\r
- /* 139 */ "varvarele ::= LDEL expr RDEL",\r
- /* 140 */ "object ::= varindexed objectchain",\r
- /* 141 */ "object ::= varindexed DOUBLECOLON ID",\r
- /* 142 */ "objectchain ::= objectelement",\r
- /* 143 */ "objectchain ::= objectchain objectelement",\r
- /* 144 */ "objectelement ::= PTR ID arrayindex",\r
- /* 145 */ "objectelement ::= PTR variable arrayindex",\r
- /* 146 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",\r
- /* 147 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",\r
- /* 148 */ "objectelement ::= PTR method",\r
- /* 149 */ "function ::= ID OPENP params CLOSEP",\r
- /* 150 */ "method ::= ID OPENP params CLOSEP",\r
- /* 151 */ "params ::= expr COMMA params",\r
- /* 152 */ "params ::= expr",\r
- /* 153 */ "params ::=",\r
- /* 154 */ "modifier ::= VERT AT ID",\r
- /* 155 */ "modifier ::= VERT ID",\r
- /* 156 */ "static_class_access ::= method",\r
- /* 157 */ "static_class_access ::= DOLLAR ID OPENP params CLOSEP",\r
- /* 158 */ "static_class_access ::= method objectchain",\r
- /* 159 */ "static_class_access ::= DOLLAR ID OPENP params CLOSEP objectchain",\r
- /* 160 */ "static_class_access ::= ID",\r
- /* 161 */ "static_class_access ::= DOLLAR ID arrayindex",\r
- /* 162 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",\r
- /* 163 */ "modparameters ::= modparameters modparameter",\r
- /* 164 */ "modparameters ::=",\r
- /* 165 */ "modparameter ::= COLON value",\r
- /* 166 */ "modparameter ::= COLON ID",\r
- /* 167 */ "ifcond ::= EQUALS",\r
- /* 168 */ "ifcond ::= NOTEQUALS",\r
- /* 169 */ "ifcond ::= GREATERTHAN",\r
- /* 170 */ "ifcond ::= LESSTHAN",\r
- /* 171 */ "ifcond ::= GREATEREQUAL",\r
- /* 172 */ "ifcond ::= LESSEQUAL",\r
- /* 173 */ "ifcond ::= IDENTITY",\r
- /* 174 */ "ifcond ::= NONEIDENTITY",\r
- /* 175 */ "ifcond ::= MOD",\r
- /* 176 */ "lop ::= LAND",\r
- /* 177 */ "lop ::= LOR",\r
- /* 178 */ "lop ::= LXOR",\r
- /* 179 */ "array ::= OPENB arrayelements CLOSEB",\r
- /* 180 */ "arrayelements ::= arrayelement",\r
- /* 181 */ "arrayelements ::= arrayelements COMMA arrayelement",\r
- /* 182 */ "arrayelements ::=",\r
- /* 183 */ "arrayelement ::= value APTR expr",\r
- /* 184 */ "arrayelement ::= ID APTR expr",\r
- /* 185 */ "arrayelement ::= expr",\r
- /* 186 */ "doublequoted_with_quotes ::= QUOTE QUOTE",\r
- /* 187 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",\r
- /* 188 */ "doublequoted ::= doublequoted doublequotedcontent",\r
- /* 189 */ "doublequoted ::= doublequotedcontent",\r
- /* 190 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",\r
- /* 191 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",\r
- /* 192 */ "doublequotedcontent ::= DOLLARID",\r
- /* 193 */ "doublequotedcontent ::= LDEL variable RDEL",\r
- /* 194 */ "doublequotedcontent ::= LDEL expr RDEL",\r
- /* 195 */ "doublequotedcontent ::= smartytag",\r
- /* 196 */ "doublequotedcontent ::= OTHER",\r
- /* 197 */ "optspace ::= SPACE",\r
- /* 198 */ "optspace ::=",\r
+ /*   6 */ "template_element ::= PHPSTARTTAG",\r
+ /*   7 */ "template_element ::= PHPENDTAG",\r
+ /*   8 */ "template_element ::= FAKEPHPSTARTTAG",\r
+ /*   9 */ "template_element ::= XMLTAG",\r
+ /*  10 */ "template_element ::= OTHER",\r
+ /*  11 */ "literal ::= LITERALSTART LITERALEND",\r
+ /*  12 */ "literal ::= LITERALSTART literal_elements LITERALEND",\r
+ /*  13 */ "literal_elements ::= literal_elements literal_element",\r
+ /*  14 */ "literal_elements ::=",\r
+ /*  15 */ "literal_element ::= literal",\r
+ /*  16 */ "literal_element ::= LITERAL",\r
+ /*  17 */ "literal_element ::= PHPSTARTTAG",\r
+ /*  18 */ "literal_element ::= FAKEPHPSTARTTAG",\r
+ /*  19 */ "literal_element ::= PHPENDTAG",\r
+ /*  20 */ "smartytag ::= LDEL value RDEL",\r
+ /*  21 */ "smartytag ::= LDEL value attributes RDEL",\r
+ /*  22 */ "smartytag ::= LDEL variable attributes RDEL",\r
+ /*  23 */ "smartytag ::= LDEL expr attributes RDEL",\r
+ /*  24 */ "smartytag ::= LDEL ternary attributes RDEL",\r
+ /*  25 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",\r
+ /*  26 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",\r
+ /*  27 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",\r
+ /*  28 */ "smartytag ::= LDEL DOLLAR ID EQUAL ternary attributes RDEL",\r
+ /*  29 */ "smartytag ::= LDEL varindexed EQUAL expr attributes RDEL",\r
+ /*  30 */ "smartytag ::= LDEL varindexed EQUAL ternary attributes RDEL",\r
+ /*  31 */ "smartytag ::= LDEL ID attributes RDEL",\r
+ /*  32 */ "smartytag ::= LDEL FOREACH attributes RDEL",\r
+ /*  33 */ "smartytag ::= LDEL ID RDEL",\r
+ /*  34 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",\r
+ /*  35 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL",\r
+ /*  36 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL",\r
+ /*  37 */ "smartytag ::= LDEL IF SPACE expr RDEL",\r
+ /*  38 */ "smartytag ::= LDEL IF SPACE statement RDEL",\r
+ /*  39 */ "smartytag ::= LDEL FOR SPACE statements SEMICOLON optspace expr SEMICOLON optspace DOLLAR varvar foraction RDEL",\r
+ /*  40 */ "foraction ::= EQUAL expr",\r
+ /*  41 */ "foraction ::= INCDEC",\r
+ /*  42 */ "smartytag ::= LDEL FOR SPACE statement TO expr attributes RDEL",\r
+ /*  43 */ "smartytag ::= LDEL FOR SPACE statement TO expr STEP expr RDEL",\r
+ /*  44 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar RDEL",\r
+ /*  45 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
+ /*  46 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar RDEL",\r
+ /*  47 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
+ /*  48 */ "smartytag ::= LDELSLASH ID RDEL",\r
+ /*  49 */ "smartytag ::= LDELSLASH specialclose RDEL",\r
+ /*  50 */ "specialclose ::= IF",\r
+ /*  51 */ "specialclose ::= FOR",\r
+ /*  52 */ "specialclose ::= FOREACH",\r
+ /*  53 */ "smartytag ::= LDELSLASH ID attributes RDEL",\r
+ /*  54 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL",\r
+ /*  55 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",\r
+ /*  56 */ "attributes ::= attributes attribute",\r
+ /*  57 */ "attributes ::= attribute",\r
+ /*  58 */ "attributes ::=",\r
+ /*  59 */ "attribute ::= SPACE ID EQUAL ID",\r
+ /*  60 */ "attribute ::= SPACE ID EQUAL expr",\r
+ /*  61 */ "attribute ::= SPACE ID EQUAL value",\r
+ /*  62 */ "attribute ::= SPACE ID EQUAL ternary",\r
+ /*  63 */ "attribute ::= SPACE ID",\r
+ /*  64 */ "attribute ::= SPACE INTEGER EQUAL expr",\r
+ /*  65 */ "statements ::= statement",\r
+ /*  66 */ "statements ::= statements COMMA statement",\r
+ /*  67 */ "statement ::= DOLLAR varvar EQUAL expr",\r
+ /*  68 */ "expr ::= value",\r
+ /*  69 */ "expr ::= DOLLAR ID COLON ID",\r
+ /*  70 */ "expr ::= expr MATH value",\r
+ /*  71 */ "expr ::= expr UNIMATH value",\r
+ /*  72 */ "expr ::= expr ANDSYM value",\r
+ /*  73 */ "expr ::= array",\r
+ /*  74 */ "expr ::= expr modifier modparameters",\r
+ /*  75 */ "expr ::= expr ifcond expr",\r
+ /*  76 */ "expr ::= expr ISIN array",\r
+ /*  77 */ "expr ::= expr ISIN value",\r
+ /*  78 */ "expr ::= expr lop expr",\r
+ /*  79 */ "expr ::= expr ISDIVBY expr",\r
+ /*  80 */ "expr ::= expr ISNOTDIVBY expr",\r
+ /*  81 */ "expr ::= expr ISEVEN",\r
+ /*  82 */ "expr ::= expr ISNOTEVEN",\r
+ /*  83 */ "expr ::= expr ISEVENBY expr",\r
+ /*  84 */ "expr ::= expr ISNOTEVENBY expr",\r
+ /*  85 */ "expr ::= expr ISODD",\r
+ /*  86 */ "expr ::= expr ISNOTODD",\r
+ /*  87 */ "expr ::= expr ISODDBY expr",\r
+ /*  88 */ "expr ::= expr ISNOTODDBY expr",\r
+ /*  89 */ "expr ::= value INSTANCEOF ID",\r
+ /*  90 */ "expr ::= value INSTANCEOF value",\r
+ /*  91 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",\r
+ /*  92 */ "value ::= variable",\r
+ /*  93 */ "value ::= UNIMATH value",\r
+ /*  94 */ "value ::= NOT value",\r
+ /*  95 */ "value ::= TYPECAST value",\r
+ /*  96 */ "value ::= variable INCDEC",\r
+ /*  97 */ "value ::= INTEGER",\r
+ /*  98 */ "value ::= INTEGER DOT INTEGER",\r
+ /*  99 */ "value ::= ID",\r
+ /* 100 */ "value ::= function",\r
+ /* 101 */ "value ::= OPENP expr CLOSEP",\r
+ /* 102 */ "value ::= SINGLEQUOTESTRING",\r
+ /* 103 */ "value ::= doublequoted_with_quotes",\r
+ /* 104 */ "value ::= ID DOUBLECOLON static_class_access",\r
+ /* 105 */ "value ::= smartytag",\r
+ /* 106 */ "variable ::= varindexed",\r
+ /* 107 */ "variable ::= DOLLAR varvar AT ID",\r
+ /* 108 */ "variable ::= object",\r
+ /* 109 */ "variable ::= HATCH ID HATCH",\r
+ /* 110 */ "variable ::= HATCH variable HATCH",\r
+ /* 111 */ "varindexed ::= DOLLAR varvar arrayindex",\r
+ /* 112 */ "arrayindex ::= arrayindex indexdef",\r
+ /* 113 */ "arrayindex ::=",\r
+ /* 114 */ "indexdef ::= DOT DOLLAR varvar",\r
+ /* 115 */ "indexdef ::= DOT DOLLAR varvar AT ID",\r
+ /* 116 */ "indexdef ::= DOT ID",\r
+ /* 117 */ "indexdef ::= DOT INTEGER",\r
+ /* 118 */ "indexdef ::= DOT LDEL expr RDEL",\r
+ /* 119 */ "indexdef ::= OPENB ID CLOSEB",\r
+ /* 120 */ "indexdef ::= OPENB ID DOT ID CLOSEB",\r
+ /* 121 */ "indexdef ::= OPENB expr CLOSEB",\r
+ /* 122 */ "indexdef ::= OPENB CLOSEB",\r
+ /* 123 */ "varvar ::= varvarele",\r
+ /* 124 */ "varvar ::= varvar varvarele",\r
+ /* 125 */ "varvarele ::= ID",\r
+ /* 126 */ "varvarele ::= LDEL expr RDEL",\r
+ /* 127 */ "object ::= varindexed objectchain",\r
+ /* 128 */ "object ::= varindexed DOUBLECOLON ID",\r
+ /* 129 */ "objectchain ::= objectelement",\r
+ /* 130 */ "objectchain ::= objectchain objectelement",\r
+ /* 131 */ "objectelement ::= PTR ID arrayindex",\r
+ /* 132 */ "objectelement ::= PTR variable arrayindex",\r
+ /* 133 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",\r
+ /* 134 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",\r
+ /* 135 */ "objectelement ::= PTR method",\r
+ /* 136 */ "function ::= ID OPENP params CLOSEP",\r
+ /* 137 */ "method ::= ID OPENP params CLOSEP",\r
+ /* 138 */ "params ::= expr COMMA params",\r
+ /* 139 */ "params ::= expr",\r
+ /* 140 */ "params ::=",\r
+ /* 141 */ "modifier ::= VERT AT ID",\r
+ /* 142 */ "modifier ::= VERT ID",\r
+ /* 143 */ "static_class_access ::= method",\r
+ /* 144 */ "static_class_access ::= DOLLAR ID OPENP params CLOSEP",\r
+ /* 145 */ "static_class_access ::= method objectchain",\r
+ /* 146 */ "static_class_access ::= DOLLAR ID OPENP params CLOSEP objectchain",\r
+ /* 147 */ "static_class_access ::= ID",\r
+ /* 148 */ "static_class_access ::= DOLLAR ID arrayindex",\r
+ /* 149 */ "static_class_access ::= DOLLAR ID arrayindex objectchain",\r
+ /* 150 */ "modparameters ::= modparameters modparameter",\r
+ /* 151 */ "modparameters ::=",\r
+ /* 152 */ "modparameter ::= COLON value",\r
+ /* 153 */ "modparameter ::= COLON array",\r
+ /* 154 */ "ifcond ::= EQUALS",\r
+ /* 155 */ "ifcond ::= NOTEQUALS",\r
+ /* 156 */ "ifcond ::= GREATERTHAN",\r
+ /* 157 */ "ifcond ::= LESSTHAN",\r
+ /* 158 */ "ifcond ::= GREATEREQUAL",\r
+ /* 159 */ "ifcond ::= LESSEQUAL",\r
+ /* 160 */ "ifcond ::= IDENTITY",\r
+ /* 161 */ "ifcond ::= NONEIDENTITY",\r
+ /* 162 */ "ifcond ::= MOD",\r
+ /* 163 */ "lop ::= LAND",\r
+ /* 164 */ "lop ::= LOR",\r
+ /* 165 */ "lop ::= LXOR",\r
+ /* 166 */ "array ::= OPENB arrayelements CLOSEB",\r
+ /* 167 */ "arrayelements ::= arrayelement",\r
+ /* 168 */ "arrayelements ::= arrayelements COMMA arrayelement",\r
+ /* 169 */ "arrayelements ::=",\r
+ /* 170 */ "arrayelement ::= value APTR expr",\r
+ /* 171 */ "arrayelement ::= ID APTR expr",\r
+ /* 172 */ "arrayelement ::= expr",\r
+ /* 173 */ "doublequoted_with_quotes ::= QUOTE QUOTE",\r
+ /* 174 */ "doublequoted_with_quotes ::= QUOTE doublequoted QUOTE",\r
+ /* 175 */ "doublequoted ::= doublequoted doublequotedcontent",\r
+ /* 176 */ "doublequoted ::= doublequotedcontent",\r
+ /* 177 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",\r
+ /* 178 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",\r
+ /* 179 */ "doublequotedcontent ::= DOLLARID",\r
+ /* 180 */ "doublequotedcontent ::= LDEL variable RDEL",\r
+ /* 181 */ "doublequotedcontent ::= LDEL expr RDEL",\r
+ /* 182 */ "doublequotedcontent ::= smartytag",\r
+ /* 183 */ "doublequotedcontent ::= OTHER",\r
+ /* 184 */ "optspace ::= SPACE",\r
+ /* 185 */ "optspace ::=",\r
     );\r
 \r
     function tokenName($tokenType)\r
@@ -1646,228 +1549,211 @@ static public $yy_action = array(
     }\r
 \r
     static public $yyRuleInfo = array(\r
-  array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 87, 'rhs' => 1 ),\r
-  array( 'lhs' => 87, 'rhs' => 2 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 88, 'rhs' => 3 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 88, 'rhs' => 1 ),\r
-  array( 'lhs' => 91, 'rhs' => 2 ),\r
-  array( 'lhs' => 91, 'rhs' => 0 ),\r
-  array( 'lhs' => 92, 'rhs' => 1 ),\r
-  array( 'lhs' => 92, 'rhs' => 3 ),\r
-  array( 'lhs' => 92, 'rhs' => 3 ),\r
-  array( 'lhs' => 92, 'rhs' => 3 ),\r
+  array( 'lhs' => 74, 'rhs' => 1 ),\r
+  array( 'lhs' => 75, 'rhs' => 1 ),\r
+  array( 'lhs' => 75, 'rhs' => 2 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 76, 'rhs' => 1 ),\r
+  array( 'lhs' => 78, 'rhs' => 2 ),\r
+  array( 'lhs' => 78, 'rhs' => 3 ),\r
+  array( 'lhs' => 79, 'rhs' => 2 ),\r
+  array( 'lhs' => 79, 'rhs' => 0 ),\r
+  array( 'lhs' => 80, 'rhs' => 1 ),\r
+  array( 'lhs' => 80, 'rhs' => 1 ),\r
+  array( 'lhs' => 80, 'rhs' => 1 ),\r
+  array( 'lhs' => 80, 'rhs' => 1 ),\r
+  array( 'lhs' => 80, 'rhs' => 1 ),\r
+  array( 'lhs' => 77, 'rhs' => 3 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 7 ),\r
+  array( 'lhs' => 77, 'rhs' => 7 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 3 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 8 ),\r
+  array( 'lhs' => 77, 'rhs' => 5 ),\r
+  array( 'lhs' => 77, 'rhs' => 5 ),\r
+  array( 'lhs' => 77, 'rhs' => 13 ),\r
   array( 'lhs' => 93, 'rhs' => 2 ),\r
-  array( 'lhs' => 93, 'rhs' => 0 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 94, 'rhs' => 3 ),\r
-  array( 'lhs' => 90, 'rhs' => 2 ),\r
+  array( 'lhs' => 93, 'rhs' => 1 ),\r
+  array( 'lhs' => 77, 'rhs' => 8 ),\r
+  array( 'lhs' => 77, 'rhs' => 9 ),\r
+  array( 'lhs' => 77, 'rhs' => 8 ),\r
+  array( 'lhs' => 77, 'rhs' => 11 ),\r
+  array( 'lhs' => 77, 'rhs' => 8 ),\r
+  array( 'lhs' => 77, 'rhs' => 11 ),\r
+  array( 'lhs' => 77, 'rhs' => 3 ),\r
+  array( 'lhs' => 77, 'rhs' => 3 ),\r
+  array( 'lhs' => 95, 'rhs' => 1 ),\r
+  array( 'lhs' => 95, 'rhs' => 1 ),\r
+  array( 'lhs' => 95, 'rhs' => 1 ),\r
+  array( 'lhs' => 77, 'rhs' => 4 ),\r
+  array( 'lhs' => 77, 'rhs' => 6 ),\r
+  array( 'lhs' => 77, 'rhs' => 5 ),\r
+  array( 'lhs' => 82, 'rhs' => 2 ),\r
+  array( 'lhs' => 82, 'rhs' => 1 ),\r
+  array( 'lhs' => 82, 'rhs' => 0 ),\r
+  array( 'lhs' => 96, 'rhs' => 4 ),\r
+  array( 'lhs' => 96, 'rhs' => 4 ),\r
+  array( 'lhs' => 96, 'rhs' => 4 ),\r
+  array( 'lhs' => 96, 'rhs' => 4 ),\r
+  array( 'lhs' => 96, 'rhs' => 2 ),\r
+  array( 'lhs' => 96, 'rhs' => 4 ),\r
+  array( 'lhs' => 90, 'rhs' => 1 ),\r
   array( 'lhs' => 90, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 0 ),\r
-  array( 'lhs' => 96, 'rhs' => 1 ),\r
-  array( 'lhs' => 96, 'rhs' => 1 ),\r
-  array( 'lhs' => 96, 'rhs' => 1 ),\r
-  array( 'lhs' => 96, 'rhs' => 1 ),\r
-  array( 'lhs' => 96, 'rhs' => 1 ),\r
-  array( 'lhs' => 89, 'rhs' => 3 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
   array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 7 ),\r
-  array( 'lhs' => 89, 'rhs' => 7 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 3 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 8 ),\r
-  array( 'lhs' => 89, 'rhs' => 5 ),\r
-  array( 'lhs' => 89, 'rhs' => 5 ),\r
-  array( 'lhs' => 89, 'rhs' => 13 ),\r
-  array( 'lhs' => 109, 'rhs' => 2 ),\r
-  array( 'lhs' => 109, 'rhs' => 1 ),\r
-  array( 'lhs' => 89, 'rhs' => 8 ),\r
-  array( 'lhs' => 89, 'rhs' => 9 ),\r
-  array( 'lhs' => 89, 'rhs' => 8 ),\r
-  array( 'lhs' => 89, 'rhs' => 11 ),\r
-  array( 'lhs' => 89, 'rhs' => 8 ),\r
-  array( 'lhs' => 89, 'rhs' => 11 ),\r
-  array( 'lhs' => 89, 'rhs' => 3 ),\r
-  array( 'lhs' => 89, 'rhs' => 3 ),\r
-  array( 'lhs' => 111, 'rhs' => 1 ),\r
-  array( 'lhs' => 111, 'rhs' => 1 ),\r
-  array( 'lhs' => 111, 'rhs' => 1 ),\r
-  array( 'lhs' => 89, 'rhs' => 4 ),\r
-  array( 'lhs' => 89, 'rhs' => 6 ),\r
-  array( 'lhs' => 89, 'rhs' => 5 ),\r
-  array( 'lhs' => 98, 'rhs' => 2 ),\r
-  array( 'lhs' => 98, 'rhs' => 1 ),\r
-  array( 'lhs' => 98, 'rhs' => 0 ),\r
-  array( 'lhs' => 112, 'rhs' => 4 ),\r
-  array( 'lhs' => 112, 'rhs' => 4 ),\r
-  array( 'lhs' => 112, 'rhs' => 4 ),\r
-  array( 'lhs' => 112, 'rhs' => 4 ),\r
-  array( 'lhs' => 112, 'rhs' => 2 ),\r
-  array( 'lhs' => 112, 'rhs' => 4 ),\r
+  array( 'lhs' => 84, 'rhs' => 1 ),\r
+  array( 'lhs' => 84, 'rhs' => 4 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 1 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 2 ),\r
+  array( 'lhs' => 84, 'rhs' => 2 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 2 ),\r
+  array( 'lhs' => 84, 'rhs' => 2 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 84, 'rhs' => 3 ),\r
+  array( 'lhs' => 85, 'rhs' => 7 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 2 ),\r
+  array( 'lhs' => 81, 'rhs' => 2 ),\r
+  array( 'lhs' => 81, 'rhs' => 2 ),\r
+  array( 'lhs' => 81, 'rhs' => 2 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 3 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 3 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 81, 'rhs' => 3 ),\r
+  array( 'lhs' => 81, 'rhs' => 1 ),\r
+  array( 'lhs' => 83, 'rhs' => 1 ),\r
+  array( 'lhs' => 83, 'rhs' => 4 ),\r
+  array( 'lhs' => 83, 'rhs' => 1 ),\r
+  array( 'lhs' => 83, 'rhs' => 3 ),\r
+  array( 'lhs' => 83, 'rhs' => 3 ),\r
+  array( 'lhs' => 86, 'rhs' => 3 ),\r
+  array( 'lhs' => 103, 'rhs' => 2 ),\r
+  array( 'lhs' => 103, 'rhs' => 0 ),\r
+  array( 'lhs' => 104, 'rhs' => 3 ),\r
+  array( 'lhs' => 104, 'rhs' => 5 ),\r
+  array( 'lhs' => 104, 'rhs' => 2 ),\r
+  array( 'lhs' => 104, 'rhs' => 2 ),\r
+  array( 'lhs' => 104, 'rhs' => 4 ),\r
+  array( 'lhs' => 104, 'rhs' => 3 ),\r
+  array( 'lhs' => 104, 'rhs' => 5 ),\r
+  array( 'lhs' => 104, 'rhs' => 3 ),\r
+  array( 'lhs' => 104, 'rhs' => 2 ),\r
+  array( 'lhs' => 92, 'rhs' => 1 ),\r
+  array( 'lhs' => 92, 'rhs' => 2 ),\r
+  array( 'lhs' => 105, 'rhs' => 1 ),\r
+  array( 'lhs' => 105, 'rhs' => 3 ),\r
+  array( 'lhs' => 102, 'rhs' => 2 ),\r
+  array( 'lhs' => 102, 'rhs' => 3 ),\r
   array( 'lhs' => 106, 'rhs' => 1 ),\r
-  array( 'lhs' => 106, 'rhs' => 3 ),\r
-  array( 'lhs' => 105, 'rhs' => 4 ),\r
-  array( 'lhs' => 100, 'rhs' => 1 ),\r
-  array( 'lhs' => 100, 'rhs' => 1 ),\r
-  array( 'lhs' => 100, 'rhs' => 4 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 1 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 101, 'rhs' => 7 ),\r
+  array( 'lhs' => 106, 'rhs' => 2 ),\r
+  array( 'lhs' => 107, 'rhs' => 3 ),\r
+  array( 'lhs' => 107, 'rhs' => 3 ),\r
+  array( 'lhs' => 107, 'rhs' => 5 ),\r
+  array( 'lhs' => 107, 'rhs' => 6 ),\r
+  array( 'lhs' => 107, 'rhs' => 2 ),\r
+  array( 'lhs' => 99, 'rhs' => 4 ),\r
+  array( 'lhs' => 108, 'rhs' => 4 ),\r
+  array( 'lhs' => 109, 'rhs' => 3 ),\r
+  array( 'lhs' => 109, 'rhs' => 1 ),\r
+  array( 'lhs' => 109, 'rhs' => 0 ),\r
+  array( 'lhs' => 87, 'rhs' => 3 ),\r
+  array( 'lhs' => 87, 'rhs' => 2 ),\r
+  array( 'lhs' => 101, 'rhs' => 1 ),\r
+  array( 'lhs' => 101, 'rhs' => 5 ),\r
+  array( 'lhs' => 101, 'rhs' => 2 ),\r
+  array( 'lhs' => 101, 'rhs' => 6 ),\r
+  array( 'lhs' => 101, 'rhs' => 1 ),\r
+  array( 'lhs' => 101, 'rhs' => 3 ),\r
+  array( 'lhs' => 101, 'rhs' => 4 ),\r
+  array( 'lhs' => 88, 'rhs' => 2 ),\r
+  array( 'lhs' => 88, 'rhs' => 0 ),\r
+  array( 'lhs' => 110, 'rhs' => 2 ),\r
+  array( 'lhs' => 110, 'rhs' => 2 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 2 ),\r
-  array( 'lhs' => 97, 'rhs' => 2 ),\r
-  array( 'lhs' => 97, 'rhs' => 2 ),\r
-  array( 'lhs' => 97, 'rhs' => 2 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 3 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 3 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 3 ),\r
   array( 'lhs' => 97, 'rhs' => 1 ),\r
-  array( 'lhs' => 97, 'rhs' => 3 ),\r
-  array( 'lhs' => 99, 'rhs' => 1 ),\r
-  array( 'lhs' => 99, 'rhs' => 4 ),\r
-  array( 'lhs' => 99, 'rhs' => 1 ),\r
-  array( 'lhs' => 99, 'rhs' => 3 ),\r
-  array( 'lhs' => 99, 'rhs' => 3 ),\r
-  array( 'lhs' => 102, 'rhs' => 3 ),\r
-  array( 'lhs' => 119, 'rhs' => 2 ),\r
-  array( 'lhs' => 119, 'rhs' => 0 ),\r
-  array( 'lhs' => 120, 'rhs' => 3 ),\r
-  array( 'lhs' => 120, 'rhs' => 5 ),\r
-  array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 120, 'rhs' => 4 ),\r
-  array( 'lhs' => 120, 'rhs' => 3 ),\r
-  array( 'lhs' => 120, 'rhs' => 5 ),\r
-  array( 'lhs' => 120, 'rhs' => 3 ),\r
-  array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 108, 'rhs' => 1 ),\r
-  array( 'lhs' => 108, 'rhs' => 2 ),\r
-  array( 'lhs' => 121, 'rhs' => 1 ),\r
-  array( 'lhs' => 121, 'rhs' => 3 ),\r
-  array( 'lhs' => 118, 'rhs' => 2 ),\r
-  array( 'lhs' => 118, 'rhs' => 3 ),\r
-  array( 'lhs' => 122, 'rhs' => 1 ),\r
-  array( 'lhs' => 122, 'rhs' => 2 ),\r
-  array( 'lhs' => 123, 'rhs' => 3 ),\r
-  array( 'lhs' => 123, 'rhs' => 3 ),\r
-  array( 'lhs' => 123, 'rhs' => 5 ),\r
-  array( 'lhs' => 123, 'rhs' => 6 ),\r
-  array( 'lhs' => 123, 'rhs' => 2 ),\r
-  array( 'lhs' => 115, 'rhs' => 4 ),\r
-  array( 'lhs' => 124, 'rhs' => 4 ),\r
-  array( 'lhs' => 125, 'rhs' => 3 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 0 ),\r
-  array( 'lhs' => 103, 'rhs' => 3 ),\r
-  array( 'lhs' => 103, 'rhs' => 2 ),\r
-  array( 'lhs' => 117, 'rhs' => 1 ),\r
-  array( 'lhs' => 117, 'rhs' => 5 ),\r
-  array( 'lhs' => 117, 'rhs' => 2 ),\r
-  array( 'lhs' => 117, 'rhs' => 6 ),\r
-  array( 'lhs' => 117, 'rhs' => 1 ),\r
-  array( 'lhs' => 117, 'rhs' => 3 ),\r
-  array( 'lhs' => 117, 'rhs' => 4 ),\r
-  array( 'lhs' => 104, 'rhs' => 2 ),\r
-  array( 'lhs' => 104, 'rhs' => 0 ),\r
-  array( 'lhs' => 126, 'rhs' => 2 ),\r
-  array( 'lhs' => 126, 'rhs' => 2 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
-  array( 'lhs' => 113, 'rhs' => 1 ),\r
+  array( 'lhs' => 97, 'rhs' => 1 ),\r
+  array( 'lhs' => 98, 'rhs' => 1 ),\r
+  array( 'lhs' => 98, 'rhs' => 1 ),\r
+  array( 'lhs' => 98, 'rhs' => 1 ),\r
+  array( 'lhs' => 94, 'rhs' => 3 ),\r
+  array( 'lhs' => 111, 'rhs' => 1 ),\r
+  array( 'lhs' => 111, 'rhs' => 3 ),\r
+  array( 'lhs' => 111, 'rhs' => 0 ),\r
+  array( 'lhs' => 112, 'rhs' => 3 ),\r
+  array( 'lhs' => 112, 'rhs' => 3 ),\r
+  array( 'lhs' => 112, 'rhs' => 1 ),\r
+  array( 'lhs' => 100, 'rhs' => 2 ),\r
+  array( 'lhs' => 100, 'rhs' => 3 ),\r
+  array( 'lhs' => 113, 'rhs' => 2 ),\r
   array( 'lhs' => 113, 'rhs' => 1 ),\r
+  array( 'lhs' => 114, 'rhs' => 3 ),\r
+  array( 'lhs' => 114, 'rhs' => 3 ),\r
   array( 'lhs' => 114, 'rhs' => 1 ),\r
+  array( 'lhs' => 114, 'rhs' => 3 ),\r
+  array( 'lhs' => 114, 'rhs' => 3 ),\r
   array( 'lhs' => 114, 'rhs' => 1 ),\r
   array( 'lhs' => 114, 'rhs' => 1 ),\r
-  array( 'lhs' => 110, 'rhs' => 3 ),\r
-  array( 'lhs' => 127, 'rhs' => 1 ),\r
-  array( 'lhs' => 127, 'rhs' => 3 ),\r
-  array( 'lhs' => 127, 'rhs' => 0 ),\r
-  array( 'lhs' => 128, 'rhs' => 3 ),\r
-  array( 'lhs' => 128, 'rhs' => 3 ),\r
-  array( 'lhs' => 128, 'rhs' => 1 ),\r
-  array( 'lhs' => 116, 'rhs' => 2 ),\r
-  array( 'lhs' => 116, 'rhs' => 3 ),\r
-  array( 'lhs' => 129, 'rhs' => 2 ),\r
-  array( 'lhs' => 129, 'rhs' => 1 ),\r
-  array( 'lhs' => 130, 'rhs' => 3 ),\r
-  array( 'lhs' => 130, 'rhs' => 3 ),\r
-  array( 'lhs' => 130, 'rhs' => 1 ),\r
-  array( 'lhs' => 130, 'rhs' => 3 ),\r
-  array( 'lhs' => 130, 'rhs' => 3 ),\r
-  array( 'lhs' => 130, 'rhs' => 1 ),\r
-  array( 'lhs' => 130, 'rhs' => 1 ),\r
-  array( 'lhs' => 107, 'rhs' => 1 ),\r
-  array( 'lhs' => 107, 'rhs' => 0 ),\r
+  array( 'lhs' => 91, 'rhs' => 1 ),\r
+  array( 'lhs' => 91, 'rhs' => 0 ),\r
     );\r
 \r
     static public $yyReduceMap = array(\r
         0 => 0,\r
         5 => 0,\r
-        12 => 0,\r
-        18 => 0,\r
-        24 => 0,\r
-        25 => 0,\r
-        59 => 0,\r
-        60 => 0,\r
-        61 => 0,\r
-        77 => 0,\r
-        101 => 0,\r
-        106 => 0,\r
+        15 => 0,\r
+        16 => 0,\r
+        50 => 0,\r
+        51 => 0,\r
+        52 => 0,\r
+        68 => 0,\r
+        92 => 0,\r
+        97 => 0,\r
+        100 => 0,\r
+        102 => 0,\r
+        103 => 0,\r
         108 => 0,\r
-        109 => 0,\r
-        110 => 0,\r
-        112 => 0,\r
-        113 => 0,\r
-        119 => 0,\r
-        156 => 0,\r
-        180 => 0,\r
+        143 => 0,\r
+        167 => 0,\r
         1 => 1,\r
         2 => 2,\r
         3 => 3,\r
@@ -1877,181 +1763,172 @@ static public $yy_action = array(
         8 => 8,\r
         9 => 9,\r
         10 => 10,\r
-        16 => 10,\r
-        22 => 10,\r
-        102 => 10,\r
-        104 => 10,\r
-        105 => 10,\r
-        158 => 10,\r
         11 => 11,\r
-        17 => 11,\r
-        20 => 11,\r
-        23 => 11,\r
+        14 => 11,\r
+        12 => 12,\r
         13 => 13,\r
-        14 => 13,\r
-        15 => 13,\r
-        19 => 13,\r
+        93 => 13,\r
+        95 => 13,\r
+        96 => 13,\r
+        145 => 13,\r
+        17 => 17,\r
+        18 => 17,\r
+        19 => 19,\r
+        20 => 20,\r
         21 => 21,\r
-        26 => 26,\r
-        27 => 26,\r
-        28 => 28,\r
+        22 => 21,\r
+        23 => 21,\r
+        24 => 21,\r
+        25 => 25,\r
+        26 => 25,\r
+        27 => 27,\r
+        28 => 27,\r
         29 => 29,\r
-        30 => 30,\r
-        31 => 30,\r
-        32 => 30,\r
-        33 => 30,\r
+        30 => 29,\r
+        31 => 31,\r
+        32 => 31,\r
+        33 => 33,\r
         34 => 34,\r
-        35 => 34,\r
+        35 => 35,\r
         36 => 36,\r
-        37 => 36,\r
-        38 => 38,\r
-        39 => 38,\r
+        37 => 37,\r
+        38 => 37,\r
+        39 => 39,\r
         40 => 40,\r
-        41 => 40,\r
+        41 => 41,\r
+        57 => 41,\r
+        139 => 41,\r
+        147 => 41,\r
+        172 => 41,\r
         42 => 42,\r
         43 => 43,\r
         44 => 44,\r
         45 => 45,\r
         46 => 46,\r
-        47 => 46,\r
+        47 => 47,\r
         48 => 48,\r
-        49 => 49,\r
-        50 => 50,\r
-        66 => 50,\r
-        152 => 50,\r
-        160 => 50,\r
-        185 => 50,\r
-        51 => 51,\r
-        52 => 52,\r
+        49 => 48,\r
         53 => 53,\r
         54 => 54,\r
         55 => 55,\r
         56 => 56,\r
-        57 => 57,\r
-        58 => 57,\r
-        62 => 62,\r
+        58 => 58,\r
+        59 => 59,\r
+        60 => 60,\r
+        61 => 60,\r
+        62 => 60,\r
+        64 => 60,\r
         63 => 63,\r
-        64 => 64,\r
         65 => 65,\r
+        66 => 66,\r
         67 => 67,\r
-        68 => 68,\r
         69 => 69,\r
-        70 => 69,\r
-        71 => 69,\r
-        73 => 69,\r
-        72 => 72,\r
+        70 => 70,\r
+        71 => 70,\r
+        72 => 70,\r
+        73 => 73,\r
+        123 => 73,\r
+        184 => 73,\r
         74 => 74,\r
         75 => 75,\r
+        78 => 75,\r
+        89 => 75,\r
         76 => 76,\r
-        78 => 78,\r
+        77 => 77,\r
         79 => 79,\r
         80 => 80,\r
-        81 => 80,\r
-        82 => 80,\r
+        81 => 81,\r
+        86 => 81,\r
+        82 => 82,\r
+        85 => 82,\r
         83 => 83,\r
-        136 => 83,\r
-        197 => 83,\r
+        88 => 83,\r
         84 => 84,\r
         87 => 84,\r
-        98 => 84,\r
-        85 => 85,\r
-        86 => 86,\r
-        88 => 88,\r
-        89 => 89,\r
         90 => 90,\r
-        95 => 90,\r
         91 => 91,\r
-        94 => 91,\r
-        92 => 92,\r
-        97 => 92,\r
-        93 => 93,\r
-        96 => 93,\r
+        94 => 94,\r
+        98 => 98,\r
         99 => 99,\r
-        100 => 100,\r
-        103 => 103,\r
+        101 => 101,\r
+        104 => 104,\r
+        105 => 105,\r
+        106 => 106,\r
         107 => 107,\r
+        109 => 109,\r
+        110 => 110,\r
         111 => 111,\r
+        112 => 112,\r
+        113 => 113,\r
+        151 => 113,\r
         114 => 114,\r
         115 => 115,\r
         116 => 116,\r
         117 => 117,\r
         118 => 118,\r
+        121 => 118,\r
+        119 => 119,\r
         120 => 120,\r
-        121 => 121,\r
         122 => 122,\r
-        123 => 123,\r
+        185 => 122,\r
         124 => 124,\r
-        164 => 124,\r
         125 => 125,\r
         126 => 126,\r
         127 => 127,\r
-        128 => 127,\r
-        129 => 127,\r
+        128 => 128,\r
+        129 => 129,\r
         130 => 130,\r
         131 => 131,\r
-        134 => 131,\r
         132 => 132,\r
         133 => 133,\r
+        134 => 134,\r
         135 => 135,\r
-        198 => 135,\r
+        136 => 136,\r
         137 => 137,\r
         138 => 138,\r
-        139 => 139,\r
         140 => 140,\r
         141 => 141,\r
-        142 => 142,\r
-        143 => 143,\r
+        142 => 141,\r
         144 => 144,\r
-        145 => 145,\r
         146 => 146,\r
-        147 => 147,\r
         148 => 148,\r
         149 => 149,\r
         150 => 150,\r
-        151 => 151,\r
-        153 => 153,\r
+        152 => 152,\r
+        153 => 152,\r
         154 => 154,\r
-        155 => 154,\r
+        155 => 155,\r
+        156 => 156,\r
         157 => 157,\r
+        158 => 158,\r
         159 => 159,\r
+        160 => 160,\r
         161 => 161,\r
         162 => 162,\r
         163 => 163,\r
+        164 => 164,\r
         165 => 165,\r
         166 => 166,\r
-        167 => 167,\r
         168 => 168,\r
         169 => 169,\r
         170 => 170,\r
         171 => 171,\r
-        172 => 172,\r
         173 => 173,\r
         174 => 174,\r
         175 => 175,\r
         176 => 176,\r
         177 => 177,\r
-        178 => 178,\r
+        178 => 177,\r
+        180 => 177,\r
         179 => 179,\r
         181 => 181,\r
         182 => 182,\r
         183 => 183,\r
-        184 => 184,\r
-        186 => 186,\r
-        187 => 187,\r
-        188 => 188,\r
-        189 => 189,\r
-        190 => 190,\r
-        191 => 190,\r
-        193 => 190,\r
-        192 => 192,\r
-        194 => 194,\r
-        195 => 195,\r
-        196 => 196,\r
     );\r
-#line 84 "smarty_internal_templateparser.y"\r
+#line 85 "smarty_internal_templateparser.y"\r
     function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2048 "smarty_internal_templateparser.php"\r
-#line 90 "smarty_internal_templateparser.y"\r
+#line 1925 "smarty_internal_templateparser.php"\r
+#line 91 "smarty_internal_templateparser.y"\r
     function yy_r1(){if ($this->template->extract_code == false) {\r
                                                   $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;\r
                                                } else {\r
@@ -2059,8 +1936,8 @@ static public $yy_action = array(
                                                   $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor;\r
                                                } \r
                                                  }\r
-#line 2057 "smarty_internal_templateparser.php"\r
-#line 98 "smarty_internal_templateparser.y"\r
+#line 1934 "smarty_internal_templateparser.php"\r
+#line 99 "smarty_internal_templateparser.y"\r
     function yy_r2(){if ($this->template->extract_code == false) {\r
                                                              $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;\r
                                                            } else {\r
@@ -2069,8 +1946,8 @@ static public $yy_action = array(
                                                              $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;\r
                                                            } \r
                                                               }\r
-#line 2067 "smarty_internal_templateparser.php"\r
-#line 111 "smarty_internal_templateparser.y"\r
+#line 1944 "smarty_internal_templateparser.php"\r
+#line 112 "smarty_internal_templateparser.y"\r
     function yy_r3(){\r
                                           if ($this->compiler->has_code) {\r
                                             $tmp =''; foreach ($this->compiler->prefix_code as $code) {$tmp.=$code;} $this->compiler->prefix_code=array();\r
@@ -2081,441 +1958,479 @@ static public $yy_action = array(
                                          $this->compiler->has_variable_string = false;\r
                                          $this->block_nesting_level = count($this->compiler->_tag_stack);\r
                                             }\r
-#line 2079 "smarty_internal_templateparser.php"\r
-#line 123 "smarty_internal_templateparser.y"\r
+#line 1956 "smarty_internal_templateparser.php"\r
+#line 124 "smarty_internal_templateparser.y"\r
     function yy_r4(){ $this->_retvalue = '';    }\r
-#line 2082 "smarty_internal_templateparser.php"\r
-#line 129 "smarty_internal_templateparser.y"\r
+#line 1959 "smarty_internal_templateparser.php"\r
+#line 130 "smarty_internal_templateparser.y"\r
     function yy_r6(){\r
                                       if ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {\r
-                                                                    $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + -2]->minor) . str_replace('<?','&lt;?',$this->yystack[$this->yyidx + -1]->minor) . '?<??>>';\r
+                                                                    $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);\r
+                                      } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {\r
+                                       $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars($this->yystack[$this->yyidx + 0]->minor, ENT_QUOTES),false);\r
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {\r
+                                       $this->_retvalue = $this->compiler->processNocacheCode('<?php', true);\r
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {\r
+                                       $this->_retvalue = '';\r
+                                      }\r
+                                         }\r
+#line 1972 "smarty_internal_templateparser.php"\r
+#line 142 "smarty_internal_templateparser.y"\r
+    function yy_r7(){if ($this->is_xml) {\r
+                                       $this->compiler->tag_nocache = true; \r
+                                       $this->is_xml = true; \r
+                                       $this->_retvalue = $this->compiler->processNocacheCode("<?php echo '?>';?>", $this->compiler, true);\r
+                                      }elseif ($this->sec_obj->php_handling == SMARTY_PHP_PASSTHRU) {\r
+                                                                    $this->_retvalue = '?<??>>';\r
                                       } elseif ($this->sec_obj->php_handling == SMARTY_PHP_QUOTE) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars($this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'?>', ENT_QUOTES), false);\r
+                                       $this->_retvalue = $this->compiler->processNocacheCode(htmlspecialchars('?>', ENT_QUOTES), false);\r
                                       }elseif ($this->sec_obj->php_handling == SMARTY_PHP_ALLOW) {\r
-                                       $this->_retvalue = $this->compiler->processNocacheCode('<?php'.$this->yystack[$this->yyidx + -1]->minor.'?>', true);\r
+                                       $this->_retvalue = $this->compiler->processNocacheCode('?>', true);\r
                                       }elseif ($this->sec_obj->php_handling == SMARTY_PHP_REMOVE) {\r
                                        $this->_retvalue = '';\r
                                       }\r
                                          }\r
-#line 2095 "smarty_internal_templateparser.php"\r
-#line 141 "smarty_internal_templateparser.y"\r
-    function yy_r7(){if ($this->lex->strip) {\r
+#line 1988 "smarty_internal_templateparser.php"\r
+#line 157 "smarty_internal_templateparser.y"\r
+    function yy_r8(){if ($this->lex->strip) {\r
                                        $this->_retvalue = preg_replace('![\$this->yystack[$this->yyidx + 0]->minor ]*[\r\n]+[\$this->yystack[$this->yyidx + 0]->minor ]*!', '', self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor));      \r
                                      } else {\r
                                        $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     \r
                                      }\r
                                         }\r
-#line 2103 "smarty_internal_templateparser.php"\r
-#line 149 "smarty_internal_templateparser.y"\r
-    function yy_r8(){ $this->compiler->tag_nocache = true; $this->_retvalue = $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true);    }\r
-#line 2106 "smarty_internal_templateparser.php"\r
-#line 152 "smarty_internal_templateparser.y"\r
-    function yy_r9(){if ($this->lex->strip) {\r
+#line 1996 "smarty_internal_templateparser.php"\r
+#line 165 "smarty_internal_templateparser.y"\r
+    function yy_r9(){ $this->compiler->tag_nocache = true; $this->is_xml = true; $this->_retvalue = $this->compiler->processNocacheCode("<?php echo '<?xml';?>", $this->compiler, true);    }\r
+#line 1999 "smarty_internal_templateparser.php"\r
+#line 168 "smarty_internal_templateparser.y"\r
+    function yy_r10(){if ($this->lex->strip) {\r
                                        $this->_retvalue = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor);  \r
                                      } else {\r
                                        $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     \r
                                      }\r
                                         }\r
-#line 2114 "smarty_internal_templateparser.php"\r
-#line 160 "smarty_internal_templateparser.y"\r
-    function yy_r10(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2117 "smarty_internal_templateparser.php"\r
-#line 161 "smarty_internal_templateparser.y"\r
+#line 2007 "smarty_internal_templateparser.php"\r
+#line 176 "smarty_internal_templateparser.y"\r
     function yy_r11(){ $this->_retvalue = '';     }\r
-#line 2120 "smarty_internal_templateparser.php"\r
-#line 164 "smarty_internal_templateparser.y"\r
-    function yy_r13(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2123 "smarty_internal_templateparser.php"\r
+#line 2010 "smarty_internal_templateparser.php"\r
 #line 177 "smarty_internal_templateparser.y"\r
-    function yy_r21(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
-#line 2126 "smarty_internal_templateparser.php"\r
+    function yy_r12(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
+#line 2013 "smarty_internal_templateparser.php"\r
+#line 179 "smarty_internal_templateparser.y"\r
+    function yy_r13(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2016 "smarty_internal_templateparser.php"\r
 #line 184 "smarty_internal_templateparser.y"\r
-    function yy_r26(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2129 "smarty_internal_templateparser.php"\r
+    function yy_r17(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
+#line 2019 "smarty_internal_templateparser.php"\r
 #line 186 "smarty_internal_templateparser.y"\r
-    function yy_r28(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2132 "smarty_internal_templateparser.php"\r
+    function yy_r19(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
+#line 2022 "smarty_internal_templateparser.php"\r
 #line 194 "smarty_internal_templateparser.y"\r
-    function yy_r29(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2135 "smarty_internal_templateparser.php"\r
+    function yy_r20(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2025 "smarty_internal_templateparser.php"\r
 #line 195 "smarty_internal_templateparser.y"\r
-    function yy_r30(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2138 "smarty_internal_templateparser.php"\r
+    function yy_r21(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2028 "smarty_internal_templateparser.php"\r
 #line 206 "smarty_internal_templateparser.y"\r
-    function yy_r34(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"));    }\r
-#line 2141 "smarty_internal_templateparser.php"\r
+    function yy_r25(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"));    }\r
+#line 2031 "smarty_internal_templateparser.php"\r
 #line 208 "smarty_internal_templateparser.y"\r
-    function yy_r36(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor,'var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'"),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2144 "smarty_internal_templateparser.php"\r
+    function yy_r27(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor,'var'=>"'".$this->yystack[$this->yyidx + -4]->minor."'"),$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2034 "smarty_internal_templateparser.php"\r
 #line 210 "smarty_internal_templateparser.y"\r
-    function yy_r38(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2147 "smarty_internal_templateparser.php"\r
+    function yy_r29(){ $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array('value'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2037 "smarty_internal_templateparser.php"\r
 #line 213 "smarty_internal_templateparser.y"\r
-    function yy_r40(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2150 "smarty_internal_templateparser.php"\r
+    function yy_r31(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);    }\r
+#line 2040 "smarty_internal_templateparser.php"\r
 #line 215 "smarty_internal_templateparser.y"\r
-    function yy_r42(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());    }\r
-#line 2153 "smarty_internal_templateparser.php"\r
+    function yy_r33(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());    }\r
+#line 2043 "smarty_internal_templateparser.php"\r
 #line 217 "smarty_internal_templateparser.y"\r
-    function yy_r43(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2156 "smarty_internal_templateparser.php"\r
+    function yy_r34(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2046 "smarty_internal_templateparser.php"\r
 #line 219 "smarty_internal_templateparser.y"\r
-    function yy_r44(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
+    function yy_r35(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
                                                                                     $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
                                                                                      }\r
-#line 2161 "smarty_internal_templateparser.php"\r
+#line 2051 "smarty_internal_templateparser.php"\r
 #line 223 "smarty_internal_templateparser.y"\r
-    function yy_r45(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -4]->minor),$this->yystack[$this->yyidx + -1]->minor)).'<?php echo ';\r
+    function yy_r36(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('object_methode'=>$this->yystack[$this->yyidx + -4]->minor),$this->yystack[$this->yyidx + -1]->minor)).'<?php echo ';\r
                                                                                                $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
                                                                                                 }\r
-#line 2166 "smarty_internal_templateparser.php"\r
+#line 2056 "smarty_internal_templateparser.php"\r
 #line 227 "smarty_internal_templateparser.y"\r
-    function yy_r46(){ $this->_retvalue = $this->compiler->compileTag(($this->yystack[$this->yyidx + -3]->minor == 'else if')? 'elseif' : $this->yystack[$this->yyidx + -3]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2169 "smarty_internal_templateparser.php"\r
+    function yy_r37(){ $this->_retvalue = $this->compiler->compileTag(($this->yystack[$this->yyidx + -3]->minor == 'else if')? 'elseif' : $this->yystack[$this->yyidx + -3]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2059 "smarty_internal_templateparser.php"\r
 #line 230 "smarty_internal_templateparser.y"\r
-    function yy_r48(){\r
+    function yy_r39(){\r
                                                              $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -11]->minor,array('start'=>$this->yystack[$this->yyidx + -9]->minor,'ifexp'=>$this->yystack[$this->yyidx + -6]->minor,'varloop'=>$this->yystack[$this->yyidx + -2]->minor,'loop'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2173 "smarty_internal_templateparser.php"\r
+#line 2063 "smarty_internal_templateparser.php"\r
 #line 233 "smarty_internal_templateparser.y"\r
-    function yy_r49(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2176 "smarty_internal_templateparser.php"\r
+    function yy_r40(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2066 "smarty_internal_templateparser.php"\r
 #line 234 "smarty_internal_templateparser.y"\r
-    function yy_r50(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2179 "smarty_internal_templateparser.php"\r
+    function yy_r41(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2069 "smarty_internal_templateparser.php"\r
 #line 235 "smarty_internal_templateparser.y"\r
-    function yy_r51(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2182 "smarty_internal_templateparser.php"\r
+    function yy_r42(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array_merge(array('start'=>$this->yystack[$this->yyidx + -4]->minor,'to'=>$this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2072 "smarty_internal_templateparser.php"\r
 #line 236 "smarty_internal_templateparser.y"\r
-    function yy_r52(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -7]->minor,array('start'=>$this->yystack[$this->yyidx + -5]->minor,'to'=>$this->yystack[$this->yyidx + -3]->minor,'step'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2185 "smarty_internal_templateparser.php"\r
+    function yy_r43(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -7]->minor,array('start'=>$this->yystack[$this->yyidx + -5]->minor,'to'=>$this->yystack[$this->yyidx + -3]->minor,'step'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2075 "smarty_internal_templateparser.php"\r
 #line 238 "smarty_internal_templateparser.y"\r
-    function yy_r53(){\r
+    function yy_r44(){\r
                                                             $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2189 "smarty_internal_templateparser.php"\r
+#line 2079 "smarty_internal_templateparser.php"\r
 #line 240 "smarty_internal_templateparser.y"\r
-    function yy_r54(){\r
+    function yy_r45(){\r
                                                             $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -9]->minor,array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }\r
-#line 2193 "smarty_internal_templateparser.php"\r
+#line 2083 "smarty_internal_templateparser.php"\r
 #line 242 "smarty_internal_templateparser.y"\r
-    function yy_r55(){ \r
+    function yy_r46(){ \r
                                                             $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -6]->minor,array('from'=>$this->yystack[$this->yyidx + -4]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2197 "smarty_internal_templateparser.php"\r
+#line 2087 "smarty_internal_templateparser.php"\r
 #line 244 "smarty_internal_templateparser.y"\r
-    function yy_r56(){ \r
+    function yy_r47(){ \r
                                                             $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -9]->minor,array('from'=>$this->yystack[$this->yyidx + -7]->minor,'item'=>$this->yystack[$this->yyidx + -1]->minor,'key'=>$this->yystack[$this->yyidx + -4]->minor));    }\r
-#line 2201 "smarty_internal_templateparser.php"\r
+#line 2091 "smarty_internal_templateparser.php"\r
 #line 248 "smarty_internal_templateparser.y"\r
-    function yy_r57(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());    }\r
-#line 2204 "smarty_internal_templateparser.php"\r
+    function yy_r48(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());    }\r
+#line 2094 "smarty_internal_templateparser.php"\r
 #line 253 "smarty_internal_templateparser.y"\r
-    function yy_r62(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2207 "smarty_internal_templateparser.php"\r
+    function yy_r53(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor);    }\r
+#line 2097 "smarty_internal_templateparser.php"\r
 #line 254 "smarty_internal_templateparser.y"\r
-    function yy_r63(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
+    function yy_r54(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor.'close',$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\r
                                                                                          $this->_retvalue .= $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -3]->minor,'params'=>'ob_get_clean()'.$this->yystack[$this->yyidx + -2]->minor)).'?>';\r
                                                                                           }\r
-#line 2212 "smarty_internal_templateparser.php"\r
+#line 2102 "smarty_internal_templateparser.php"\r
 #line 258 "smarty_internal_templateparser.y"\r
-    function yy_r64(){  $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2215 "smarty_internal_templateparser.php"\r
+    function yy_r55(){  $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
+#line 2105 "smarty_internal_templateparser.php"\r
 #line 265 "smarty_internal_templateparser.y"\r
-    function yy_r65(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2218 "smarty_internal_templateparser.php"\r
+    function yy_r56(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 2108 "smarty_internal_templateparser.php"\r
 #line 269 "smarty_internal_templateparser.y"\r
-    function yy_r67(){ $this->_retvalue = array();    }\r
-#line 2221 "smarty_internal_templateparser.php"\r
+    function yy_r58(){ $this->_retvalue = array();    }\r
+#line 2111 "smarty_internal_templateparser.php"\r
 #line 272 "smarty_internal_templateparser.y"\r
-    function yy_r68(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");    }\r
-#line 2224 "smarty_internal_templateparser.php"\r
-#line 273 "smarty_internal_templateparser.y"\r
-    function yy_r69(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2227 "smarty_internal_templateparser.php"\r
-#line 276 "smarty_internal_templateparser.y"\r
-    function yy_r72(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true');    }\r
-#line 2230 "smarty_internal_templateparser.php"\r
+    function yy_r59(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'true');\r
+                                                 } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'false');\r
+                                                 } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'null');\r
+                                                 } else\r
+                                                  $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>"'".$this->yystack[$this->yyidx + 0]->minor."'");    }\r
+#line 2121 "smarty_internal_templateparser.php"\r
+#line 280 "smarty_internal_templateparser.y"\r
+    function yy_r60(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 2124 "smarty_internal_templateparser.php"\r
 #line 283 "smarty_internal_templateparser.y"\r
-    function yy_r74(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2233 "smarty_internal_templateparser.php"\r
-#line 284 "smarty_internal_templateparser.y"\r
-    function yy_r75(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;    }\r
-#line 2236 "smarty_internal_templateparser.php"\r
-#line 286 "smarty_internal_templateparser.y"\r
-    function yy_r76(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2239 "smarty_internal_templateparser.php"\r
-#line 294 "smarty_internal_templateparser.y"\r
-    function yy_r78(){ $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";     }\r
-#line 2242 "smarty_internal_templateparser.php"\r
-#line 296 "smarty_internal_templateparser.y"\r
-    function yy_r79(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';    }\r
-#line 2245 "smarty_internal_templateparser.php"\r
-#line 298 "smarty_internal_templateparser.y"\r
-    function yy_r80(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2248 "smarty_internal_templateparser.php"\r
+    function yy_r63(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true');    }\r
+#line 2127 "smarty_internal_templateparser.php"\r
+#line 290 "smarty_internal_templateparser.y"\r
+    function yy_r65(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 2130 "smarty_internal_templateparser.php"\r
+#line 291 "smarty_internal_templateparser.y"\r
+    function yy_r66(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;    }\r
+#line 2133 "smarty_internal_templateparser.php"\r
+#line 293 "smarty_internal_templateparser.y"\r
+    function yy_r67(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 2136 "smarty_internal_templateparser.php"\r
+#line 302 "smarty_internal_templateparser.y"\r
+    function yy_r69(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';    }\r
+#line 2139 "smarty_internal_templateparser.php"\r
 #line 304 "smarty_internal_templateparser.y"\r
-    function yy_r83(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2251 "smarty_internal_templateparser.php"\r
-#line 308 "smarty_internal_templateparser.y"\r
-    function yy_r84(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2254 "smarty_internal_templateparser.php"\r
-#line 309 "smarty_internal_templateparser.y"\r
-    function yy_r85(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2257 "smarty_internal_templateparser.php"\r
+    function yy_r70(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2142 "smarty_internal_templateparser.php"\r
 #line 310 "smarty_internal_templateparser.y"\r
-    function yy_r86(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2260 "smarty_internal_templateparser.php"\r
-#line 312 "smarty_internal_templateparser.y"\r
-    function yy_r88(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2263 "smarty_internal_templateparser.php"\r
+    function yy_r73(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2145 "smarty_internal_templateparser.php"\r
 #line 313 "smarty_internal_templateparser.y"\r
-    function yy_r89(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2266 "smarty_internal_templateparser.php"\r
-#line 314 "smarty_internal_templateparser.y"\r
-    function yy_r90(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2269 "smarty_internal_templateparser.php"\r
-#line 315 "smarty_internal_templateparser.y"\r
-    function yy_r91(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2272 "smarty_internal_templateparser.php"\r
-#line 316 "smarty_internal_templateparser.y"\r
-    function yy_r92(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2275 "smarty_internal_templateparser.php"\r
+    function yy_r74(){  $this->_retvalue = $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -1]->minor,'params'=>$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor));     }\r
+#line 2148 "smarty_internal_templateparser.php"\r
 #line 317 "smarty_internal_templateparser.y"\r
-    function yy_r93(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
-#line 2278 "smarty_internal_templateparser.php"\r
+    function yy_r75(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2151 "smarty_internal_templateparser.php"\r
+#line 318 "smarty_internal_templateparser.y"\r
+    function yy_r76(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2154 "smarty_internal_templateparser.php"\r
+#line 319 "smarty_internal_templateparser.y"\r
+    function yy_r77(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2157 "smarty_internal_templateparser.php"\r
+#line 321 "smarty_internal_templateparser.y"\r
+    function yy_r79(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2160 "smarty_internal_templateparser.php"\r
+#line 322 "smarty_internal_templateparser.y"\r
+    function yy_r80(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2163 "smarty_internal_templateparser.php"\r
 #line 323 "smarty_internal_templateparser.y"\r
-    function yy_r99(){$this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>'; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;    }\r
-#line 2281 "smarty_internal_templateparser.php"\r
-#line 329 "smarty_internal_templateparser.y"\r
-    function yy_r100(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2284 "smarty_internal_templateparser.php"\r
-#line 336 "smarty_internal_templateparser.y"\r
-    function yy_r103(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2287 "smarty_internal_templateparser.php"\r
-#line 341 "smarty_internal_templateparser.y"\r
-    function yy_r107(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2290 "smarty_internal_templateparser.php"\r
-#line 351 "smarty_internal_templateparser.y"\r
-    function yy_r111(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";     }\r
-#line 2293 "smarty_internal_templateparser.php"\r
-#line 357 "smarty_internal_templateparser.y"\r
-    function yy_r114(){if (!$this->template->security || $this->smarty->security_handler->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {\r
+    function yy_r81(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 2166 "smarty_internal_templateparser.php"\r
+#line 324 "smarty_internal_templateparser.y"\r
+    function yy_r82(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 2169 "smarty_internal_templateparser.php"\r
+#line 325 "smarty_internal_templateparser.y"\r
+    function yy_r83(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2172 "smarty_internal_templateparser.php"\r
+#line 326 "smarty_internal_templateparser.y"\r
+    function yy_r84(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+#line 2175 "smarty_internal_templateparser.php"\r
+#line 332 "smarty_internal_templateparser.y"\r
+    function yy_r90(){$this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'='.$this->yystack[$this->yyidx + 0]->minor.';?>'; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.'$_tmp'.$this->prefix_number;    }\r
+#line 2178 "smarty_internal_templateparser.php"\r
+#line 338 "smarty_internal_templateparser.y"\r
+    function yy_r91(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2181 "smarty_internal_templateparser.php"\r
+#line 345 "smarty_internal_templateparser.y"\r
+    function yy_r94(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2184 "smarty_internal_templateparser.php"\r
+#line 350 "smarty_internal_templateparser.y"\r
+    function yy_r98(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2187 "smarty_internal_templateparser.php"\r
+#line 352 "smarty_internal_templateparser.y"\r
+    function yy_r99(){ if (preg_match('~^true$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                $this->_retvalue = 'true';\r
+                               } elseif (preg_match('~^false$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                $this->_retvalue = 'false';\r
+                               } elseif (preg_match('~^null$~i', $this->yystack[$this->yyidx + 0]->minor)) {\r
+                                $this->_retvalue = 'null';\r
+                               } else\r
+                               $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";     }\r
+#line 2197 "smarty_internal_templateparser.php"\r
+#line 363 "smarty_internal_templateparser.y"\r
+    function yy_r101(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";     }\r
+#line 2200 "smarty_internal_templateparser.php"\r
+#line 369 "smarty_internal_templateparser.y"\r
+    function yy_r104(){if (!$this->template->security || $this->smarty->security_handler->isTrustedStaticClass($this->yystack[$this->yyidx + -2]->minor, $this->compiler)) {\r
                                                                   $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor; \r
                                                                 }    }\r
-#line 2298 "smarty_internal_templateparser.php"\r
-#line 361 "smarty_internal_templateparser.y"\r
-    function yy_r115(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '$_tmp'.$this->prefix_number;     }\r
-#line 2301 "smarty_internal_templateparser.php"\r
-#line 363 "smarty_internal_templateparser.y"\r
-    function yy_r116(){  $this->_retvalue = $this->compiler->compileTag('private_modifier',array('modifier'=>$this->yystack[$this->yyidx + -1]->minor,'params'=>$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor));     }\r
-#line 2304 "smarty_internal_templateparser.php"\r
-#line 372 "smarty_internal_templateparser.y"\r
-    function yy_r117(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);} else {\r
-                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2308 "smarty_internal_templateparser.php"\r
-#line 375 "smarty_internal_templateparser.y"\r
-    function yy_r118(){ $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
-#line 2311 "smarty_internal_templateparser.php"\r
-#line 379 "smarty_internal_templateparser.y"\r
-    function yy_r120(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';    }\r
-#line 2314 "smarty_internal_templateparser.php"\r
-#line 380 "smarty_internal_templateparser.y"\r
-    function yy_r121(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';    }\r
-#line 2317 "smarty_internal_templateparser.php"\r
-#line 383 "smarty_internal_templateparser.y"\r
-    function yy_r122(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2320 "smarty_internal_templateparser.php"\r
-#line 389 "smarty_internal_templateparser.y"\r
-    function yy_r123(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2323 "smarty_internal_templateparser.php"\r
+#line 2205 "smarty_internal_templateparser.php"\r
+#line 373 "smarty_internal_templateparser.y"\r
+    function yy_r105(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php ob_start();?>'.$this->yystack[$this->yyidx + 0]->minor.'<?php $_tmp'.$this->prefix_number.'=ob_get_clean();?>'; $this->_retvalue = '$_tmp'.$this->prefix_number;     }\r
+#line 2208 "smarty_internal_templateparser.php"\r
+#line 382 "smarty_internal_templateparser.y"\r
+    function yy_r106(){if ($this->yystack[$this->yyidx + 0]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);\r
+                                      } else {\r
+                                      if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + 0]->minor['var']])) {\r
+                                          $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + 0]->minor['var'] .']->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];\r
+                                         } else {\r
+                                          $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor['var'] .')->value'.$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];\r
+                                         }\r
+                                       $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor['var'],"'"), null, true, false)->nocache;}    }\r
+#line 2218 "smarty_internal_templateparser.php"\r
 #line 391 "smarty_internal_templateparser.y"\r
-    function yy_r124(){return;    }\r
-#line 2326 "smarty_internal_templateparser.php"\r
-#line 395 "smarty_internal_templateparser.y"\r
-    function yy_r125(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor .')->value]'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable('$this->yystack[$this->yyidx + 0]->minor', null, true, false)->nocache;    }\r
-#line 2329 "smarty_internal_templateparser.php"\r
-#line 396 "smarty_internal_templateparser.y"\r
-    function yy_r126(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor.']'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
-#line 2332 "smarty_internal_templateparser.php"\r
-#line 397 "smarty_internal_templateparser.y"\r
-    function yy_r127(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }\r
-#line 2335 "smarty_internal_templateparser.php"\r
+    function yy_r107(){if (isset($this->compiler->local_var[$this->yystack[$this->yyidx + -2]->minor])) {\r
+                                                  $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;\r
+                                                 } else {\r
+                                                  $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor;\r
+                                                 }\r
+                                                  $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
+#line 2226 "smarty_internal_templateparser.php"\r
+#line 400 "smarty_internal_templateparser.y"\r
+    function yy_r109(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';    }\r
+#line 2229 "smarty_internal_templateparser.php"\r
 #line 401 "smarty_internal_templateparser.y"\r
-    function yy_r130(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";    }\r
-#line 2338 "smarty_internal_templateparser.php"\r
-#line 402 "smarty_internal_templateparser.y"\r
-    function yy_r131(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";    }\r
-#line 2341 "smarty_internal_templateparser.php"\r
+    function yy_r110(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';    }\r
+#line 2232 "smarty_internal_templateparser.php"\r
 #line 404 "smarty_internal_templateparser.y"\r
-    function yy_r132(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';    }\r
-#line 2344 "smarty_internal_templateparser.php"\r
-#line 405 "smarty_internal_templateparser.y"\r
-    function yy_r133(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';    }\r
-#line 2347 "smarty_internal_templateparser.php"\r
-#line 409 "smarty_internal_templateparser.y"\r
-    function yy_r135(){$this->_retvalue = '';    }\r
-#line 2350 "smarty_internal_templateparser.php"\r
+    function yy_r111(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 2235 "smarty_internal_templateparser.php"\r
+#line 410 "smarty_internal_templateparser.y"\r
+    function yy_r112(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2238 "smarty_internal_templateparser.php"\r
+#line 412 "smarty_internal_templateparser.y"\r
+    function yy_r113(){return;    }\r
+#line 2241 "smarty_internal_templateparser.php"\r
+#line 416 "smarty_internal_templateparser.y"\r
+    function yy_r114(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + 0]->minor .')->value]'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable('$this->yystack[$this->yyidx + 0]->minor', null, true, false)->nocache;    }\r
+#line 2244 "smarty_internal_templateparser.php"\r
 #line 417 "smarty_internal_templateparser.y"\r
-    function yy_r137(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2353 "smarty_internal_templateparser.php"\r
+    function yy_r115(){ $this->_retvalue = '[$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor .')->'.$this->yystack[$this->yyidx + 0]->minor.']'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor,"'"), null, true, false)->nocache;    }\r
+#line 2247 "smarty_internal_templateparser.php"\r
+#line 418 "smarty_internal_templateparser.y"\r
+    function yy_r116(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }\r
+#line 2250 "smarty_internal_templateparser.php"\r
 #line 419 "smarty_internal_templateparser.y"\r
-    function yy_r138(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\r
-#line 2356 "smarty_internal_templateparser.php"\r
+    function yy_r117(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";    }\r
+#line 2253 "smarty_internal_templateparser.php"\r
+#line 420 "smarty_internal_templateparser.y"\r
+    function yy_r118(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";    }\r
+#line 2256 "smarty_internal_templateparser.php"\r
 #line 422 "smarty_internal_templateparser.y"\r
-    function yy_r139(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2359 "smarty_internal_templateparser.php"\r
+    function yy_r119(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';    }\r
+#line 2259 "smarty_internal_templateparser.php"\r
+#line 423 "smarty_internal_templateparser.y"\r
+    function yy_r120(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';    }\r
+#line 2262 "smarty_internal_templateparser.php"\r
 #line 427 "smarty_internal_templateparser.y"\r
-    function yy_r140(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;} else {\r
-                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2363 "smarty_internal_templateparser.php"\r
-#line 429 "smarty_internal_templateparser.y"\r
-    function yy_r141(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;} else {\r
-                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor['var'],"'"), null, true, false)->nocache;}    }\r
-#line 2367 "smarty_internal_templateparser.php"\r
-#line 432 "smarty_internal_templateparser.y"\r
-    function yy_r142(){$this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2370 "smarty_internal_templateparser.php"\r
-#line 434 "smarty_internal_templateparser.y"\r
-    function yy_r143(){$this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2373 "smarty_internal_templateparser.php"\r
-#line 436 "smarty_internal_templateparser.y"\r
-    function yy_r144(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2376 "smarty_internal_templateparser.php"\r
+    function yy_r122(){$this->_retvalue = '';    }\r
+#line 2265 "smarty_internal_templateparser.php"\r
+#line 435 "smarty_internal_templateparser.y"\r
+    function yy_r124(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2268 "smarty_internal_templateparser.php"\r
 #line 437 "smarty_internal_templateparser.y"\r
-    function yy_r145(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2379 "smarty_internal_templateparser.php"\r
-#line 438 "smarty_internal_templateparser.y"\r
-    function yy_r146(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2382 "smarty_internal_templateparser.php"\r
+    function yy_r125(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\r
+#line 2271 "smarty_internal_templateparser.php"\r
 #line 439 "smarty_internal_templateparser.y"\r
-    function yy_r147(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2385 "smarty_internal_templateparser.php"\r
-#line 441 "smarty_internal_templateparser.y"\r
-    function yy_r148(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2388 "smarty_internal_templateparser.php"\r
-#line 447 "smarty_internal_templateparser.y"\r
-    function yy_r149(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {\r
+    function yy_r126(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 2274 "smarty_internal_templateparser.php"\r
+#line 444 "smarty_internal_templateparser.y"\r
+    function yy_r127(){ if ($this->yystack[$this->yyidx + -1]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;} else {\r
+                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -1]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -1]->minor['var'],"'"), null, true, false)->nocache;}    }\r
+#line 2278 "smarty_internal_templateparser.php"\r
+#line 446 "smarty_internal_templateparser.y"\r
+    function yy_r128(){ if ($this->yystack[$this->yyidx + -2]->minor['var'] == '\'smarty\'') { $this->_retvalue =  $this->compiler->compileTag('private_special_variable',$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).'::'.$this->yystack[$this->yyidx + 0]->minor;} else {\r
+                                                         $this->_retvalue = '$_smarty_tpl->getVariable('. $this->yystack[$this->yyidx + -2]->minor['var'] .')->value'.$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].'::'.$this->yystack[$this->yyidx + 0]->minor; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + -2]->minor['var'],"'"), null, true, false)->nocache;}    }\r
+#line 2282 "smarty_internal_templateparser.php"\r
+#line 449 "smarty_internal_templateparser.y"\r
+    function yy_r129(){$this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2285 "smarty_internal_templateparser.php"\r
+#line 451 "smarty_internal_templateparser.y"\r
+    function yy_r130(){$this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2288 "smarty_internal_templateparser.php"\r
+#line 453 "smarty_internal_templateparser.y"\r
+    function yy_r131(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2291 "smarty_internal_templateparser.php"\r
+#line 454 "smarty_internal_templateparser.y"\r
+    function yy_r132(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
+#line 2294 "smarty_internal_templateparser.php"\r
+#line 455 "smarty_internal_templateparser.y"\r
+    function yy_r133(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
+#line 2297 "smarty_internal_templateparser.php"\r
+#line 456 "smarty_internal_templateparser.y"\r
+    function yy_r134(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
+#line 2300 "smarty_internal_templateparser.php"\r
+#line 458 "smarty_internal_templateparser.y"\r
+    function yy_r135(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2303 "smarty_internal_templateparser.php"\r
+#line 464 "smarty_internal_templateparser.y"\r
+    function yy_r136(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {\r
                                                                                                                                                                                    if ($this->yystack[$this->yyidx + -3]->minor == 'isset' || $this->yystack[$this->yyidx + -3]->minor == 'empty' || $this->yystack[$this->yyidx + -3]->minor == 'array' || is_callable($this->yystack[$this->yyidx + -3]->minor)) {\r
                                                                                                                                                                                        $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";\r
                                                                                                                                                                                    } else {\r
                                                        $this->compiler->trigger_template_error ("unknown function \"" . $this->yystack[$this->yyidx + -3]->minor . "\"");\r
                                                       }\r
                                                     }    }\r
-#line 2397 "smarty_internal_templateparser.php"\r
-#line 458 "smarty_internal_templateparser.y"\r
-    function yy_r150(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";    }\r
-#line 2400 "smarty_internal_templateparser.php"\r
-#line 462 "smarty_internal_templateparser.y"\r
-    function yy_r151(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2403 "smarty_internal_templateparser.php"\r
-#line 466 "smarty_internal_templateparser.y"\r
-    function yy_r153(){ return;    }\r
-#line 2406 "smarty_internal_templateparser.php"\r
-#line 471 "smarty_internal_templateparser.y"\r
-    function yy_r154(){ $this->_retvalue =  $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2409 "smarty_internal_templateparser.php"\r
-#line 476 "smarty_internal_templateparser.y"\r
-    function yy_r157(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')';     }\r
-#line 2412 "smarty_internal_templateparser.php"\r
+#line 2312 "smarty_internal_templateparser.php"\r
+#line 475 "smarty_internal_templateparser.y"\r
+    function yy_r137(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";    }\r
+#line 2315 "smarty_internal_templateparser.php"\r
 #line 479 "smarty_internal_templateparser.y"\r
-    function yy_r159(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -4]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -2]->minor .')'.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2415 "smarty_internal_templateparser.php"\r
+    function yy_r138(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2318 "smarty_internal_templateparser.php"\r
 #line 483 "smarty_internal_templateparser.y"\r
-    function yy_r161(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2418 "smarty_internal_templateparser.php"\r
-#line 485 "smarty_internal_templateparser.y"\r
-    function yy_r162(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2421 "smarty_internal_templateparser.php"\r
+    function yy_r140(){ return;    }\r
+#line 2321 "smarty_internal_templateparser.php"\r
+#line 488 "smarty_internal_templateparser.y"\r
+    function yy_r141(){ $this->_retvalue =  $this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2324 "smarty_internal_templateparser.php"\r
+#line 493 "smarty_internal_templateparser.y"\r
+    function yy_r144(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')';     }\r
+#line 2327 "smarty_internal_templateparser.php"\r
 #line 496 "smarty_internal_templateparser.y"\r
-    function yy_r163(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2424 "smarty_internal_templateparser.php"\r
+    function yy_r146(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -4]->minor .'\')->value;?>'; $this->_retvalue = '$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -2]->minor .')'.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2330 "smarty_internal_templateparser.php"\r
 #line 500 "smarty_internal_templateparser.y"\r
-    function yy_r165(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2427 "smarty_internal_templateparser.php"\r
-#line 501 "smarty_internal_templateparser.y"\r
-    function yy_r166(){$this->_retvalue = ',\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\r
-#line 2430 "smarty_internal_templateparser.php"\r
-#line 504 "smarty_internal_templateparser.y"\r
-    function yy_r167(){$this->_retvalue = '==';    }\r
-#line 2433 "smarty_internal_templateparser.php"\r
-#line 505 "smarty_internal_templateparser.y"\r
-    function yy_r168(){$this->_retvalue = '!=';    }\r
-#line 2436 "smarty_internal_templateparser.php"\r
-#line 506 "smarty_internal_templateparser.y"\r
-    function yy_r169(){$this->_retvalue = '>';    }\r
-#line 2439 "smarty_internal_templateparser.php"\r
-#line 507 "smarty_internal_templateparser.y"\r
-    function yy_r170(){$this->_retvalue = '<';    }\r
-#line 2442 "smarty_internal_templateparser.php"\r
-#line 508 "smarty_internal_templateparser.y"\r
-    function yy_r171(){$this->_retvalue = '>=';    }\r
-#line 2445 "smarty_internal_templateparser.php"\r
-#line 509 "smarty_internal_templateparser.y"\r
-    function yy_r172(){$this->_retvalue = '<=';    }\r
-#line 2448 "smarty_internal_templateparser.php"\r
-#line 510 "smarty_internal_templateparser.y"\r
-    function yy_r173(){$this->_retvalue = '===';    }\r
-#line 2451 "smarty_internal_templateparser.php"\r
-#line 511 "smarty_internal_templateparser.y"\r
-    function yy_r174(){$this->_retvalue = '!==';    }\r
-#line 2454 "smarty_internal_templateparser.php"\r
-#line 512 "smarty_internal_templateparser.y"\r
-    function yy_r175(){$this->_retvalue = '%';    }\r
-#line 2457 "smarty_internal_templateparser.php"\r
-#line 514 "smarty_internal_templateparser.y"\r
-    function yy_r176(){$this->_retvalue = '&&';    }\r
-#line 2460 "smarty_internal_templateparser.php"\r
-#line 515 "smarty_internal_templateparser.y"\r
-    function yy_r177(){$this->_retvalue = '||';    }\r
-#line 2463 "smarty_internal_templateparser.php"\r
-#line 516 "smarty_internal_templateparser.y"\r
-    function yy_r178(){$this->_retvalue = ' XOR ';    }\r
-#line 2466 "smarty_internal_templateparser.php"\r
+    function yy_r148(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2333 "smarty_internal_templateparser.php"\r
+#line 502 "smarty_internal_templateparser.y"\r
+    function yy_r149(){ $this->_retvalue = '$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2336 "smarty_internal_templateparser.php"\r
+#line 513 "smarty_internal_templateparser.y"\r
+    function yy_r150(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2339 "smarty_internal_templateparser.php"\r
+#line 517 "smarty_internal_templateparser.y"\r
+    function yy_r152(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2342 "smarty_internal_templateparser.php"\r
 #line 521 "smarty_internal_templateparser.y"\r
-    function yy_r179(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2469 "smarty_internal_templateparser.php"\r
+    function yy_r154(){$this->_retvalue = '==';    }\r
+#line 2345 "smarty_internal_templateparser.php"\r
+#line 522 "smarty_internal_templateparser.y"\r
+    function yy_r155(){$this->_retvalue = '!=';    }\r
+#line 2348 "smarty_internal_templateparser.php"\r
 #line 523 "smarty_internal_templateparser.y"\r
-    function yy_r181(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2472 "smarty_internal_templateparser.php"\r
+    function yy_r156(){$this->_retvalue = '>';    }\r
+#line 2351 "smarty_internal_templateparser.php"\r
 #line 524 "smarty_internal_templateparser.y"\r
-    function yy_r182(){ return;     }\r
-#line 2475 "smarty_internal_templateparser.php"\r
+    function yy_r157(){$this->_retvalue = '<';    }\r
+#line 2354 "smarty_internal_templateparser.php"\r
 #line 525 "smarty_internal_templateparser.y"\r
-    function yy_r183(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2478 "smarty_internal_templateparser.php"\r
+    function yy_r158(){$this->_retvalue = '>=';    }\r
+#line 2357 "smarty_internal_templateparser.php"\r
 #line 526 "smarty_internal_templateparser.y"\r
-    function yy_r184(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2481 "smarty_internal_templateparser.php"\r
+    function yy_r159(){$this->_retvalue = '<=';    }\r
+#line 2360 "smarty_internal_templateparser.php"\r
+#line 527 "smarty_internal_templateparser.y"\r
+    function yy_r160(){$this->_retvalue = '===';    }\r
+#line 2363 "smarty_internal_templateparser.php"\r
+#line 528 "smarty_internal_templateparser.y"\r
+    function yy_r161(){$this->_retvalue = '!==';    }\r
+#line 2366 "smarty_internal_templateparser.php"\r
+#line 529 "smarty_internal_templateparser.y"\r
+    function yy_r162(){$this->_retvalue = '%';    }\r
+#line 2369 "smarty_internal_templateparser.php"\r
+#line 531 "smarty_internal_templateparser.y"\r
+    function yy_r163(){$this->_retvalue = '&&';    }\r
+#line 2372 "smarty_internal_templateparser.php"\r
+#line 532 "smarty_internal_templateparser.y"\r
+    function yy_r164(){$this->_retvalue = '||';    }\r
+#line 2375 "smarty_internal_templateparser.php"\r
 #line 533 "smarty_internal_templateparser.y"\r
-    function yy_r186(){ $this->_retvalue = "''";     }\r
-#line 2484 "smarty_internal_templateparser.php"\r
-#line 534 "smarty_internal_templateparser.y"\r
-    function yy_r187(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();     }\r
-#line 2487 "smarty_internal_templateparser.php"\r
-#line 536 "smarty_internal_templateparser.y"\r
-    function yy_r188(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
-#line 2490 "smarty_internal_templateparser.php"\r
-#line 537 "smarty_internal_templateparser.y"\r
-    function yy_r189(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2493 "smarty_internal_templateparser.php"\r
-#line 539 "smarty_internal_templateparser.y"\r
-    function yy_r190(){ $this->_retvalue = new _smarty_code($this, $this->yystack[$this->yyidx + -1]->minor);     }\r
-#line 2496 "smarty_internal_templateparser.php"\r
+    function yy_r165(){$this->_retvalue = ' XOR ';    }\r
+#line 2378 "smarty_internal_templateparser.php"\r
+#line 538 "smarty_internal_templateparser.y"\r
+    function yy_r166(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 2381 "smarty_internal_templateparser.php"\r
+#line 540 "smarty_internal_templateparser.y"\r
+    function yy_r168(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;     }\r
+#line 2384 "smarty_internal_templateparser.php"\r
 #line 541 "smarty_internal_templateparser.y"\r
-    function yy_r192(){\r
-   $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->value');\r
-   $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor,"'"), null, true, false)->nocache;\r
+    function yy_r169(){ return;     }\r
+#line 2387 "smarty_internal_templateparser.php"\r
+#line 542 "smarty_internal_templateparser.y"\r
+    function yy_r170(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2390 "smarty_internal_templateparser.php"\r
+#line 543 "smarty_internal_templateparser.y"\r
+    function yy_r171(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2393 "smarty_internal_templateparser.php"\r
+#line 550 "smarty_internal_templateparser.y"\r
+    function yy_r173(){ $this->_retvalue = "''";     }\r
+#line 2396 "smarty_internal_templateparser.php"\r
+#line 551 "smarty_internal_templateparser.y"\r
+    function yy_r174(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();     }\r
+#line 2399 "smarty_internal_templateparser.php"\r
+#line 553 "smarty_internal_templateparser.y"\r
+    function yy_r175(){ $this->yystack[$this->yyidx + -1]->minor->append_subtree($this->yystack[$this->yyidx + 0]->minor); $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
+#line 2402 "smarty_internal_templateparser.php"\r
+#line 554 "smarty_internal_templateparser.y"\r
+    function yy_r176(){ $this->_retvalue = new _smarty_doublequoted($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
+#line 2405 "smarty_internal_templateparser.php"\r
+#line 556 "smarty_internal_templateparser.y"\r
+    function yy_r177(){ $this->_retvalue = new _smarty_code($this, $this->yystack[$this->yyidx + -1]->minor);     }\r
+#line 2408 "smarty_internal_templateparser.php"\r
+#line 558 "smarty_internal_templateparser.y"\r
+    function yy_r179(){if (isset($this->compiler->local_var["'".substr($this->yystack[$this->yyidx + 0]->minor,1)."'"])) {\r
+                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');\r
+                                                      } else {\r
+                                                       $this->_retvalue = new _smarty_code($this, '$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->value');\r
+                                                      }\r
+                                                      $this->compiler->tag_nocache = $this->compiler->tag_nocache | $this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor,"'"), null, true, false)->nocache;\r
       }\r
-#line 2502 "smarty_internal_templateparser.php"\r
-#line 546 "smarty_internal_templateparser.y"\r
-    function yy_r194(){ $this->_retvalue = new _smarty_code($this, '('.$this->yystack[$this->yyidx + -1]->minor.')');     }\r
-#line 2505 "smarty_internal_templateparser.php"\r
-#line 547 "smarty_internal_templateparser.y"\r
-    function yy_r195(){\r
+#line 2417 "smarty_internal_templateparser.php"\r
+#line 566 "smarty_internal_templateparser.y"\r
+    function yy_r181(){ $this->_retvalue = new _smarty_code($this, '('.$this->yystack[$this->yyidx + -1]->minor.')');     }\r
+#line 2420 "smarty_internal_templateparser.php"\r
+#line 567 "smarty_internal_templateparser.y"\r
+    function yy_r182(){\r
    $this->_retvalue = new _smarty_tag($this, $this->yystack[$this->yyidx + 0]->minor);\r
       }\r
-#line 2510 "smarty_internal_templateparser.php"\r
-#line 550 "smarty_internal_templateparser.y"\r
-    function yy_r196(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
-#line 2513 "smarty_internal_templateparser.php"\r
+#line 2425 "smarty_internal_templateparser.php"\r
+#line 570 "smarty_internal_templateparser.y"\r
+    function yy_r183(){ $this->_retvalue = new _smarty_dq_content($this, $this->yystack[$this->yyidx + 0]->minor);     }\r
+#line 2428 "smarty_internal_templateparser.php"\r
 \r
     private $_retvalue;\r
 \r
@@ -2572,12 +2487,12 @@ static public $yy_action = array(
 \r
     function yy_syntax_error($yymajor, $TOKEN)\r
     {\r
-#line 72 "smarty_internal_templateparser.y"\r
+#line 73 "smarty_internal_templateparser.y"\r
 \r
     $this->internalError = true;\r
     $this->yymajor = $yymajor;\r
     $this->compiler->trigger_template_error();\r
-#line 2576 "smarty_internal_templateparser.php"\r
+#line 2491 "smarty_internal_templateparser.php"\r
     }\r
 \r
     function yy_accept()\r
@@ -2588,13 +2503,13 @@ static public $yy_action = array(
         while ($this->yyidx >= 0) {\r
             $stack = $this->yy_pop_parser_stack();\r
         }\r
-#line 64 "smarty_internal_templateparser.y"\r
+#line 65 "smarty_internal_templateparser.y"\r
 \r
     $this->successful = !$this->internalError;\r
     $this->internalError = false;\r
     $this->retvalue = $this->_retvalue;\r
     //echo $this->retvalue."\n\n";\r
-#line 2594 "smarty_internal_templateparser.php"\r
+#line 2509 "smarty_internal_templateparser.php"\r
     }\r
 \r
     function doParse($yymajor, $yytokenvalue)\r
index abf7e1b4eff025a4afcbefa29490fb5a7ac2e1b9..9949e7a3cb485aeddd84c229e9b6102afead0e62 100644 (file)
@@ -1,66 +1,56 @@
 <?php
 
 /**
-* Project:     Smarty: the PHP compiling template engine
-* File:        smarty_internal_utility.php
-* SVN:         $Id: $
-* 
-* This library is free software; you can redistribute it and/or
-* modify it under the terms of the GNU Lesser General Public
-* License as published by the Free Software Foundation; either
-* version 2.1 of the License, or (at your option) any later version.
-* 
-* This library is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-* Lesser General Public License for more details.
-* 
-* You should have received a copy of the GNU Lesser General Public
-* License along with this library; if not, write to the Free Software
-* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-* 
-* For questions, help, comments, discussion, etc., please join the
-* Smarty mailing list. Send a blank e-mail to
-* smarty-discussion-subscribe@googlegroups.com
-* 
-* @link http://www.smarty.net/
-* @copyright 2008 New Digital Group, Inc.
-* @author Monte Ohrt <monte at ohrt dot com> 
-* @author Uwe Tews 
-* @package Smarty
-* @subpackage PluginsInternal
-* @version 3-SVN$Rev: 3286 $
-*/
+ * Project:     Smarty: the PHP compiling template engine
+ * File:        smarty_internal_utility.php
+ * SVN:         $Id: $
+ 
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ 
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ 
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ 
+ * For questions, help, comments, discussion, etc., please join the
+ * Smarty mailing list. Send a blank e-mail to
+ * smarty-discussion-subscribe@googlegroups.com
+ 
+ * @link http://www.smarty.net/
+ * @copyright 2008 New Digital Group, Inc.
+ * @author Monte Ohrt <monte at ohrt dot com> 
+ * @author Uwe Tews 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @version 3-SVN$Rev: 3286 $
+ */
 
 class Smarty_Internal_Utility {
-  
     protected $smarty;
 
-    function __construct($smarty) {
-      $this->smarty = $smarty;
-    }
-    
+    function __construct($smarty)
+    {
+        $this->smarty = $smarty;
+    } 
+
     /**
-    * Compile all template files
-    * 
-    * @param string $extension file extension
-    * @param bool $force_compile force all to recompile
-    * @param int $time_limit
-    * @param int $max_errors
-    * @return integer number of template files recompiled
-    */
+     * Compile all template files
+     
+     * @param string $extension file extension
+     * @param bool $force_compile force all to recompile
+     * @param int $time_limit 
+     * @param int $max_errors 
+     * @return integer number of template files recompiled
+     */
     function compileAllTemplates($extention = '.tpl', $force_compile = false, $time_limit = 0, $max_errors = null)
-    {
-        function _get_time()
-        {
-            $_mtime = microtime();
-            $_mtime = explode(" ", $_mtime);
-            return (double)($_mtime[1]) + (double)($_mtime[0]);
-        } 
-        // set default directory
-        if ($dir_name === null) {
-            $dir_name = $this->smarty->template_dir;
-        } 
+    { 
         // switch off time limit
         if (function_exists('set_time_limit')) {
             @set_time_limit($time_limit);
@@ -79,20 +69,26 @@ class Smarty_Internal_Utility {
                 if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
                     $_template_file = $_file;
                 } else {
-                    $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . '\\' . $_file;
+                    $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
                 } 
                 echo '<br>', $_dir, '---', $_template_file;
                 flush();
-                $_start_time = _get_time();
+                $_start_time = $this->_get_time();
                 try {
                     $_tpl = $this->smarty->createTemplate($_template_file);
-                    $_tpl->getCompiledTemplate();
+                    if ($_tpl->mustCompile()) {
+                        $_tpl->compileTemplateSource();
+                        echo ' compiled in  ', $this->_get_time() - $_start_time, ' seconds';
+                        flush();
+                    } else {
+                        echo ' is up to date';
+                        flush();
+                    } 
                 } 
                 catch (Exception $e) {
                     echo 'Error: ', $e->getMessage(), "<br><br>";
                     $_error_count++;
                 } 
-                echo ' done in  ', _get_time() - $_start_time, ' seconds';
                 if ($max_errors !== null && $_error_count == $max_errors) {
                     echo '<br><br>too many errors';
                     exit();
@@ -103,16 +99,74 @@ class Smarty_Internal_Utility {
     } 
 
     /**
-    * Delete compiled template file
-    * 
-    * @param string $resource_name template name
-    * @param string $compile_id compile id
-    * @param integer $exp_time expiration time
-    * @return integer number of template files deleted
-    */
+     * Compile all config files
+     * 
+     * @param string $extension file extension
+     * @param bool $force_compile force all to recompile
+     * @param int $time_limit 
+     * @param int $max_errors 
+     * @return integer number of template files recompiled
+     */
+    function compileAllConfig($extention = '.conf', $force_compile = false, $time_limit = 0, $max_errors = null)
+    { 
+        // switch off time limit
+        if (function_exists('set_time_limit')) {
+            @set_time_limit($time_limit);
+        } 
+        $this->smarty->force_compile = $force_compile;
+        $_count = 0;
+        $_error_count = 0; 
+        // loop over array of template directories
+        foreach((array)$this->smarty->config_dir as $_dir) {
+            $_compileDirs = new RecursiveDirectoryIterator($_dir);
+            $_compile = new RecursiveIteratorIterator($_compileDirs);
+            foreach ($_compile as $_fileinfo) {
+                if (strpos($_fileinfo, '.svn') !== false) continue;
+                $_file = $_fileinfo->getFilename();
+                if (!substr_compare($_file, $extention, - strlen($extention)) == 0) continue;
+                if ($_fileinfo->getPath() == substr($_dir, 0, -1)) {
+                    $_config_file = $_file;
+                } else {
+                    $_config_file = substr($_fileinfo->getPath(), strlen($_dir)) . DS . $_file;
+                } 
+                echo '<br>', $_dir, '---', $_config_file;
+                flush();
+                $_start_time = $this->_get_time();
+                try {
+                    $_config = new Smarty_Internal_Config($_config_file, $this->smarty);
+                    if ($_config->mustCompile()) {
+                        $_config->compileConfigSource();
+                        echo ' compiled in  ', $this->_get_time() - $_start_time, ' seconds';
+                        flush();
+                    } else {
+                        echo ' is up to date';
+                        flush();
+                    } 
+                } 
+                catch (Exception $e) {
+                    echo 'Error: ', $e->getMessage(), "<br><br>";
+                    $_error_count++;
+                } 
+                if ($max_errors !== null && $_error_count == $max_errors) {
+                    echo '<br><br>too many errors';
+                    exit();
+                } 
+            } 
+        } 
+        return $_count;
+    } 
+
+    /**
+     * Delete compiled template file
+     * 
+     * @param string $resource_name template name
+     * @param string $compile_id compile id
+     * @param integer $exp_time expiration time
+     * @return integer number of template files deleted
+     */
     function clearCompiledTemplate($resource_name = null, $compile_id = null, $exp_time = null)
     {
-        $_compile_id =  isset($compile_id) ? preg_replace('![^\w\|]+!','_',$compile_id) : null;
+        $_compile_id = isset($compile_id) ? preg_replace('![^\w\|]+!', '_', $compile_id) : null;
         $_dir_sep = $this->smarty->use_sub_dirs ? DS : '^';
         if (isset($resource_name)) {
             $_resource_part_1 = $resource_name . '.php';
@@ -152,16 +206,16 @@ class Smarty_Internal_Utility {
             } 
         } 
         return $_count;
-    }
-    
+    } 
+
     function testInstall()
     {
         echo "<PRE>\n";
-    
+
         echo "Smarty Installation test...\n";
-    
+
         echo "Testing template directory...\n";
-    
+
         foreach((array)$this->smarty->template_dir as $template_dir) {
             if (!is_dir($template_dir))
                 echo "FAILED: $template_dir is not a directory.\n";
@@ -170,20 +224,20 @@ class Smarty_Internal_Utility {
             else
                 echo "$template_dir is OK.\n";
         } 
-    
+
         echo "Testing compile directory...\n";
-    
+
         if (!is_dir($this->smarty->compile_dir))
-            echo "FAILED: $this->smarty->compile_dir is not a directory.\n";
+            echo "FAILED: {$this->smarty->compile_dir} is not a directory.\n";
         elseif (!is_readable($this->smarty->compile_dir))
-            echo "FAILED: $this->smarty->compile_dir is not readable.\n";
+            echo "FAILED: {$this->smarty->compile_dir} is not readable.\n";
         elseif (!is_writable($this->smarty->compile_dir))
-            echo "FAILED: $this->smarty->compile_dir is not writable.\n";
+            echo "FAILED: {$this->smarty->compile_dir} is not writable.\n";
         else
             echo "{$this->smarty->compile_dir} is OK.\n";
-    
+
         echo "Testing plugins directory...\n";
-    
+
         foreach((array)$this->smarty->plugins_dir as $plugin_dir) {
             if (!is_dir($plugin_dir))
                 echo "FAILED: $plugin_dir is not a directory.\n";
@@ -192,32 +246,42 @@ class Smarty_Internal_Utility {
             else
                 echo "$plugin_dir is OK.\n";
         } 
-    
+
         echo "Testing cache directory...\n";
-    
+
         if (!is_dir($this->smarty->cache_dir))
-            echo "FAILED: $this->smarty->cache_dir is not a directory.\n";
+            echo "FAILED: {$this->smarty->cache_dir} is not a directory.\n";
         elseif (!is_readable($this->smarty->cache_dir))
-            echo "FAILED: $this->smarty->cache_dir is not readable.\n";
+            echo "FAILED: {$this->smarty->cache_dir} is not readable.\n";
         elseif (!is_writable($this->smarty->cache_dir))
-            echo "FAILED: $this->smarty->cache_dir is not writable.\n";
+            echo "FAILED: {$this->smarty->cache_dir} is not writable.\n";
         else
             echo "{$this->smarty->cache_dir} is OK.\n";
-    
+
         echo "Testing configs directory...\n";
-    
+
         if (!is_dir($this->smarty->config_dir))
-            echo "FAILED: $this->smarty->config_dir is not a directory.\n";
+            echo "FAILED: {$this->smarty->config_dir} is not a directory.\n";
         elseif (!is_readable($this->smarty->config_dir))
-            echo "FAILED: $this->smarty->config_dir is not readable.\n";
+            echo "FAILED: {$this->smarty->config_dir} is not readable.\n";
         else
             echo "{$this->smarty->config_dir} is OK.\n";
-    
+
         echo "Tests complete.\n";
-    
+
         echo "</PRE>\n";
-    
+
         return true;
     } 
-    
+    /**
+     * Get Micro Time
+     * 
+     * @return double micro time
+     */
+    function _get_time()
+    {
+        $_mtime = microtime();
+        $_mtime = explode(" ", $_mtime);
+        return (double)($_mtime[1]) + (double)($_mtime[0]);
+    } 
 }