Code

Updated smarty
authorcajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 17 Mar 2010 14:33:52 +0000 (14:33 +0000)
committercajus <cajus@594d385d-05f5-0310-b6e9-bd551577e9d8>
Wed, 17 Mar 2010 14:33:52 +0000 (14:33 +0000)
git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@16778 594d385d-05f5-0310-b6e9-bd551577e9d8

32 files changed:
gosa-core/include/smarty/Smarty.class.php
gosa-core/include/smarty/plugins/modifier.escape.php
gosa-core/include/smarty/plugins/modifier.truncate.php
gosa-core/include/smarty/plugins/variablefilter.htmlspecialchars.php
gosa-core/include/smarty/sysplugins/smarty_internal_cache.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_cacheresource_file.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_block.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_extends.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_function_plugin.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_block_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_object_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_block.php
gosa-core/include/smarty/sysplugins/smarty_internal_compile_private_registered_function.php
gosa-core/include/smarty/sysplugins/smarty_internal_data.php
gosa-core/include/smarty/sysplugins/smarty_internal_filter_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_function_call_handler.php
gosa-core/include/smarty/sysplugins/smarty_internal_parsetree.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_register.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_resource_extends.php
gosa-core/include/smarty/sysplugins/smarty_internal_resource_registered.php
gosa-core/include/smarty/sysplugins/smarty_internal_security_handler.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_unregister.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_utility.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php [new file with mode: 0644]
gosa-core/include/smarty/sysplugins/smarty_security.php

index 6f28857311f6063262a09a46f4f2f370d34d8c90..2d2ed357edd0c3efc8035c5ff21d67577c91021a 100644 (file)
@@ -1,55 +1,55 @@
 <?php
 
 /**
-* Project:     Smarty: the PHP compiling template engine
-* File:        Smarty.class.php
-* SVN:         $Id: Smarty.class.php 3420 2009-12-29 20:12:11Z Uwe.Tews $
-* 
-* 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
-* @version 3-SVN$Rev: 3286 $
-*/
+ * 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 $
+ 
+ * 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
+ * @version 3-SVN$Rev: 3286 $
+ */
 
 /**
-* define shorthand directory separator constant
-*/
+ * define shorthand directory separator constant
+ */
 if (!defined('DS')) {
     define('DS', DIRECTORY_SEPARATOR);
 } 
 
 /**
-* set SMARTY_DIR to absolute path to Smarty library files.
-* Sets SMARTY_DIR only if user application has not already defined it.
-*/
+ * set SMARTY_DIR to absolute path to Smarty library files.
+ * Sets SMARTY_DIR only if user application has not already defined it.
+ */
 if (!defined('SMARTY_DIR')) {
     define('SMARTY_DIR', dirname(__FILE__) . DS);
 } 
 
 /**
-* set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
-* Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it.
-*/
+ * set SMARTY_SYSPLUGINS_DIR to absolute path to Smarty internal plugins.
+ * Sets SMARTY_SYSPLUGINS_DIR only if user application has not already defined it.
+ */
 if (!defined('SMARTY_SYSPLUGINS_DIR')) {
     define('SMARTY_SYSPLUGINS_DIR', SMARTY_DIR . 'sysplugins' . DS);
 } 
@@ -64,32 +64,32 @@ if (!defined('SMARTY_RESOURCE_DATE_FORMAT')) {
 } 
 
 /**
-* define variable scopes
-*/
+ * define variable scopes
+ */
 define('SMARTY_LOCAL_SCOPE', 0);
 define('SMARTY_PARENT_SCOPE', 1);
 define('SMARTY_ROOT_SCOPE', 2);
 define('SMARTY_GLOBAL_SCOPE', 3);
 
 /**
-* define caching modes
-*/
+ * define caching modes
+ */
 define('SMARTY_CACHING_OFF', 0);
 define('SMARTY_CACHING_LIFETIME_CURRENT', 1);
 define('SMARTY_CACHING_LIFETIME_SAVED', 2);
 
 /**
-* This determines how Smarty handles "<?php ... ?>" tags in templates.
-* possible values:
-*/
+ * This determines how Smarty handles "<?php ... ?>" tags in templates.
+ * possible values:
+ */
 define('SMARTY_PHP_PASSTHRU', 0); //-> print tags as plain text
 define('SMARTY_PHP_QUOTE', 1); //-> escape tags as entities
 define('SMARTY_PHP_REMOVE', 2); //-> escape tags as entities
 define('SMARTY_PHP_ALLOW', 3); //-> escape tags as entities
 
 /**
-* register the class autoloader
-*/
+ * register the class autoloader
+ */
 if (!defined('SMARTY_SPL_AUTOLOAD')) {
     define('SMARTY_SPL_AUTOLOAD', 0);
 } 
@@ -104,11 +104,11 @@ if (SMARTY_SPL_AUTOLOAD && set_include_path(get_include_path() . PATH_SEPARATOR
 } 
 
 /**
-* This is the main Smarty class
-*/
+ * This is the main Smarty class
+ */
 class Smarty extends Smarty_Internal_Data {
     // smarty version
-    const SMARTY_VERSION = 'Smarty3-b7'; 
+    const SMARTY_VERSION = 'Smarty3-b8'; 
     // auto literal on delimiters with whitspace
     public $auto_literal = true; 
     // display error on not assigned variables
@@ -167,7 +167,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
@@ -184,6 +184,10 @@ class Smarty extends Smarty_Internal_Data {
     public $caching_type = 'file'; 
     // internal cache resource types
     public $cache_resource_types = array('file'); 
+    // internal cache resource objects
+    public $cache_resource_objects = array(); 
+    // internal config properties
+    public $properties = array(); 
     // config type
     public $default_config_type = 'file'; 
     // exception handler: array('ExceptionClass','ExceptionMethod');
@@ -204,6 +208,8 @@ class Smarty extends Smarty_Internal_Data {
     public $autoload_filters = array(); 
     // status of filter on variable output
     public $variable_filter = true; 
+    // default modifier
+    public $default_modifiers = array(); 
     // global internal smarty  vars
     public $_smarty_vars = array(); 
     // start time for execution time calculation
@@ -213,12 +219,21 @@ class Smarty extends Smarty_Internal_Data {
     // default dir permissions
     public $_dir_perms = 0771; 
     // smarty object reference
-    public $smarty = null;
+    public $smarty = null; 
+    // block data at template inheritance
+    public $block_data = array(); 
+    // block tag hierarchy
+    public $_tag_stack = array(); 
+    // plugins
+    public $_plugins = array(); 
+    // generate deprecated function call notices?
+    public $deprecation_notices = true;
 
     /**
-    * Class constructor, initializes basic smarty properties
-    */
-    public function __construct() {
+     * Class constructor, initializes basic smarty properties
+     */
+    public function __construct()
+    { 
         // self reference needed by other classes methods
         $this->smarty = $this;
 
@@ -228,7 +243,7 @@ class Smarty extends Smarty_Internal_Data {
         $this->start_time = $this->_get_time(); 
         // set exception handler
         if (!empty($this->exception_handler))
-        set_exception_handler($this->exception_handler); 
+            set_exception_handler($this->exception_handler); 
         // set default dirs
         $this->template_dir = array('.' . DS . 'templates' . DS);
         $this->compile_dir = '.' . DS . 'templates_c' . DS;
@@ -239,8 +254,7 @@ class Smarty extends Smarty_Internal_Data {
         if (!$this->debugging && $this->debugging_ctrl == 'URL') {
             if (isset($_SERVER['QUERY_STRING'])) {
                 $_query_string = $_SERVER['QUERY_STRING'];
-            } 
-            else {
+            } else {
                 $_query_string = '';
             } 
             if (false !== strpos($_query_string, $this->smarty_debug_id)) {
@@ -248,45 +262,46 @@ class Smarty extends Smarty_Internal_Data {
                     // enable debugging for this browser session
                     setcookie('SMARTY_DEBUG', true);
                     $this->debugging = true;
-                } 
-                elseif (false !== strpos($_query_string, $this->smarty_debug_id . '=off')) {
+                } elseif (false !== strpos($_query_string, $this->smarty_debug_id . '=off')) {
                     // disable debugging for this browser session
                     setcookie('SMARTY_DEBUG', false);
                     $this->debugging = false;
-                } 
-                else {
+                } else {
                     // enable debugging for this page
                     $this->debugging = true;
                 } 
-            } 
-            else {
+            } else {
                 if (isset($_COOKIE['SMARTY_DEBUG'])) {
                     $this->debugging = true;
                 } 
             } 
         } 
-        $this->assign_global('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
+        if (isset($_SERVER['SCRIPT_NAME'])) {
+            $this->assignGlobal('SCRIPT_NAME', $_SERVER['SCRIPT_NAME']);
+        } 
     } 
 
     /**
-    * Class destructor
-    */
-    public function __destruct() {
+     * Class destructor
+     */
+    public function __destruct()
+    { 
         // restore to previous exception handler, if any
         if (!empty($this->exception_handler))
-        restore_exception_handler();
+            restore_exception_handler();
     } 
 
     /**
-    * fetches a rendered Smarty template
-    * 
-    * @param string $template the resource handle of the template file or template object
-    * @param mixed $cache_id cache id to be used with this template
-    * @param mixed $compile_id compile id to be used with this template
-    * @param object $ |null $parent next higher level of Smarty variables
-    * @return string rendered template output
-    */
-    public function fetch($template, $cache_id = null, $compile_id = null, $parent = null) {
+     * fetches a rendered Smarty template
+     * 
+     * @param string $template the resource handle of the template file or template object
+     * @param mixed $cache_id cache id to be used with this template
+     * @param mixed $compile_id compile id to be used with this template
+     * @param object $ |null $parent next higher level of Smarty variables
+     * @return string rendered template output
+     */
+    public function fetch($template, $cache_id = null, $compile_id = null, $parent = null, $display = false)
+    {
         if (is_object($cache_id)) {
             $parent = $cache_id;
             $cache_id = null;
@@ -300,45 +315,74 @@ class Smarty extends Smarty_Internal_Data {
         $_template = $this->createTemplate ($template, $cache_id, $compile_id, $parent);
         $_smarty_old_error_level = $this->debugging ? error_reporting() : error_reporting(isset($this->error_reporting)
             ? $this->error_reporting : error_reporting() &~E_NOTICE); 
+        // obtain data for cache modified check
+        if ($this->cache_modified_check && $this->caching && $display) {
+            $_isCached = $_template->isCached() && !$_template->has_nocache_code;
+            if ($_isCached) {
+                $_gmt_mtime = gmdate('D, d M Y H:i:s', $_template->getCachedTimestamp()) . ' GMT';
+            } else {
+                $_gmt_mtime = '';
+            } 
+        } 
         // return redered template
         if (isset($this->autoload_filters['output']) || isset($this->registered_filters['output'])) {
             $_output = Smarty_Internal_Filter_Handler::runFilter('output', $_template->getRenderedTemplate(), $this);
-        } 
-        else {
+        } else {
             $_output = $_template->getRenderedTemplate();
         } 
         $_template->rendered_content = null;
-        error_reporting($_smarty_old_error_level);
-        return $_output;
+        error_reporting($_smarty_old_error_level); 
+        // display or fetch
+        if ($display) {
+            if ($this->caching && $this->cache_modified_check) {
+                $_last_modified_date = @substr($_SERVER['HTTP_IF_MODIFIED_SINCE'], 0, strpos($_SERVER['HTTP_IF_MODIFIED_SINCE'], 'GMT') + 3);
+                if ($_isCached && $_gmt_mtime == $_last_modified_date) {
+                    if (php_sapi_name() == 'cgi')
+                        header('Status: 304 Not Modified');
+                    else
+                        header('HTTP/1.1 304 Not Modified');
+                } else {
+                    header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $_template->getCachedTimestamp()) . ' GMT');
+                    echo $_output;
+                } 
+            } else {
+                echo $_output;
+            } 
+            // debug output
+            if ($this->debugging) {
+                Smarty_Internal_Debug::display_debug($this);
+            } 
+            return;
+        } else {
+          // return fetched content
+            return $_output;
+        } 
     } 
 
     /**
-    * displays a Smarty template
-    * 
-    * @param string $ |object $template the resource handle of the template file  or template object
-    * @param mixed $cache_id cache id to be used with this template
-    * @param mixed $compile_id compile id to be used with this template
-    * @param object $parent next higher level of Smarty variables
-    */
-    public function display($template, $cache_id = null, $compile_id = null, $parent = null) {
+     * displays a Smarty template
+     * 
+     * @param string $ |object $template the resource handle of the template file  or template object
+     * @param mixed $cache_id cache id to be used with this template
+     * @param mixed $compile_id compile id to be used with this template
+     * @param object $parent next higher level of Smarty variables
+     */
+    public function display($template, $cache_id = null, $compile_id = null, $parent = null)
+    { 
         // display template
-        echo $this->fetch ($template, $cache_id, $compile_id, $parent); 
-        // debug output
-        if ($this->debugging) {
-            Smarty_Internal_Debug::display_debug($this);
-        } 
-        return true;
+        $this->fetch ($template, $cache_id, $compile_id, $parent, true);
     } 
 
     /**
-    * test if cache i valid
-    * 
-    * @param string $ |object $template the resource handle of the template file or template object
-    * @param mixed $cache_id cache id to be used with this template
-    * @param mixed $compile_id compile id to be used with this template
-    * @return boolean cache status
-    */
-    public function is_cached($template, $cache_id = null, $compile_id = null) {
+     * test if cache i valid
+     * 
+     * @param string $ |object $template the resource handle of the template file or template object
+     * @param mixed $cache_id cache id to be used with this template
+     * @param mixed $compile_id compile id to be used with this template
+     * @return boolean cache status
+     */
+    public function isCached($template, $cache_id = null, $compile_id = null)
+    {
         if (!($template instanceof $this->template_class)) {
             $template = $this->createTemplate ($template, $cache_id, $compile_id, $this);
         } 
@@ -347,84 +391,134 @@ class Smarty extends Smarty_Internal_Data {
     } 
 
     /**
-    * Loads security class and enables security
-    */
-    public function enableSecurity() {
+     * creates a data object
+     * 
+     * @param object $parent next higher level of Smarty variables
+     * @returns object data object
+     */
+    public function createData($parent = null)
+    {
+        return new Smarty_Data($parent, $this);
+    } 
+
+    /**
+     * creates a template object
+     * 
+     * @param string $template the resource handle of the template file
+     * @param object $parent next higher level of Smarty variables
+     * @param mixed $cache_id cache id to be used with this template
+     * @param mixed $compile_id compile id to be used with this template
+     * @returns object template object
+     */
+    public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null)
+    {
+        if (is_object($cache_id) || is_array($cache_id)) {
+            $parent = $cache_id;
+            $cache_id = null;
+        } 
+        if (is_array($parent)) {
+            $data = $parent;
+            $parent = null;
+        } else {
+            $data = null;
+        } 
+        if (!is_object($template)) {
+            // we got a template resource
+            // already in template cache?
+            $_templateId = crc32($template . $cache_id . $compile_id);
+            if (isset($this->template_objects[$_templateId]) && $this->caching) {
+                // return cached template object
+                $tpl = $this->template_objects[$_templateId];
+            } else {
+                // create new template object
+                $tpl = new $this->template_class($template, $this, $parent, $cache_id, $compile_id);
+            } 
+        } else {
+            // just return a copy of template class
+            $tpl = $template;
+        } 
+        // fill data if present
+        if (is_array($data)) {
+            // set up variable values
+            foreach ($data as $_key => $_val) {
+                $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
+            } 
+        } 
+        return $tpl;
+    } 
+
+    /**
+     * Loads security class and enables security
+     */
+    public function enableSecurity()
+    {
         if (isset($this->security_class)) {
             $this->security_policy = new $this->security_class;
             $this->security_handler = new Smarty_Internal_Security_Handler($this);
             $this->security = true;
-        } 
-        else {
+        } else {
             throw new Exception('Property security_class is not defined');
         } 
     } 
 
     /**
-    * Set template directory
-    * 
-    * @param string $ |array $template_dir folder(s) of template sorces
-    */
-    public function setTemplateDir($template_dir) {
+     * Disable security
+     */
+    public function disableSecurity()
+    {
+        $this->security = true;
+    } 
+
+    /**
+     * Set template directory
+     * 
+     * @param string $ |array $template_dir folder(s) of template sorces
+     */
+    public function setTemplateDir($template_dir)
+    {
         $this->template_dir = (array)$template_dir;
         return;
     } 
+
     /**
-    * Adds template directory(s) to existing ones
-    * 
-    * @param string $ |array $template_dir folder(s) of template sources
-    */
-    public function addTemplateDir($template_dir) {
+     * Adds template directory(s) to existing ones
+     * 
+     * @param string $ |array $template_dir folder(s) of template sources
+     */
+    public function addTemplateDir($template_dir)
+    {
         $this->template_dir = array_merge((array)$this->template_dir, (array)$template_dir);
         $this->template_dir = array_unique($this->template_dir);
         return;
     } 
+
     /**
-    * Set compile directory
-    * 
-    * @param string $compile_dir folder of compiled template sources
-    */
-    public function setCompileDir($compile_dir) {
-        $this->compile_dir = $compile_dir;
-        return;
-    } 
-    /**
-    * Set cache directory
-    * 
-    * @param string $cache_dir folder of cache files
-    */
-    public function setCacheDir($cache_dir) {
-        $this->cache_dir = $cache_dir;
-        return;
-    } 
-    /**
-    * Enable Caching
-    */
-    public function enableCaching() {
-        $this->caching = SMARTY_CACHING_LIFETIME_CURRENT;
-        return;
-    } 
-    /**
-    * Set caching life time
-    * 
-    * @param integer $lifetime lifetime of cached file in seconds
-    */
-    public function setCacheLifetime($lifetime) {
-        $this->cache_lifetime = $lifetime;
-        return;
+     * Check if a template resource exists
+     * 
+     * @param string $resource_name template name
+     * @return boolean status
+     */
+    function templateExists($resource_name)
+    { 
+        // create template object
+        $tpl = new $this->template_class($resource_name, $this); 
+        // check if it does exists
+        return $tpl->isExisting();
     } 
+
     /**
-    * Takes unknown classes and loads plugin files for them
-    * class name format: Smarty_PluginType_PluginName
-    * plugin filename format: plugintype.pluginname.php
-    * 
-    * @param string $plugin_name class plugin name to load
-    * @return string|boolean filepath of loaded file or false
-    */
-    public function loadPlugin($plugin_name, $check = true) {
+     * Takes unknown classes and loads plugin files for them
+     * class name format: Smarty_PluginType_PluginName
+     * plugin filename format: plugintype.pluginname.php
+     * 
+     * @param string $plugin_name class plugin name to load
+     * @return string |boolean filepath of loaded file or false
+     */
+    public function loadPlugin($plugin_name, $check = true)
+    { 
         // if function or class exists, exit silently (already loaded)
         if ($check && (is_callable($plugin_name) || class_exists($plugin_name, false)))
-        return true; 
+            return true; 
         // Plugin name is expected to be: Smarty_[Type]_[Name]
         $_plugin_name = strtolower($plugin_name);
         $_name_parts = explode('_', $_plugin_name, 3); 
@@ -439,8 +533,7 @@ class Smarty extends Smarty_Internal_Data {
             if (file_exists($file)) {
                 require_once($file);
                 return $file;
-            } 
-            else {
+            } else {
                 return false;
             } 
         } 
@@ -462,64 +555,204 @@ class Smarty extends Smarty_Internal_Data {
     } 
 
     /**
-    * Sets the exception handler for Smarty.
-    * 
-    * @param mixed $handler function name or array with object/method names
-    * @return string previous exception handler
-    */
-    public function setExceptionHandler($handler) {
+     * load a filter of specified type and name
+     * 
+     * @param string $type filter type
+     * @param string $name filter name
+     * @return bool 
+     */
+    function loadFilter($type, $name)
+    {
+        $_plugin = "smarty_{$type}filter_{$name}";
+        $_filter_name = $_plugin;
+        if ($this->loadPlugin($_plugin)) {
+            if (class_exists($_plugin, false)) {
+                $_plugin = array($_plugin, 'execute');
+            } 
+            if (is_callable($_plugin)) {
+                return $this->registered_filters[$type][$_filter_name] = $_plugin;
+            } 
+        } 
+        throw new Exception("{$type}filter \"{$name}\" not callable");
+        return false;
+    } 
+
+    /**
+     * Sets the exception handler for Smarty.
+     * 
+     * @param mixed $handler function name or array with object/method names
+     * @return string previous exception handler
+     */
+    public function setExceptionHandler($handler)
+    {
         $this->exception_handler = $handler;
         return set_exception_handler($handler);
     } 
 
     /**
-    * Loads cache resource.
-    * 
-    * @return object of cache resource
-    */
-    public function loadCacheResource($type = null) {
-        if (!isset($type)) {
-            $type = $this->caching_type;
-        } 
-        // already loaded?
-        if (isset($this->cache_resource_objects[$type])) {
-            return $this->cache_resource_objects[$type];
-        } 
-        if (in_array($type, $this->cache_resource_types)) {
-            $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
-            return $this->cache_resource_objects[$type] = new $cache_resource_class($this);
+     * trigger Smarty error
+     * 
+     * @param string $error_msg 
+     * @param integer $error_type 
+     */
+    public function trigger_error($error_msg, $error_type = E_USER_WARNING)
+    {
+        throw new Exception("Smarty error: $error_msg");
+    } 
+
+    /**
+     * Return internal filter name
+     * 
+     * @param callback $function_name 
+     */
+    public function _get_filter_name($function_name)
+    {
+        if (is_array($function_name)) {
+            $_class_name = (is_object($function_name[0]) ?
+                get_class($function_name[0]) : $function_name[0]);
+            return $_class_name . '_' . $function_name[1];
+        } else {
+            return $function_name;
         } 
-        else {
-            // try plugins dir
-            $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type);
-            if ($this->loadPlugin($cache_resource_class)) {
-                return $this->cache_resource_objects[$type] = new $cache_resource_class($this);
+    } 
+
+    /**
+     * Adds directory of plugin files
+     * 
+     * @param object $smarty 
+     * @param string $ |array $ plugins folder
+     * @return 
+     */
+    function addPluginsDir($plugins_dir)
+    {
+        $this->plugins_dir = array_merge((array)$this->plugins_dir, (array)$plugins_dir);
+        $this->plugins_dir = array_unique($this->plugins_dir);
+        return;
+    } 
+
+    /**
+     * Returns a single or all global  variables
+     * 
+     * @param object $smarty 
+     * @param string $varname variable name or null
+     * @return string variable value or or array of variables
+     */
+    function getGlobal($varname = null)
+    {
+        if (isset($varname)) {
+            if (isset($this->global_tpl_vars[$varname])) {
+                return $this->global_tpl_vars[$varname]->value;
+            } else {
+                return '';
             } 
-            else {
-                throw new Exception("Unable to load cache resource '{$type}'");
+        } else {
+            $_result = array();
+            foreach ($this->global_tpl_vars AS $key => $var) {
+                $_result[$key] = $var->value;
             } 
+            return $_result;
         } 
     } 
 
     /**
-    * trigger Smarty error
-    * 
-    * @param string $error_msg 
-    * @param integer $error_type 
-    */
-    public function trigger_error($error_msg, $error_type = E_USER_WARNING) {
-        throw new Exception("Smarty error: $error_msg");
+     * return a reference to a registered object
+     * 
+     * @param string $name object name
+     * @return object 
+     */
+    function getRegisteredObject($name)
+    {
+        if (!isset($this->registered_objects[$name]))
+            throw new Exception("'$name' is not a registered object");
+
+        if (!is_object($this->registered_objects[$name][0]))
+            throw new Exception("registered '$name' is not an object");
+
+        return $this->registered_objects[$name][0];
     } 
 
     /**
-    * 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) {
+     * return name of debugging template
+     * 
+     * @return string 
+     */
+    function getDebugTemplate()
+    {
+        return $this->debug_tpl;
+    } 
+
+    /**
+     * set the debug template
+     * 
+     * @param string $tpl_name 
+     * @return bool 
+     */
+    function setDebugTemplate($tpl_name)
+    {
+        return $this->debug_tpl = $tpl_name;
+    } 
+
+    /**
+     * 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]);'); 
+        // PHP4 call to constructor?
+        if (strtolower($name) == 'smarty') {
+            throw new Exception('Please use parent::__construct() to call parent constuctor');
+            return false;
+        } 
+        // 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];
+        } 
+        // Smarty Backward Compatible wrapper
+        if (!isset($this->wrapper)) {
+            $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');
@@ -532,10 +765,12 @@ class Smarty extends Smarty_Internal_Data {
             require_once(SMARTY_SYSPLUGINS_DIR . $function_name . '.php');
         } 
         return call_user_func_array($function_name, array_merge(array($this), $args));
+        */
     } 
 } 
 
-function smartyAutoload($class) {
+function smartyAutoload($class)
+{
     $_class = strtolower($class);
     if (substr($_class, 0, 16) === 'smarty_internal_' || $_class == 'smarty_security') {
         include SMARTY_SYSPLUGINS_DIR . $_class . '.php';
index 0e58d8b21a93ecbfc6d8a105f47886b331edbf1f..c35e67ae01f4f2615ca067bce4eccedc519935b9 100644 (file)
 */
 function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_RESOURCE_CHAR_SET)
 {
+    if (!function_exists('mb_str_replace') && function_exists('mb_strlen')) {
+        // simulate the missing PHP mb_str_replace function
+        function mb_str_replace($needle, $replacement, $haystack)
+        {
+            $needle_len = mb_strlen($needle);
+            $replacement_len = mb_strlen($replacement);
+            $pos = mb_strpos($haystack, $needle, 0);
+            while ($pos !== false) {
+                $haystack = mb_substr($haystack, 0, $pos) . $replacement
+                 . mb_substr($haystack, $pos + $needle_len);
+                $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
+            } 
+            return $haystack;
+        } 
+    } 
     switch ($esc_type) {
         case 'html':
             return htmlspecialchars($string, ENT_QUOTES, $char_set);
@@ -68,7 +83,7 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_
 
         case 'mail': 
             // safe way to display e-mail address on a web page
-            if ($smarty->has_mb) {
+            if (function_exists('mb_str_replace')) {
                 return mb_str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
             } else {
                 return str_replace(array('@', '.'), array(' [AT] ', ' [DOT] '), $string);
@@ -91,21 +106,6 @@ function smarty_modifier_escape($string, $esc_type = 'html', $char_set = SMARTY_
         default:
             return $string;
     } 
-    if (!function_exists("mb_str_replace")) {
-        // simulate the missing PHP mb_str_replace function
-        function mb_str_replace($needle, $replacement, $haystack)
-        {
-            $needle_len = mb_strlen($needle);
-            $replacement_len = mb_strlen($replacement);
-            $pos = mb_strpos($haystack, $needle, 0);
-            while ($pos !== false) {
-                $haystack = mb_substr($haystack, 0, $pos) . $replacement
-                 . mb_substr($haystack, $pos + $needle_len);
-                $pos = mb_strpos($haystack, $needle, $pos + $replacement_len);
-            } 
-            return $haystack;
-        } 
-    } 
 } 
 
 ?>
index 943a8ab6591f8a3a115f79f8afc559de24662e64..0ad5f10f8a8320a4aaf7d1fac41ac97b406edff3 100644 (file)
@@ -34,7 +34,7 @@ function smarty_modifier_truncate($string, $length = 80, $etc = '...',
         if (mb_strlen($string) > $length) {
             $length -= min($length, mb_strlen($etc));
             if (!$break_words && !$middle) {
-                $string = mb_ereg_replace('/\s+?(\S+)?$/', '', mb_substr($string, 0, $length + 1), 'p');
+                $string = preg_replace('/\s+?(\S+)?$/u', '', mb_substr($string, 0, $length + 1));
             } 
             if (!$middle) {
                 return mb_substr($string, 0, $length) . $etc;
index 08a578337885318c1fe610daa965370a2ed2cd0f..5f11b7346f049cc750a1e8328e714329f1e34262 100644 (file)
@@ -13,9 +13,9 @@
 * @param object $ &$smarty Smarty object
 * @return string filtered output
 */
-function smarty_variablefilter_htmlspecialchars($source, &$smarty)
+function smarty_variablefilter_htmlspecialchars($source, $smarty)
 {
     return htmlspecialchars($source, ENT_QUOTES);
 } 
 
-?>
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_cache.php b/gosa-core/include/smarty/sysplugins/smarty_internal_cache.php
new file mode 100644 (file)
index 0000000..cb7ee96
--- /dev/null
@@ -0,0 +1,102 @@
+<?php
+
+/**
+* Project:     Smarty: the PHP compiling template engine
+* File:        smarty_internal_cache.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_Cache {
+  
+    protected $smarty;
+
+    function __construct($smarty) {
+      $this->smarty = $smarty;
+    }
+
+    /**
+    * Loads cache resource.
+    * 
+    * @return object of cache resource
+    */
+    public function loadResource($type = null) {
+        if (!isset($type)) {
+            $type = $this->smarty->caching_type;
+        } 
+        // already loaded?
+        if (isset($this->smarty->cache_resource_objects[$type])) {
+            return $this->smarty->cache_resource_objects[$type];
+        } 
+        if (in_array($type, $this->smarty->cache_resource_types)) {
+            $cache_resource_class = 'Smarty_Internal_CacheResource_' . ucfirst($type);
+            return $this->smarty->cache_resource_objects[$type] = new $cache_resource_class($this->smarty);
+        } 
+        else {
+            // try plugins dir
+            $cache_resource_class = 'Smarty_CacheResource_' . ucfirst($type);
+            if ($this->smarty->loadPlugin($cache_resource_class)) {
+                return $this->smarty->cache_resource_objects[$type] = new $cache_resource_class($this->smarty);
+            } 
+            else {
+                throw new Exception("Unable to load cache resource '{$type}'");
+            } 
+        } 
+    } 
+
+    /**
+    * Empty cache folder
+    * 
+    * @param integer $exp_time expiration time
+    * @param string $type resource type
+    * @return integer number of cache files deleted
+    */
+    function clearAll($exp_time = null, $type = null)
+    { 
+        return $this->loadResource($type)->clearAll($exp_time);
+    }        
+
+    /**
+    * Empty cache for a specific template
+    * 
+    * @param string $template_name template name
+    * @param string $cache_id cache id
+    * @param string $compile_id compile id
+    * @param integer $exp_time expiration time
+    * @param string $type resource type
+    * @return integer number of cache files deleted
+    */
+    function clear($template_name, $cache_id = null, $compile_id = null, $exp_time = null, $type = null)
+    { 
+       // load cache resource
+        $cacheResource = $this->loadResource($type);
+    
+        return $cacheResource->clear($template_name, $cache_id, $compile_id, $exp_time);
+    }
+    
+}
index c2614c3cf6215b33d12fa8afe82b09dc83a33ed6..57dcc00f6d792eec46132b8e40c3282b3dd80ca3 100644 (file)
@@ -29,7 +29,7 @@ class Smarty_Internal_CacheResource_File {
     {
         $_source_file_path = str_replace(':', '.', $_template->getTemplateFilepath());
         $_cache_id = isset($_template->cache_id) ? preg_replace('![^\w\|]+!', '_', $_template->cache_id) : null;
-        $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null; 
+        $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
         $_filepath = $_template->templateUid; 
         // if use_sub_dirs, break file into directories
         if ($this->smarty->use_sub_dirs) {
@@ -130,6 +130,14 @@ class Smarty_Internal_CacheResource_File {
             $_cache_id_parts = explode('|', $_cache_id);
             $_cache_id_parts_count = count($_cache_id_parts);
         } 
+        if (isset($resource_name)) {
+            $tpl = $this->smarty->createTemplate($resource_name);
+            if ($tpl->isExisting()) {
+                $_resourcename_parts = basename(str_replace('^','/',$tpl->getCachedFilepath()));
+            } else {
+                return 0;
+            } 
+        } 
         $_count = 0;
         $_cacheDirs = new RecursiveDirectoryIterator($_dir);
         $_cache = new RecursiveIteratorIterator($_cacheDirs, RecursiveIteratorIterator::CHILD_FIRST);
@@ -146,17 +154,12 @@ class Smarty_Internal_CacheResource_File {
                 $_parts_count = count($_parts); 
                 // check name
                 if (isset($resource_name)) {
-                    $_filename_parts = explode('.', $_parts[$_parts_count-1]);
-                    $_resourcename_parts = explode('.', $resource_name . '.php');
-                    if (count($_filename_parts)-1 != count($_resourcename_parts)) {
+                    if ($_parts[$_parts_count-1] != $_resourcename_parts) {
                         continue;
                     } 
-                    for ($i = 0; $i < count($_resourcename_parts); $i++) {
-                        if ($_filename_parts[$i + 1] != $_resourcename_parts[$i]) continue 2;
-                    } 
-                }
+                } 
                 // check compile id
-                if (isset($_compile_id) && $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id) {
+                if (isset($_compile_id) && (!isset($_parts[$_parts_count-2 - $_compile_id_offset]) || $_parts[$_parts_count-2 - $_compile_id_offset] != $_compile_id)) {
                     continue;
                 } 
                 // check cache id
@@ -173,7 +176,7 @@ class Smarty_Internal_CacheResource_File {
                 // expired ?
                 if (isset($exp_time) && time() - @filemtime($_file) < $exp_time) {
                     continue;
-                } 
+                }
                 $_count += @unlink((string) $_file) ? 1 : 0;
             } 
         } 
index 45bca20449513609740a4b46a2522342323d7085..0ccce92e21a4d7a4fae3b540e0e9b6935d50d5e3 100644 (file)
@@ -1,29 +1,29 @@
 <?php
 /**
-* Smarty Internal Plugin Compile Block
-* 
-* Compiles the {block}{/block} tags
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile Block
+ 
+ * Compiles the {block}{/block} tags
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Compile Block Class
-*/
+ * Smarty Internal Plugin Compile Block Class
+ */
 class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {block} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return boolean true
-    */
+     * Compiles code for the {block} tag
+     
+     * @param array $args array with attributes from parser
+     * @param object $compiler compiler object
+     * @return boolean true
+     */
     public function compile($args, $compiler)
     {
         $this->compiler = $compiler;
         $this->required_attributes = array('name');
-        $this->optional_attributes = array('assign','nocache'); 
+        $this->optional_attributes = array('assign', 'nocache'); 
         // check and get attributes
         $_attr = $this->_get_attributes($args);
         $save = array($_attr, $compiler->template->extracted_compiled_code, $compiler->template->extract_code, $this->compiler->nocache);
@@ -42,16 +42,16 @@ class Smarty_Internal_Compile_Block extends Smarty_Internal_CompileBase {
 } 
 
 /**
-* Smarty Internal Plugin Compile BlockClose Class
-*/
+ * Smarty Internal Plugin Compile BlockClose Class
+ */
 class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {/block} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {/block} 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;
@@ -90,8 +90,16 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
             } 
             $compiler->template->properties['file_dependency'] = array_merge($compiler->template->properties['file_dependency'], $_tpl->properties['file_dependency']);
             $compiler->template->properties['function'] = array_merge($compiler->template->properties['function'], $_tpl->properties['function']);
-            $compiler->template->required_plugins['compiled'] = array_merge($compiler->template->required_plugins['compiled'], $_tpl->required_plugins['compiled']);
-            $compiler->template->required_plugins['cache'] = array_merge($compiler->template->required_plugins['cache'], $_tpl->required_plugins['cache']);
+            if ($_tpl->has_nocache_code) {
+                $compiler->template->has_nocache_code = true;
+            } 
+            foreach($_tpl->required_plugins as $code => $tmp1) {
+                foreach($tmp1 as $name => $tmp) {
+                    foreach($tmp as $type => $data) {
+                        $compiler->template->required_plugins[$code][$name][$type] = $data;
+                    } 
+                } 
+            } 
             unset($_tpl);
         } else {
             $_output = $compiler->template->extracted_compiled_code;
@@ -105,4 +113,4 @@ class Smarty_Internal_Compile_Blockclose extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index cf4a18704231a361f8b7414e6efdb9291ad85057..ed6ab4f1fca2b9d43e1ddfaedcb42ceba821ac1d 100644 (file)
@@ -1,25 +1,25 @@
 <?php
 
 /**
-* Smarty Internal Plugin Compile extend
-* 
-* Compiles the {extends} tag
-* 
-* @package Smarty
-* @subpackage Compiler
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Compile extend
+ 
+ * Compiles the {extends} tag
+ 
+ * @package Smarty
+ * @subpackage Compiler
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Compile extend Class
-*/
+ * Smarty Internal Plugin Compile extend Class
+ */
 class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
     /**
-    * Compiles code for the {extends} tag
-    * 
-    * @param array $args array with attributes from parser
-    * @param object $compiler compiler object
-    * @return string compiled code
-    */
+     * Compiles code for the {extends} 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;
@@ -36,16 +36,29 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
         $_template = new $compiler->smarty->template_class($include_file, $this->smarty, $compiler->template); 
         // save file dependency
         $compiler->template->properties['file_dependency'][sha1($_template->getTemplateFilepath())] = array($_template->getTemplateFilepath(), $_template->getTemplateTimestamp());
-        $_old_source = $compiler->template->template_source;
-        if (preg_match_all("!({$this->_ldl}block(.+?){$this->_rdl})!", $_old_source, $s, PREG_OFFSET_CAPTURE) !=
-                preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_old_source, $c, PREG_OFFSET_CAPTURE)) {
+        $_content = $compiler->template->template_source;
+        if (preg_match_all("!({$this->_ldl}block(.+?){$this->_rdl})!", $_content, $s) !=
+                preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $c)) {
             $this->compiler->trigger_template_error('unmatched {block} {/block} pairs');
         } 
-        $block_count = count($s[0]);
-        for ($i = 0; $i < $block_count; $i++) {
-            $block_content = str_replace($this->smarty->left_delimiter . '$smarty.parent' . $this->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
-                substr($_old_source, $s[0][$i][1] + strlen($s[0][$i][0]), $c[0][$i][1] - $s[0][$i][1] - strlen($s[0][$i][0])));
-            $this->saveBlockData($block_content, $s[0][$i][0], $compiler->template);
+        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) {
+            $_end = 0;
+            $_level = 1;
+            while ($_level != 0) {
+                $_end++;
+                if (!strpos($_result[0][$_start + $_end][0], '/')) {
+                    $_level++;
+                } else {
+                    $_level--;
+                } 
+            } 
+            $_block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.parent' . $this->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
+                substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0])));
+            $this->saveBlockData($_block_content, $_result[0][$_start][0], $compiler->template);
+            $_start = $_start + $_end + 1;
         } 
         $compiler->template->template_source = $_template->getTemplateSource();
         $compiler->template->template_filepath = $_template->getTemplateFilepath();
@@ -59,6 +72,17 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
             $this->compiler->trigger_template_error("\"" . $block_tag . "\" missing name attribute");
         } else {
             $_name = trim($_match[3], '\'"');
+          // replace {$smarty.block.child} 
+            if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) {
+                if (isset($this->smarty->block_data[$_name])) {
+                    $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
+                        $this->smarty->block_data[$_name]['source'], $block_content);
+                    unset($this->smarty->block_data[$_name]);
+                } else {
+                    $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
+                        '', $block_content);
+                } 
+            } 
             if (isset($this->smarty->block_data[$_name])) {
                 if (strpos($this->smarty->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
                     $this->smarty->block_data[$_name]['source'] =
@@ -83,4 +107,4 @@ class Smarty_Internal_Compile_Extends extends Smarty_Internal_CompileBase {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 23fc27d68d73ccd58fc63f1792e1fb8393065c7e..56c586480ae02d4ff1ec25217a7e9577b7bb4444 100644 (file)
@@ -68,25 +68,26 @@ class Smarty_Internal_Compile_Functionclose extends Smarty_Internal_CompileBase
         $plugins_string = '';
         if (!empty($compiler->template->required_plugins['compiled'])) {
             $plugins_string = '<?php ';
-            foreach($compiler->template->required_plugins['compiled'] as $plugin_name => $data) {
-                $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name;
-                $plugins_string .= "if (!is_callable('{$plugin}')) include '{$data['file']}';\n";
+            foreach($compiler->template->required_plugins['compiled'] as $tmp) {
+                foreach($tmp as $data) {
+                    $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
+                } 
             } 
             $plugins_string .= '?>';
         } 
         if (!empty($compiler->template->required_plugins['cache'])) {
             $plugins_string .= "<?php echo '/*%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/<?php ";
-            foreach($compiler->template->required_plugins['cache'] as $plugin_name => $data) {
-                $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name;
-                $plugins_string .= "if (!is_callable(\'{$plugin}\')) include \'{$data['file']}\';\n";
+            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 .= "?>/*/%%SmartyNocache:{$compiler->template->properties['nocache_hash']}%%*/';?>\n";
         } 
         $compiler->template->properties['function'][$_name]['compiled'] = $plugins_string . $compiler->template->extracted_compiled_code;
         $compiler->template->properties['function'][$_name]['nocache_hash'] = $compiler->template->properties['nocache_hash'];
-        $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code;
-//        $compiler->template->properties['function'][$_name]['plugins'] = $compiler->template->required_plugins;
-        $this->compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name];
+        $compiler->template->properties['function'][$_name]['has_nocache_code'] = $compiler->template->has_nocache_code; 
+        $this->compiler->smarty->template_functions[$_name] = $compiler->template->properties['function'][$_name]; 
         // restore old compiler status
         $compiler->template->extracted_compiled_code = $saved_data[1];
         $compiler->template->extract_code = $saved_data[2];
index 030f3a2f02d2a74c86138b3c6852b61358f28dd5..0656b77b66534b8d84782bbf1992be0ee4fc4186 100644 (file)
@@ -45,9 +45,9 @@ 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 $_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();?>';
+                $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();?>";
             } else {
-                $output = '<?php $_block_repeat=true; ' . $function . '(' . $_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; {$function}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
             } 
         } else {
             // must endblock be nocache?
@@ -60,14 +60,13 @@ class Smarty_Internal_Compile_Private_Block_Plugin extends Smarty_Internal_Compi
             $this->compiler->has_output = true; 
             // compile code
             if (is_array($function)) {
-            var_dump('error');
-                $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)); }?>';
+                $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);?>";
             } else {
-                $output = '<?php $_block_content = ob_get_clean(); $_block_repeat=false; echo ' . $function . '(' . $_params . ', $_block_content, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl); }?>';
+                $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);?>";
             } 
         } 
-        return $output;
+        return $output."\n";
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 129b5d75228225ff4184e8a92bc7b45bfa3e37d3..80cb1bfa1f1a9aae53d2be225348df07a4526739 100644 (file)
@@ -42,12 +42,12 @@ class Smarty_Internal_Compile_Private_Function_Plugin extends Smarty_Internal_Co
         $_params = 'array(' . implode(",", $_paramsArray) . ')'; 
         // compile code
         if (is_array($function)) {
-            $output = '<?php echo call_user_func_array(array(\'' . $function[0] . '\',\'' . $function[1] . '\'),(array(' . $_params . ',$_smarty_tpl->smarty,$_smarty_tpl));?>';
+            $output = "<?php echo call_user_func(array('{$function[0]}','{$function[1]}'),{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
         } else {
-            $output = '<?php echo ' . $function . '(' . $_params . ',$_smarty_tpl->smarty,$_smarty_tpl);?>';
+            $output = "<?php echo {$function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
         } 
         return $output;
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 03c2d34015cf09f75dfae6327d317b3ddf090d14..69d105011f54e0816a12e8ba7bc774c2ab0b3c11 100644 (file)
@@ -43,16 +43,17 @@ class Smarty_Internal_Compile_Private_Object_Block_Function extends Smarty_Inter
 
             $this->_open_tag($tag . '->' . $methode, $_params); 
             // compile code
-            $output = '<?php $_block_repeat=true; $_smarty_tpl->smarty->registered_objects[\'' . $tag . '\'][0]->' . $methode . '(' . $_params . ', null, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl);while ($_block_repeat) { ob_start();?>';
+            $output = "<?php \$_smarty_tpl->smarty->_tag_stack[] = array('{$tag}->{$methode}', {$_params}); \$_block_repeat=true; \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params}, null, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl);while (\$_block_repeat) { ob_start();?>";
         } else {
+            $base_tag = substr($tag, 0, -5); 
             // closing tag of block plugin
-            $_params = $this->_close_tag(substr($tag, 0, -5) . '->' . $methode); 
+            $_params = $this->_close_tag($base_tag . '->' . $methode); 
             // This tag does create output
             $this->compiler->has_output = true; 
             // compile code
-            $output = '<?php $_block_content = ob_get_contents(); ob_end_clean(); $_block_repeat=false; echo $_smarty_tpl->smarty->registered_objects[\'' . substr($tag, 0, -5) . '\'][0]->' . $methode . '(' . $_params . ', $_block_content, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl); }?>';
+            $output = "<?php \$_block_content = ob_get_contents(); ob_end_clean(); \$_block_repeat=false; echo \$_smarty_tpl->smarty->registered_objects['{$base_tag}'][0]->{$methode}({$_params}, \$_block_content, \$_smarty_tpl->smarty, \$_block_repeat, \$_smarty_tpl); } array_pop(\$_smarty_tpl->smarty->_tag_stack);?>";
         } 
-        return $output;
+        return $output."\n";
     } 
 } 
 
index 573f6040e4e46e4369ee6cf6b042d9bc63cd470b..8e8ff9448a44d0fb76d015c60f7038530a3eba99 100644 (file)
@@ -42,10 +42,10 @@ 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);?>";
+            $output = "<?php echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";
         } else {
             $_params = implode(",", $_attr);
-            $output = "<?php echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params});?>";
+            $output = "<?php echo \$_smarty_tpl->smarty->registered_objects['{$tag}'][0]->{$methode}({$_params});?>\n";
         } 
         return $output;
     } 
index 218ec0e6beb10a978e1a4c080647b824734d8c37..300764d9cdb5f5e488cfe95df223b36f52fe8e22 100644 (file)
@@ -46,11 +46,11 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             $function = $compiler->smarty->registered_plugins['block'][$tag][0]; \r
             // compile code\r
             if (!is_array($function)) {\r
-                $output = '<?php $_block_repeat=true; ' . $function . '(' . $_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; {$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 $_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
+                $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
             } else {\r
-                $output = '<?php $_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
+                $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
             } \r
         } else {\r
             // must endblock be nocache?\r
@@ -65,15 +65,15 @@ class Smarty_Internal_Compile_Private_Registered_Block extends Smarty_Internal_C
             $function = $compiler->smarty->registered_plugins['block'][$base_tag][0]; \r
             // compile code\r
             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); }?>';\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_array($_smarty_tpl->smarty->registered_plugins[\'block\'][\'' . $base_tag . '\'][0],array(' . $_params . ', $_block_content, $_smarty_tpl->smarty, $_block_repeat, $_smarty_tpl)); }?>';\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
             } else {\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)); }?>';\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
             } \r
         } \r
-        return $output;\r
+        return $output."\n";\r
     } \r
 } \r
 \r
-?>\r
+?>
\ No newline at end of file
index e38ee4b8b32bef2a1f78edcbd3df16b949b03e99..e7d2cd6b6cea54096216cdabb21ebd356fe7c210 100644 (file)
@@ -1,25 +1,25 @@
 <?php\r
 /**\r
-* Smarty Internal Plugin Compile Registered Function\r
-* \r
-* Compiles code for the execution of a registered function\r
-* \r
-* @package Smarty\r
-* @subpackage Compiler\r
-* @author Uwe Tews \r
-*/\r
+ * Smarty Internal Plugin Compile Registered Function\r
+ \r
+ * Compiles code for the execution of a registered function\r
+ \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
 /**\r
-* Smarty Internal Plugin Compile Registered Function Class\r
-*/\r
+ * Smarty Internal Plugin Compile Registered Function Class\r
+ */\r
 class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Internal_CompileBase {\r
     /**\r
-    * Compiles code for the execution of a registered function\r
-    * \r
-    * @param array $args array with attributes from parser\r
-    * @param string $tag name of function\r
-    * @param object $compiler compiler object\r
-    * @return string compiled code\r
-    */\r
+     * Compiles code for the execution of a registered function\r
+     \r
+     * @param array $args array with attributes from parser\r
+     * @param string $tag name of function\r
+     * @param object $compiler compiler object\r
+     * @return string compiled code\r
+     */\r
     public function compile($args, $compiler, $tag)\r
     {\r
         $this->compiler = $compiler; \r
@@ -43,9 +43,17 @@ class Smarty_Internal_Compile_Private_Registered_Function extends Smarty_Interna
         } \r
         $_params = 'array(' . implode(",", $_paramsArray) . ')'; \r
         // compile code\r
-        $output = '<?php echo call_user_func_array($_smarty_tpl->smarty->registered_plugins[\'function\'][\'' . $tag . '\'][0],array(' . $_params . ',$_smarty_tpl->smarty,$_smarty_tpl));?>';\r
+        $function = $compiler->smarty->registered_plugins['function'][$tag][0]; \r
+        // compile code\r
+        if (!is_array($function)) {\r
+            $output = "<?php echo {$function}({$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
+        } else if (is_object($function[0])) {\r
+            $output = "<?php echo call_user_func(\$_smarty_tpl->smarty->registered_plugins['function']['{$tag}'][0],{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
+        } else {\r
+            $output = "<?php echo call_user_func(array('{$function[0]}','{$function[1]}'),{$_params},\$_smarty_tpl->smarty,\$_smarty_tpl);?>\n";\r
+        } \r
         return $output;\r
     } \r
 } \r
 \r
-?>\r
+?>
\ No newline at end of file
index 61b9b52bd3363765e16aeb3952413365f869b9a1..63f98a1d36aeb37d86a69e63c30bf610ec3ea16b 100644 (file)
@@ -46,7 +46,7 @@ class Smarty_Internal_Data {
     * @param mixed $value the value to assign
     * @param boolean $nocache if true any output of this variable will be not cached
     */
-    public function assign_global($varname, $value = null, $nocache = false)
+    public function assignGlobal($varname, $value = null, $nocache = false)
     {
         if ($varname != '') {
             $this->smarty->global_tpl_vars[$varname] = new Smarty_variable($value, $nocache);
@@ -60,7 +60,7 @@ class Smarty_Internal_Data {
     * @param boolean $nocache if true any output of this variable will be not cached
     * @param boolean $scope the scope the variable will have  (local,parent or root)
     */
-    public function assign_by_ref($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
+    public function assignByRef($tpl_var, &$value, $nocache = false, $scope = SMARTY_LOCAL_SCOPE)
     {
         if ($tpl_var != '') {
             $this->tpl_vars[$tpl_var] = new Smarty_variable(null, $nocache, $scope);
@@ -139,7 +139,7 @@ class Smarty_Internal_Data {
     * @param mixed $ &$value the referenced value to append
     * @param boolean $merge flag if array elements shall be merged
     */
-    public function append_by_ref($tpl_var, &$value, $merge = false)
+    public function appendByRef($tpl_var, &$value, $merge = false)
     {
         if ($tpl_var != '' && isset($value)) {
             if (!isset($this->tpl_vars[$tpl_var])) {
@@ -158,13 +158,51 @@ class Smarty_Internal_Data {
         } 
     } 
 
-
+    /**
+    * Returns a single or all template variables
+    * 
+    * @param string $varname variable name or null
+    * @return string variable value or or array of variables
+    */
+    function getTemplateVars($varname = null, $_ptr = null, $search_parents = true)
+    {
+        if (isset($varname)) {
+            $_var = $this->getVariable($varname, $_ptr, $search_parents);
+            if (is_object($_var)) {
+                return $_var->value;
+            } else {
+                return null;
+            } 
+        } else {
+            $_result = array();
+            if ($_ptr === null) {
+                $_ptr = $this;
+            } while ($_ptr !== null) {
+                foreach ($_ptr->tpl_vars AS $key => $var) {
+                    $_result[$key] = $var->value;
+                } 
+                // not found, try at parent
+                if ($search_parents) {
+                    $_ptr = $_ptr->parent;
+                } else {
+                    $_ptr = null;
+                } 
+            } 
+            if ($search_parents) {
+                foreach ($this->global_tpl_vars AS $key => $var) {
+                    $_result[$key] = $var->value;
+                } 
+            } 
+            return $_result;
+        } 
+    }
+    
     /**
     * clear the given assigned template variable.
     * 
     * @param string $ |array $tpl_var the template variable(s) to clear
     */
-    public function clear_assign($tpl_var)
+    public function clearAssign($tpl_var)
     {
         if (is_array($tpl_var)) {
             foreach ($tpl_var as $curr_var) {
@@ -178,7 +216,7 @@ class Smarty_Internal_Data {
     /**
     * clear all the assigned template variables.
     */
-    public function clear_all_assign()
+    public function clearAllAssign()
     {
         $this->tpl_vars = array();
     } 
@@ -189,7 +227,7 @@ class Smarty_Internal_Data {
     * @param string $config_file filename
     * @param mixed $sections array of section names, single section or null
     */
-    public function config_load($config_file, $sections = null)
+    public function configLoad($config_file, $sections = null)
     { 
         // load Config class
         $config = new Smarty_Internal_Config($config_file, $this->smarty);
@@ -278,49 +316,38 @@ class Smarty_Internal_Data {
     } 
 
     /**
-    * creates a template object
+    * Returns a single or all config variables
     * 
-    * @param string $template the resource handle of the template file
-    * @param object $parent next higher level of Smarty variables
-    * @param mixed $cache_id cache id to be used with this template
-    * @param mixed $compile_id compile id to be used with this template
-    * @returns object template object
+    * @param string $varname variable name or null
+    * @return string variable value or or array of variables
     */
-    public function createTemplate($template, $cache_id = null, $compile_id = null, $parent = null)
+    function getConfigVars($varname = null)
     {
-        if (is_object($cache_id) || is_array($cache_id)) {
-            $parent = $cache_id;
-            $cache_id = null;
-        } 
-        if (is_array($parent)) {
-            $data = $parent;
-            $parent = null;
-        } else {
-            $data = null;
-        } 
-        if (!is_object($template)) {
-            // we got a template resource
-            // already in template cache?
-            $_templateId = crc32($template . $cache_id . $compile_id);
-            if (isset($this->smarty->template_objects[$_templateId]) && $this->smarty->caching) {
-                // return cached template object
-                $tpl = $this->smarty->template_objects[$_templateId];
+        if (isset($varname)) {
+            if (isset($this->config_vars[$varname])) {
+                return $this->config_vars[$varname];
             } else {
-                // create new template object
-                $tpl = new $this->template_class($template, $this->smarty, $parent, $cache_id, $compile_id);
+                return '';
             } 
         } else {
-            // just return a copy of template class
-            $tpl = $template;
+            return $this->config_vars;
         } 
-        // fill data if present
-        if (is_array($data)) {
-            // set up variable values
-            foreach ($data as $_key => $_val) {
-                $tpl->tpl_vars[$_key] = new Smarty_variable($_val);
-            } 
+    } 
+
+    /**
+    * Deassigns a single or all config variables
+    * 
+    * @param string $varname variable name or null
+    */
+    function clearConfig($varname = null)
+    {
+        if (isset($varname)) {
+            unset($this->config_vars[$varname]);
+            return;
+        } else {
+            $this->config_vars = array();
+            return;
         } 
-        return $tpl;
     } 
 
     /**
@@ -349,12 +376,15 @@ class Smarty_Data extends Smarty_Internal_Data {
     // back pointer to parent object
     public $parent = null; 
     // config vars
-    public $config_vars = array();
+    public $config_vars = array(); 
+    // Smarty object
+    public $smarty = null;
     /**
     * create Smarty data object
     */
-    public function __construct ($_parent = null)
+    public function __construct ($_parent = null, $smarty = null)
     {
+        $this->smarty = $smarty;
         if (is_object($_parent)) {
             // when object set up back pointer
             $this->parent = $_parent;
@@ -363,7 +393,7 @@ class Smarty_Data extends Smarty_Internal_Data {
             foreach ($_parent as $_key => $_val) {
                 $this->tpl_vars[$_key] = new Smarty_variable($_val);
             } 
-        } else {
+        } elseif ($_parent != null) {
             throw new Exception("Wrong type for template variables");
         } 
     } 
index 1d81636e6067b4250648e61b334c167e7711d649..a8a43d48d32339a959ceeceb14bd0dbb7e3a9a42 100644 (file)
@@ -1,31 +1,31 @@
 <?php
 
 /**
-* Smarty Internal Plugin Filter Handler
-* 
-* Smarty filter handler class
-* 
-* @package Smarty
-* @subpackage PluginsInternal
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Filter Handler
+ 
+ * Smarty filter handler class
+ 
+ * @package Smarty
+ * @subpackage PluginsInternal
+ * @author Uwe Tews 
+ */
 
 /**
-* Class for filter processing
-*/
+ * Class for filter processing
+ */
 class Smarty_Internal_Filter_Handler {
     /**
-    * Run filters over content
-    * 
-    * The filters will be lazy loaded if required
-    * class name format: Smarty_FilterType_FilterName
-    * plugin filename format: filtertype.filtername.php
-    * Smarty2 filter plugins could be used
-    * 
-    * @param string $type the type of filter ('pre','post','output' or 'variable') which shall run
-    * @param string $content the content which shall be processed by the filters
-    * @return string the filtered content
-    */
+     * Run filters over content
+     
+     * The filters will be lazy loaded if required
+     * class name format: Smarty_FilterType_FilterName
+     * plugin filename format: filtertype.filtername.php
+     * Smarty2 filter plugins could be used
+     
+     * @param string $type the type of filter ('pre','post','output' or 'variable') which shall run
+     * @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)
     {
         $output = $content;
@@ -35,13 +35,12 @@ class Smarty_Internal_Filter_Handler {
                 foreach ((array)$smarty->autoload_filters[$type] as $name) {
                     $plugin_name = "Smarty_{$type}filter_{$name}";
                     if ($smarty->loadPlugin($plugin_name)) {
-                        // use class plugin if found
-                        if (class_exists($plugin_name, false)) {
-                            // loaded class of filter plugin
-                            $output = call_user_func_array(array($plugin_name, 'execute'), array($output, $smarty));
-                        } elseif (function_exists($plugin_name)) {
+                        if (function_exists($plugin_name)) {
                             // use loaded Smarty2 style plugin
-                            $output = call_user_func_array($plugin_name, array($output, $smarty));
+                            $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);
                         } 
                     } else {
                         // nothing found, throw exception
@@ -52,7 +51,11 @@ class Smarty_Internal_Filter_Handler {
             // loop over registerd filters of specified type
             if (!empty($smarty->registered_filters[$type])) {
                 foreach ($smarty->registered_filters[$type] as $key => $name) {
-                    $output = call_user_func_array($smarty->registered_filters[$type][$key], array($output, $smarty));
+                    if (is_array($smarty->registered_filters[$type][$key])) {
+                        $output = call_user_func($smarty->registered_filters[$type][$key], $output, $smarty);
+                    } else {
+                        $output = $smarty->registered_filters[$type][$key]($output, $smarty);
+                    } 
                 } 
             } 
         } 
@@ -61,4 +64,4 @@ class Smarty_Internal_Filter_Handler {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index cdbd3fae9e963d771dfb79fe71b66c60eb883de8..c9b2948dca205bf24cedd36ba3c7bf2e1c81798c 100644 (file)
@@ -3,7 +3,7 @@
 * Smarty Internal Plugin Function Call Handler\r
 * \r
 * @package Smarty\r
-* @subpackage Security\r
+* @subpackage PluginsInternal\r
 * @author Uwe Tews \r
 */\r
 /**\r
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_parsetree.php b/gosa-core/include/smarty/sysplugins/smarty_internal_parsetree.php
new file mode 100644 (file)
index 0000000..bba83db
--- /dev/null
@@ -0,0 +1,121 @@
+<?php\r
+\r
+abstract class _smarty_parsetree {\r
+  abstract public function to_smarty_php();\r
+}\r
+\r
+/* A complete smarty tag. */\r
+\r
+class _smarty_tag extends _smarty_parsetree {\r
+    public $parser;\r
+    public $data;\r
+    public $saved_block_nesting;\r
+    function __construct($parser, $data)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->data = $data;\r
+        $this->saved_block_nesting = $parser->block_nesting_level;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        return $this->data;\r
+    } \r
+\r
+    public function assign_to_var()\r
+    {\r
+        $var = sprintf('$_tmp%d', ++$this->parser->prefix_number);\r
+        $this->parser->compiler->prefix_code[] = sprintf('<?php ob_start();?>%s<?php %s=ob_get_clean();?>',\r
+            $this->data, $var);\r
+        return $var;\r
+    } \r
+} \r
+\r
+/* Code fragment inside a tag. */\r
+class _smarty_code extends _smarty_parsetree {\r
+    public $parser;\r
+    public $data;\r
+    function __construct($parser, $data)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->data = $data;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        return sprintf("(%s)", $this->data);\r
+    } \r
+} \r
+\r
+/* Double quoted string inside a tag. */\r
+class _smarty_doublequoted extends _smarty_parsetree {\r
+    public $parser;\r
+    public $subtrees = Array();\r
+    function __construct($parser, _smarty_parsetree $subtree)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->subtrees[] = $subtree;\r
+        if ($subtree instanceof _smarty_tag) {\r
+            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);\r
+        } \r
+    } \r
+\r
+    function append_subtree(_smarty_parsetree $subtree)\r
+    {\r
+        $last_subtree = count($this->subtrees)-1;\r
+        if ($last_subtree >= 0 && $this->subtrees[$last_subtree] instanceof _smarty_tag && $this->subtrees[$last_subtree]->saved_block_nesting < $this->parser->block_nesting_level) {\r
+            if ($subtree instanceof _smarty_code) {\r
+                $this->subtrees[$last_subtree]->data .= '<?php echo ' . $subtree->data . ';?>';\r
+            } else {\r
+                $this->subtrees[$last_subtree]->data .= $subtree->data;\r
+            } \r
+        } else {\r
+            $this->subtrees[] = $subtree;\r
+        } \r
+        if ($subtree instanceof _smarty_tag) {\r
+            $this->parser->block_nesting_level = count($this->parser->compiler->_tag_stack);\r
+        } \r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        $code = '';\r
+        foreach ($this->subtrees as $subtree) {\r
+            if ($code !== "") {\r
+                $code .= ".";\r
+            } \r
+            if ($subtree instanceof _smarty_tag) {\r
+                $more_php = $subtree->assign_to_var();\r
+            } else {\r
+                $more_php = $subtree->to_smarty_php();\r
+            } \r
+\r
+            $code .= $more_php;\r
+\r
+            if (!$subtree instanceof _smarty_dq_content) {\r
+                $this->parser->compiler->has_variable_string = true;\r
+            } \r
+        } \r
+\r
+//        $code = sprintf("(%s)", $code);\r
+        return $code;\r
+    } \r
+} \r
+\r
+/* Raw chars as part of a double quoted string. */\r
+class _smarty_dq_content extends _smarty_parsetree {\r
+    public $data;\r
+    function __construct($parser, $data)\r
+    {\r
+        $this->parser = $parser;\r
+        $this->data = $data;\r
+    } \r
+\r
+    public function to_smarty_php()\r
+    {\r
+        return '"' . $this->data . '"';\r
+    } \r
+} \r
+\r
+\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_register.php b/gosa-core/include/smarty/sysplugins/smarty_internal_register.php
new file mode 100644 (file)
index 0000000..67df191
--- /dev/null
@@ -0,0 +1,247 @@
+<?php
+
+/**
+* Project:     Smarty: the PHP compiling template engine
+* File:        smarty_internal_register.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_Register {
+  
+    protected $smarty;
+
+    function __construct($smarty) {
+      $this->smarty = $smarty;
+    }
+    
+    /**
+    * Registers block function to be used in templates
+    * 
+    * @param string $block_tag name of template block
+    * @param string $block_impl PHP function to register
+    * @param boolean $cacheable if true (default) this fuction is cachable
+    * @param array $cache_attr caching attributes if any
+    */
+    function block($block_tag, $block_impl, $cacheable = true, $cache_attr = array())
+    {
+        if (isset($this->smarty->registered_plugins['block'][$block_tag])) {
+            throw new Exception("Plugin tag \"{$block_tag}\" already registered");
+        } elseif (!is_callable($block_impl)) {
+            throw new Exception("Plugin \"{$block_tag}\" not callable");
+        } else {
+            $this->smarty->registered_plugins['block'][$block_tag] =
+            array($block_impl, $cacheable, $cache_attr);
+        } 
+    }
+    
+    /**
+    * Registers compiler function
+    * 
+    * @param string $compiler_tag of template function
+    * @param string $compiler_impl name of PHP function to register
+    * @param boolean $cacheable if true (default) this fuction is cachable
+    */
+    function compilerFunction($compiler_tag, $compiler_impl, $cacheable = true)
+    {
+        if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) {
+            throw new Exception("Plugin tag \"{$compiler_tag}\" already registered");
+        } elseif (!is_callable($compiler_impl)) {
+            throw new Exception("Plugin \"{$compiler_tag}\" not callable");
+        } else {
+            $this->smarty->registered_plugins['compiler'][$compiler_tag] =
+            array($compiler_impl, $cacheable);
+        } 
+    }
+    
+    /**
+    * Registers custom function to be used in templates
+    * 
+    * @param string $function_tag the name of the template function
+    * @param string $function_impl the name of the PHP function to register
+    * @param boolean $cacheable if true (default) this fuction is cachable
+    * @param array $cache_attr caching attributes if any
+    */
+    function templateFunction($function_tag, $function_impl, $cacheable = true, $cache_attr = array())
+    {
+        if (isset($this->smarty->registered_plugins['function'][$function_tag])) {
+            throw new Exception("Plugin tag \"{$function_tag}\" already registered");
+        } elseif (!is_callable($function_impl)) {
+            throw new Exception("Plugin \"{$function_tag}\" not callable");
+        } else {
+            $this->smarty->registered_plugins['function'][$function_tag] =
+            array($function_impl, $cacheable, $cache_attr);
+        } 
+    }
+    
+    /**
+    * Registers modifier to be used in templates
+    * 
+    * @param string $modifier_name name of template modifier
+    * @param string $modifier_impl name of PHP function to register
+    */
+    function modifier($modifier_name, $modifier_impl)
+    {
+        if (isset($this->smarty->registered_plugins['modifier'][$modifier_name])) {
+            throw new Exception("Plugin \"{$modifier}\" already registered");
+        } elseif (!is_callable($modifier_impl)) {
+            throw new Exception("Plugin \"{$modifier}\" not callable");
+        } else {
+            $this->smarty->registered_plugins['modifier'][$modifier_name] =
+            array($modifier_impl);
+        } 
+    } 
+    
+    /**
+    * Registers object to be used in templates
+    * 
+    * @param string $object name of template object
+    * @param object $ &$object_impl the referenced PHP object to register
+    * @param mixed null | array $allowed list of allowed methods (empty = all)
+    * @param boolean $smarty_args smarty argument format, else traditional
+    * @param mixed null | array $block_functs list of methods that are block format
+    */
+    function templateObject($object_name, $object_impl, $allowed = array(), $smarty_args = true, $block_methods = array())
+    { 
+        // test if allowed methodes callable
+        if (!empty($allowed)) {
+            foreach ((array)$allowed as $method) {
+                if (!is_callable(array($object_impl, $method))) {
+                    throw new Exception("Undefined method '$method' in registered object");
+                } 
+            } 
+        } 
+        // test if block methodes callable
+        if (!empty($block_methods)) {
+            foreach ((array)$block_methods as $method) {
+                if (!is_callable(array($object_impl, $method))) {
+                    throw new Exception("Undefined method '$method' in registered object");
+                } 
+            } 
+        } 
+        // register the object
+        $this->smarty->registered_objects[$object_name] =
+        array($object_impl, (array)$allowed, (boolean)$smarty_args, (array)$block_methods);
+    } 
+    
+    /**
+    * Registers an output filter function to apply
+    * to a template output
+    * 
+    * @param callback $function_name 
+    */
+    function outputFilter($function_name)
+    {
+        $this->smarty->registered_filters['output'][$this->smarty->_get_filter_name($function_name)] = $function_name;
+    }
+    
+    /**
+    * Registers a postfilter function to apply
+    * to a compiled template after compilation
+    * 
+    * @param callback $function_name 
+    */
+    function postFilter($function_name)
+    {
+        $this->smarty->registered_filters['post'][$this->smarty->_get_filter_name($function_name)] = $function_name;
+    } 
+    
+    /**
+    * Registers a prefilter function to apply
+    * to a template before compiling
+    * 
+    * @param callback $function_name 
+    */
+    function preFilter($function_name)
+    {
+        $this->smarty->registered_filters['pre'][$this->smarty->_get_filter_name($function_name)] = $function_name;
+    }    
+    
+    /**
+    * Registers a resource to fetch a template
+    * 
+    * @param string $resource_type name of resource type
+    * @param array $function_names array of functions to handle resource
+    */
+    function resource($resource_type, $function_names)
+    {
+        if (count($function_names) == 4) {
+            $this->smarty->_plugins['resource'][$resource_type] =
+            array($function_names, false);
+        } elseif (count($function_names) == 5) {
+            $this->smarty->_plugins['resource'][$resource_type] =
+            array(array(array(&$function_names[0], $function_names[1]),
+              array(&$function_names[0], $function_names[2]),
+              array(&$function_names[0], $function_names[3]),
+              array(&$function_names[0], $function_names[4])),
+              false);
+        } else {
+            throw new Exception("malformed function-list for '$resource_type' in register_resource");
+        } 
+    } 
+    
+    /**
+    * Registers an output filter function which
+    * runs over any variable output
+    * 
+    * @param callback $function_name 
+    */
+    function variableFilter($function_name)
+    {
+        $this->smarty->registered_filters['variable'][$this->smarty->_get_filter_name($function_name)] = $function_name;
+    }    
+    
+    /**
+    * Registers a default plugin handler
+    * 
+    * @param $function_name mixed string | array $plugin class/methode name
+    */
+    function defaultPluginHandler($function_name)
+    {
+        if (is_callable($function_name)) {
+            $this->smarty->default_plugin_handler_func = $function_name;
+        } else {
+            throw new Exception("Default plugin handler '$function_name' not callable");
+        } 
+    }     
+
+    /**
+    * Registers a default template handler
+    * 
+    * @param $function_name mixed string | array class/method name
+    */
+    function defaultTemplateHandler($function_name)
+    {
+        if (is_callable($function_name)) {
+            $this->smarty->default_template_handler_func = $function_name;
+        } else {
+            throw new Exception("Default template handler '$function_name' not callable");
+        } 
+    }    
+    
+}
index b796de775cb64f2e7fb1f92aca664260bbd79139..64526346ae33f998e53f07b82c8c8ca13f94b4ac 100644 (file)
@@ -1,17 +1,17 @@
 <?php
 
 /**
-* Smarty Internal Plugin Resource Extends
-* 
-* Implements the file system as resource for Smarty which does extend a chain of template files templates
-* 
-* @package Smarty
-* @subpackage TemplateResources
-* @author Uwe Tews 
-*/
+ * Smarty Internal Plugin Resource Extends
+ 
+ * Implements the file system as resource for Smarty which does extend a chain of template files templates
+ 
+ * @package Smarty
+ * @subpackage TemplateResources
+ * @author Uwe Tews 
+ */
 /**
-* Smarty Internal Plugin Resource Extends
-*/
+ * Smarty Internal Plugin Resource Extends
+ */
 class Smarty_Internal_Resource_Extends {
     public function __construct($smarty)
     {
@@ -29,11 +29,11 @@ class Smarty_Internal_Resource_Extends {
     public $allFilepaths = array();
 
     /**
-    * Return flag if template source is existing
-    * 
-    * @param object $_template template object
-    * @return boolean result
-    */
+     * Return flag if template source is existing
+     
+     * @param object $_template template object
+     * @return boolean result
+     */
     public function isExisting($_template)
     {
         if ($_template->getTemplateFilepath() === false) {
@@ -43,11 +43,11 @@ class Smarty_Internal_Resource_Extends {
         } 
     } 
     /**
-    * Get filepath to template source
-    * 
-    * @param object $_template template object
-    * @return string filepath to template source file
-    */
+     * Get filepath to template source
+     
+     * @param object $_template template object
+     * @return string filepath to template source file
+     */
     public function getTemplateFilepath($_template)
     {
         $sha1String = '';
@@ -67,22 +67,22 @@ class Smarty_Internal_Resource_Extends {
     } 
 
     /**
-    * Get timestamp to template source
-    * 
-    * @param object $_template template object
-    * @return integer timestamp of template source file
-    */
+     * Get timestamp to template source
+     
+     * @param object $_template template object
+     * @return integer timestamp of template source file
+     */
     public function getTemplateTimestamp($_template)
     {
         return filemtime($_template->getTemplateFilepath());
     } 
 
     /**
-    * Read template source from file
-    * 
-    * @param object $_template template object
-    * @return string content of template source file
-    */
+     * Read template source from file
+     
+     * @param object $_template template object
+     * @return string content of template source file
+     */
     public function getTemplateSource($_template)
     {
         $this->template = $_template;
@@ -98,15 +98,28 @@ class Smarty_Internal_Resource_Extends {
             $_template->template_filepath = $_filepath;
             $_content = file_get_contents($_filepath);
             if ($_filepath != $_files[count($_files)-1]) {
-                if (preg_match_all("!({$this->_ldl}block(.+?){$this->_rdl})!", $_content, $_open, PREG_OFFSET_CAPTURE) !=
-                        preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $_close, PREG_OFFSET_CAPTURE)) {
-                    $this->smarty->trigger_error('unmatched {block} {/block} pairs');
+                if (preg_match_all("!({$this->_ldl}block(.+?){$this->_rdl})!", $_content, $_open) !=
+                        preg_match_all("!({$this->_ldl}/block(.*?){$this->_rdl})!", $_content, $_close)) {
+                    $this->smarty->trigger_error("unmatched {block} {/block} pairs in file '$_filepath'");
                 } 
-                $_block_count = count($_open[0]);
-                for ($_i = 0; $_i < $_block_count; $_i++) {
-                    $_block_content = str_replace($this->smarty->left_delimiter . '$smarty.parent' . $this->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
-                        substr($_content, $_open[0][$_i][1] + strlen($_open[0][$_i][0]), $_close[0][$_i][1] - $_open[0][$_i][1] - strlen($_open[0][$_i][0])));
-                    $this->saveBlockData($_block_content, $_open[0][$_i][0], $_filepath);
+                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) {
+                    $_end = 0;
+                    $_level = 1;
+                    while ($_level != 0) {
+                        $_end++;
+                        if (!strpos($_result[0][$_start + $_end][0], '/')) {
+                            $_level++;
+                        } else {
+                            $_level--;
+                        } 
+                    } 
+                    $_block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.parent' . $this->smarty->right_delimiter, '%%%%SMARTY_PARENT%%%%',
+                        substr($_content, $_result[0][$_start][1] + strlen($_result[0][$_start][0]), $_result[0][$_start + $_end][1] - $_result[0][$_start][1] - + strlen($_result[0][$_start][0])));
+                    $this->saveBlockData($_block_content, $_result[0][$_start][0], $_filepath);
+                    $_start = $_start + $_end + 1;
                 } 
             } else {
                 $_template->template_source = $_content;
@@ -118,9 +131,20 @@ class Smarty_Internal_Resource_Extends {
     protected function saveBlockData($block_content, $block_tag, $_filepath)
     {
         if (0 == preg_match("!(.?)(name=)(.*?)(?=(\s|{$this->_rdl}))!", $block_tag, $_match)) {
-            $this->smarty->trigger_error("'{$block_tag}' missing name attribute");
+            $this->smarty->trigger_error("'{$block_tag}' missing name attribute in file '$_filepath'");
         } else {
             $_name = trim($_match[3], '\'"');
+          // replace {$smarty.block.child} 
+            if (strpos($block_content, $this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter) !== false) {
+                if (isset($this->smarty->block_data[$_name])) {
+                    $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
+                        $this->smarty->block_data[$_name]['source'], $block_content);
+                    unset($this->smarty->block_data[$_name]);
+                } else {
+                    $block_content = str_replace($this->smarty->left_delimiter . '$smarty.block.child' . $this->smarty->right_delimiter,
+                        '', $block_content);
+                } 
+            } 
             if (isset($this->smarty->block_data[$_name])) {
                 if (strpos($this->smarty->block_data[$_name]['source'], '%%%%SMARTY_PARENT%%%%') !== false) {
                     $this->smarty->block_data[$_name]['source'] =
@@ -145,11 +169,11 @@ class Smarty_Internal_Resource_Extends {
     } 
 
     /**
-    * Get filepath to compiled template
-    * 
-    * @param object $_template template object
-    * @return string return path to compiled template
-    */
+     * Get filepath to compiled template
+     
+     * @param object $_template template object
+     * @return string return path to compiled template
+     */
     public function getCompiledFilepath($_template)
     {
         $_compile_id = isset($_template->compile_id) ? preg_replace('![^\w\|]+!', '_', $_template->compile_id) : null;
@@ -183,4 +207,4 @@ class Smarty_Internal_Resource_Extends {
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 36a09cdc0a94cb65abc1c46a6cb7e46c1474b4bc..92347a178a1956912b820310600cdad2da3ecf39 100644 (file)
@@ -33,7 +33,7 @@ class Smarty_Internal_Resource_Registered {
     */
     public function isExisting($_template)
     {
-        if (is_integer($this->getTemplateTimestamp($_template))) {
+        if (is_integer($_template->getTemplateTimestamp())) {
             return true;
         } else {
             return false;
index f433e9e9d60d230a89fc241f8088f9d1d6add8cd..1833d4f870b0b1cb416cad4a6a285bd39e3ac2f4 100644 (file)
@@ -26,11 +26,27 @@ class Smarty_Internal_Security_Handler {
         if (empty($this->smarty->security_policy->php_functions) || in_array($function_name, $this->smarty->security_policy->php_functions)) {
             return true;
         } else {
-            $compiler->trigger_template_error ("PHP function \"" . $function_name . "\" not allowed by security setting");
+            $compiler->trigger_template_error ("PHP function '{$function_name}' not allowed by security setting");
             return false;
         } 
     } 
 
+    /**
+    * Check if static class is trusted.
+    * 
+    * @param string $class_name 
+    * @param object $compiler compiler object
+    * @return boolean true if class is trusted
+    */
+    function isTrustedStaticClass($class_name, $compiler)
+    {
+        if (empty($this->smarty->security_policy->static_classes) || in_array($class_name, $this->smarty->security_policy->static_classes)) {
+            return true;
+        } else {
+            $compiler->trigger_template_error ("access to static class '{$class_name}' not allowed by security setting");
+            return false;
+        } 
+    } 
     /**
     * Check if modifier is trusted.
     * 
@@ -43,7 +59,7 @@ class Smarty_Internal_Security_Handler {
         if (empty($this->smarty->security_policy->modifiers) || in_array($modifier_name, $this->smarty->security_policy->modifiers)) {
             return true;
         } else {
-            $compiler->trigger_template_error ("modifier \"" . $modifier_name . "\" not allowed by security setting");
+            $compiler->trigger_template_error ("modifier '{$modifier_name}' not allowed by security setting");
             return false;
         } 
     } 
@@ -59,7 +75,7 @@ class Smarty_Internal_Security_Handler {
         if (empty($this->smarty->security_policy->streams) || in_array($stream_name, $this->smarty->security_policy->streams)) {
             return true;
         } else {
-            throw new Exception ("stream \"" . $stream_name . "\" not allowed by security setting");
+            throw new Exception ("stream '{$stream_name}' not allowed by security setting");
             return false;
         } 
     } 
@@ -96,7 +112,7 @@ class Smarty_Internal_Security_Handler {
             } 
         } 
 
-        throw new Exception ("directory \"" . $_rp . "\" not allowed by security setting");
+        throw new Exception ("directory '{$_rp}' not allowed by security setting");
         return false;
     } 
     /**
@@ -122,9 +138,9 @@ class Smarty_Internal_Security_Handler {
             } 
         } 
 
-        throw new Exception ("directory \"" . $_rp . "\" not allowed by security setting");
+        throw new Exception ("directory '{$_rp}' not allowed by security setting");
         return false;
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index 2246f035c86cca494180729b0fdcd0b21c2a18d5..a6b7e7c3b215d542a6e11b38f533326b47e70488 100644 (file)
@@ -9,6 +9,7 @@
 * @subpackage Compiler
 * @author Uwe Tews 
 */
+require_once("smarty_internal_parsetree.php");
 /**
 * Class SmartyTemplateCompiler
 */
@@ -70,4 +71,4 @@ class Smarty_Internal_SmartyTemplateCompiler extends Smarty_Internal_TemplateCom
     } 
 } 
 
-?>
+?>
\ No newline at end of file
index fab9d0847c8e0de20e90f076b857f585b89e5c13..60bb8a982506166a8e1c3c11d943705341c9afd6 100644 (file)
@@ -32,7 +32,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     public $resource_name = null;
     public $resource_object = null;
     private $isExisting = null;
-    public $templateUid = '';
+    public $templateUid = ''; 
     // Template source
     public $template_filepath = null;
     public $template_source = null;
@@ -68,7 +68,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     // storage for block data
     public $block_data = array(); 
     // required plugins
-    public $required_plugins = array('compiled' => array(), 'cache' => array());
+    public $required_plugins = array('compiled' => array(), 'nocache' => array());
 
     /**
     * Create template data object
@@ -104,7 +104,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         } 
         // load cache resource
         if (!$this->resource_object->isEvaluated && ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED)) {
-            $this->cache_resource_object = $this->smarty->loadCacheResource();
+            $this->cache_resource_object = $this->smarty->cache->loadResource();
         } 
     } 
 
@@ -260,7 +260,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             // compiling succeded
             if (!$this->resource_object->isEvaluated) {
                 // write compiled template
-                Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty); 
+                Smarty_Internal_Write_File::writeFile($this->getCompiledFilepath(), $this->compiled_template, $this->smarty);
             } 
         } else {
             // error compiling template
@@ -336,9 +336,12 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     {
         if ($this->isCached === null) {
             $this->isCached = false;
-            if (($this->caching == SMARTY_CACHING_LIFETIME_CURRENT || $this->caching == SMARTY_CACHING_LIFETIME_SAVED) && !$this->resource_object->isEvaluated && !$this->force_compile && !$this->force_cache) {
+            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();
+                } 
                 $cachedTimestamp = $this->getCachedTimestamp();
-                if ($cachedTimestamp === false) {
+                if ($cachedTimestamp === false || $this->force_compile || $this->force_cache) {
                     return $this->isCached;
                 } 
                 if ($this->caching === SMARTY_CACHING_LIFETIME_SAVED || ($this->caching == SMARTY_CACHING_LIFETIME_CURRENT && (time() <= ($cachedTimestamp + $this->cache_lifetime) || $this->cache_lifetime < 0))) {
@@ -448,8 +451,13 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         } 
         if ($this->parent instanceof Smarty_Template or $this->parent instanceof Smarty_Internal_Template) {
             $this->parent->properties['file_dependency'] = array_merge($this->parent->properties['file_dependency'], $this->properties['file_dependency']);
-            $this->parent->required_plugins['compiled'] = array_merge($this->parent->required_plugins['compiled'], $this->required_plugins['compiled']);
-            $this->parent->required_plugins['cache'] = array_merge($this->parent->required_plugins['cache'], $this->required_plugins['cache']);
+            foreach($this->required_plugins as $code => $tmp1) {
+                foreach($tmp1 as $name => $tmp) {
+                    foreach($tmp as $type => $data) {
+                        $this->parent->required_plugins[$code][$name][$type] = $data;
+                    } 
+                } 
+            } 
         } 
         if ($this->smarty->debugging) {
             Smarty_Internal_Debug::end_render($this);
@@ -481,7 +489,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
             eval("?>" . $output);
             $this->rendered_content = ob_get_clean(); 
             // write cache file content
-            $this->writeCachedContent($output); 
+            $this->writeCachedContent($output);
             if ($this->smarty->debugging) {
                 Smarty_Internal_Debug::end_cache($this);
             } 
@@ -643,7 +651,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     * @param string $resource_type return resource type
     * @param string $resource_name return resource name
     */
-    private function getResourceTypeName ($template_resource, &$resource_type, &$resource_name)
+    protected function getResourceTypeName ($template_resource, &$resource_type, &$resource_name)
     {
         if (strpos($template_resource, ':') === false) {
             // no resource given, use default
@@ -657,7 +665,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
                 $resource_type = 'file';
                 $resource_name = $template_resource;
             } else {
-                $resource_type = strtolower($resource_type);
+                $resource_type = $resource_type;
             } 
         } 
     } 
@@ -668,7 +676,7 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     * @param string $resource_type template resource type
     * @return object resource handler object
     */
-    private function loadTemplateResourceHandler ($resource_type)
+    protected function loadTemplateResourceHandler ($resource_type)
     { 
         // try registered resource
         if (isset($this->smarty->_plugins['resource'][$resource_type])) {
@@ -719,18 +727,20 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
         if (!$cache) {
             if (!empty($this->required_plugins['compiled'])) {
                 $plugins_string = '<?php ';
-                foreach($this->required_plugins['compiled'] as $plugin_name => $data) {
-                    $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name;
-                    $plugins_string .= "if (!is_callable('{$plugin}')) include '{$data['file']}';\n";
+                foreach($this->required_plugins['compiled'] as $tmp) {
+                    foreach($tmp as $data) {
+                        $plugins_string .= "if (!is_callable('{$data['function']}')) include '{$data['file']}';\n";
+                    } 
                 } 
                 $plugins_string .= '?>';
             } 
-            if (!empty($this->required_plugins['cache'])) {
+            if (!empty($this->required_plugins['nocache'])) {
                 $this->has_nocache_code = true;
                 $plugins_string .= "<?php echo '/*%%SmartyNocache:{$this->properties['nocache_hash']}%%*/<?php ";
-                foreach($this->required_plugins['cache'] as $plugin_name => $data) {
-                    $plugin = 'smarty_' . $data['type'] . '_' . $plugin_name;
-                    $plugins_string .= "if (!is_callable(\'{$plugin}\')) include \'{$data['file']}\';\n";
+                foreach($this->required_plugins['nocache'] as $tmp) {
+                    foreach($tmp as $data) {
+                        $plugins_string .= "if (!is_callable(\'{$data['function']}\')) include \'{$data['file']}\';\n";
+                    } 
                 } 
                 $plugins_string .= "?>/*/%%SmartyNocache:{$this->properties['nocache_hash']}%%*/';?>\n";
             } 
@@ -792,13 +802,6 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
     {
         return $this->smarty->fetch($this);
     } 
-    /**
-    * wrapper for is_cached
-    */
-    public function is_cached ()
-    {
-        return $this->iscached($this);
-    } 
 } 
 
 /**
@@ -807,4 +810,4 @@ class Smarty_Internal_Template extends Smarty_Internal_Data {
 class Smarty_Template extends Smarty_Internal_Template {
 } 
 
-?>
+?>
\ No newline at end of file
index 68e3efd99fcc7c24c1cbb9bc68b0644cc9150678..0b008903f36a03d67bdacc13759cb536b3b925c6 100644 (file)
@@ -1,44 +1,42 @@
 <?php\r
 /**\r
-* Smarty Internal Plugin Smarty Template Compiler Base\r
-* \r
-* This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser\r
-* \r
-* @package Smarty\r
-* @subpackage Compiler\r
-* @author Uwe Tews \r
-*/\r
+ * Smarty Internal Plugin Smarty Template Compiler Base\r
+ \r
+ * This file contains the basic classes and methodes for compiling Smarty templates with lexer/parser\r
+ \r
+ * @package Smarty\r
+ * @subpackage Compiler\r
+ * @author Uwe Tews \r
+ */\r
 /**\r
-* Main compiler class\r
-*/\r
+ * Main compiler class\r
+ */\r
 class Smarty_Internal_TemplateCompilerBase {\r
     // hash for nocache sections\r
     private $nocache_hash = null; \r
     // suppress generation of nocache code\r
-    public $suppressNocacheProcessing = false;\r
+    public $suppressNocacheProcessing = false; \r
     // compile tag objects\r
     static $_tag_objects = array(); \r
     // tag stack\r
     public $_tag_stack = array(); \r
     // current template\r
-    public $template = null; \r
-    // required plugins\r
-    public $required_plugins_call = array(); \r
+    public $template = null;\r
 \r
     /**\r
-    * Initialize compiler\r
-    */\r
+     * Initialize compiler\r
+     */\r
     public function __construct()\r
     {\r
         $this->nocache_hash = str_replace('.', '-', uniqid(rand(), true));\r
     } \r
     // abstract function doCompile($_content);\r
     /**\r
-    * Methode to compile a Smarty template\r
-    * \r
-    * @param  $template template object to compile\r
-    * @return bool true if compiling succeeded, false if it failed\r
-    */\r
+     * Methode to compile a Smarty template\r
+     \r
+     * @param  $template template object to compile\r
+     * @return bool true if compiling succeeded, false if it failed\r
+     */\r
     public function compileTemplate($template)\r
     {\r
         if (empty($template->properties['nocache_hash'])) {\r
@@ -104,15 +102,15 @@ class Smarty_Internal_TemplateCompilerBase {
     } \r
 \r
     /**\r
-    * Compile Tag\r
-    * \r
-    * This is a call back from the lexer/parser\r
-    * It executes the required compile plugin for the Smarty tag\r
-    * \r
-    * @param string $tag tag name\r
-    * @param array $args array with tag attributes\r
-    * @return string compiled code\r
-    */\r
+     * Compile Tag\r
+     \r
+     * This is a call back from the lexer/parser\r
+     * It executes the required compile plugin for the Smarty tag\r
+     \r
+     * @param string $tag tag name\r
+     * @param array $args array with tag attributes\r
+     * @return string compiled code\r
+     */\r
     public function compileTag($tag, $args)\r
     { \r
         // $args contains the attributes parsed and compiled by the lexer/parser\r
@@ -177,14 +175,16 @@ class Smarty_Internal_TemplateCompilerBase {
                 foreach ($this->smarty->plugin_search_order as $plugin_type) {\r
                     if ($plugin_type == 'compiler' && $this->smarty->loadPlugin('smarty_compiler_' . $tag)) {\r
                         $plugin = 'smarty_compiler_' . $tag;\r
-                        if (class_exists($plugin, false)) {\r
-                            $plugin = array(new $plugin, 'compile');\r
-                        } \r
                         if (is_callable($plugin)) {\r
-                            return call_user_func_array($plugin, array($args, $this));\r
-                        } else {\r
-                            throw new Exception("Plugin \"{$tag}\" not callable");\r
+                            return $plugin($args, $this->smarty);\r
+                        } \r
+                        if (class_exists($plugin, false)) {\r
+                            $plugin_object = new $plugin;\r
+                            if (method_exists($plugin_object, 'compile')) {\r
+                                return $plugin_object->compile($args, $this);\r
+                            } \r
                         } \r
+                        throw new Exception("Plugin \"{$tag}\" not callable");\r
                     } else {\r
                         if ($function = $this->getPlugin($tag, $plugin_type)) {\r
                             return $this->callTagCompiler('private_' . $plugin_type . '_plugin', $args, $tag, $function);\r
@@ -214,14 +214,16 @@ class Smarty_Internal_TemplateCompilerBase {
                 } \r
                 if ($this->smarty->loadPlugin('smarty_compiler_' . $tag)) {\r
                     $plugin = 'smarty_compiler_' . $tag;\r
-                    if (class_exists($plugin, false)) {\r
-                        $plugin = array(new $plugin, 'compile');\r
-                    } \r
                     if (is_callable($plugin)) {\r
-                        return call_user_func_array($plugin, array($args, $this));\r
-                    } else {\r
-                        throw new Exception("Plugin \"{$tag}\" not callable");\r
+                        return $plugin($args, $this->smarty);\r
                     } \r
+                    if (class_exists($plugin, false)) {\r
+                        $plugin_object = new $plugin;\r
+                        if (method_exists($plugin_object, 'compile')) {\r
+                            return $plugin_object->compile($args, $this);\r
+                        } \r
+                    } \r
+                    throw new Exception("Plugin \"{$tag}\" not callable");\r
                 } \r
             } \r
             $this->trigger_template_error ("unknown tag \"" . $tag . "\"", $this->lex->taglineno);\r
@@ -229,25 +231,25 @@ class Smarty_Internal_TemplateCompilerBase {
     } \r
 \r
     /**\r
-    * lazy loads internal compile plugin for tag and calls the compile methode\r
-    * \r
-    * compile objects cached for reuse.\r
-    * class name format:  Smarty_Internal_Compile_TagName\r
-    * plugin filename format: Smarty_Internal_Tagname.php\r
-    * \r
-    * @param  $tag string tag name\r
-    * @param  $args array with tag attributes\r
-    * @param  $param1 optional parameter\r
-    * @param  $param2 optional parameter\r
-    * @param  $param3 optional parameter\r
-    * @return string compiled code\r
-    */\r
+     * lazy loads internal compile plugin for tag and calls the compile methode\r
+     \r
+     * compile objects cached for reuse.\r
+     * class name format:  Smarty_Internal_Compile_TagName\r
+     * plugin filename format: Smarty_Internal_Tagname.php\r
+     \r
+     * @param  $tag string tag name\r
+     * @param  $args array with tag attributes\r
+     * @param  $param1 optional parameter\r
+     * @param  $param2 optional parameter\r
+     * @param  $param3 optional parameter\r
+     * @return string compiled code\r
+     */\r
     public function callTagCompiler($tag, $args, $param1 = null, $param2 = null, $param3 = null)\r
     { \r
         // re-use object if already exists\r
         if (isset(self::$_tag_objects[$tag])) {\r
             // compile this tag\r
-            return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $param1, $param2, $param3);\r
+            return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);\r
         } \r
         // lazy load internal compiler plugin\r
         $class_name = 'Smarty_Internal_Compile_' . $tag;\r
@@ -255,38 +257,62 @@ class Smarty_Internal_TemplateCompilerBase {
             // use plugin if found\r
             self::$_tag_objects[$tag] = new $class_name; \r
             // compile this tag\r
-            return call_user_func(array(self::$_tag_objects[$tag], 'compile'), $args, $this, $param1, $param2, $param3);\r
+            return self::$_tag_objects[$tag]->compile($args, $this, $param1, $param2, $param3);\r
         } \r
         // no internal compile plugin for this tag\r
         return false;\r
     } \r
 \r
     /**\r
-    * Check for plugins and return function name\r
-    * \r
-    * @param  $pugin_name string name of plugin or function\r
-    * @param  $type string type of plugin\r
-    * @return string call name of function\r
-    */\r
+     * Check for plugins and return function name\r
+     \r
+     * @param  $pugin_name string name of plugin or function\r
+     * @param  $type string type of plugin\r
+     * @return string call name of function\r
+     */\r
     public function getPlugin($plugin_name, $type)\r
     {\r
-        if (isset($this->template->required_plugins_call[$plugin_name][$type])) {\r
-            if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-                if (isset($this->template->required_plugins['compiled'][$plugin_name])) {\r
-                    $this->template->required_plugins['cache'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name];\r
-                } \r
-            } else {\r
-                if (isset($this->template->required_plugins['cache'][$plugin_name])) {\r
-                    $this->template->required_plugins['compiled'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name];\r
-                } \r
+        $function = null;\r
+        if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
+            if (isset($this->template->required_plugins['nocache'][$plugin_name][$type])) {\r
+                $function = $this->template->required_plugins['nocache'][$plugin_name][$type]['function'];\r
+            } else if (isset($this->template->required_plugins['compiled'][$plugin_name][$type])) {\r
+                $this->template->required_plugins['nocache'][$plugin_name][$type] = $this->template->required_plugins['compiled'][$plugin_name][$type];\r
+                $function = $this->template->required_plugins['nocache'][$plugin_name][$type]['function'];\r
+            } \r
+        } else {\r
+            if (isset($this->template->required_plugins['compiled'][$plugin_name][$type])) {\r
+                $function = $this->template->required_plugins['compiled'][$plugin_name][$type]['function'];\r
+            } else if (isset($this->template->required_plugins['compiled'][$plugin_name][$type])) {\r
+                $this->template->required_plugins['compiled'][$plugin_name][$type] = $this->template->required_plugins['nocache'][$plugin_name][$type];\r
+                $function = $this->template->required_plugins['compiled'][$plugin_name][$type]['function'];\r
             } \r
+        } \r
+        if (isset($function)) {\r
             if ($type == 'modifier') {\r
                 $this->template->saved_modifer[$plugin_name] = true;\r
             } \r
-            return $this->template->required_plugins_call[$plugin_name][$type];\r
+            return $function;\r
         } \r
+        /**\r
+         * if (isset($this->template->required_plugins_call[$plugin_name][$type])) {\r
+         * if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
+         * if (isset($this->template->required_plugins['compiled'][$plugin_name])) {\r
+         * $this->template->required_plugins['cache'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name];\r
+         * } \r
+         * } else {\r
+         * if (isset($this->template->required_plugins['cache'][$plugin_name])) {\r
+         * $this->template->required_plugins['compiled'][$plugin_name] = $this->template->required_plugins['cache'][$plugin_name];\r
+         * } \r
+         * } \r
+         * if ($type == 'modifier') {\r
+         * $this->template->saved_modifer[$plugin_name] = true;\r
+         * } \r
+         * return $this->template->required_plugins_call[$plugin_name][$type];\r
+         * }\r
+         */\r
         // loop through plugin dirs and find the plugin\r
-        $plugin = 'smarty_' . $type . '_' . $plugin_name;\r
+        $function = 'smarty_' . $type . '_' . $plugin_name;\r
         $found = false;\r
         foreach((array)$this->smarty->plugins_dir as $_plugin_dir) {\r
             $file = rtrim($_plugin_dir, '/\\') . DS . $type . '.' . $plugin_name . '.php';\r
@@ -298,38 +324,46 @@ class Smarty_Internal_TemplateCompilerBase {
         } \r
         if ($found) {\r
             // if (is_callable($plugin)) {\r
-            $this->template->required_plugins_call[$plugin_name][$type] = $plugin;\r
             if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
-                $this->template->required_plugins['cache'][$plugin_name]['file'] = $file;\r
-                $this->template->required_plugins['cache'][$plugin_name]['type'] = $type;\r
+                $this->template->required_plugins['nocache'][$plugin_name][$type]['file'] = $file;\r
+                $this->template->required_plugins['nocache'][$plugin_name][$type]['function'] = $function;\r
             } else {\r
-                $this->template->required_plugins['compiled'][$plugin_name]['file'] = $file;\r
-                $this->template->required_plugins['compiled'][$plugin_name]['type'] = $type;\r
+                $this->template->required_plugins['compiled'][$plugin_name][$type]['file'] = $file;\r
+                $this->template->required_plugins['compiled'][$plugin_name][$type]['function'] = $function;\r
             } \r
+            /**\r
+             * $this->template->required_plugins_call[$plugin_name][$type] = $plugin;\r
+             * if ($this->template->caching && ($this->nocache || $this->tag_nocache)) {\r
+             * $this->template->required_plugins['cache'][$plugin_name]['file'] = $file;\r
+             * $this->template->required_plugins['cache'][$plugin_name]['type'] = $type;\r
+             * } else {\r
+             * $this->template->required_plugins['compiled'][$plugin_name]['file'] = $file;\r
+             * $this->template->required_plugins['compiled'][$plugin_name]['type'] = $type;\r
+             * }\r
+             */\r
             if ($type == 'modifier') {\r
                 $this->template->saved_modifer[$plugin_name] = true;\r
             } \r
-\r
-            return $plugin;\r
+            return $function;\r
         } \r
-        if (is_callable($plugin)) {\r
+        if (is_callable($function)) {\r
             // plugin function is defined in the script\r
-            return $plugin;\r
+            return $function;\r
         } \r
         return false;\r
     } \r
     /**\r
-    * Inject inline code for nocache template sections\r
-    * \r
-    * This method gets the content of each template element from the parser.\r
-    * If the content is compiled code and it should be not cached the code is injected\r
-    * into the rendered output.\r
-    * \r
-    * @param string $content content of template element\r
-    * @param boolean $tag_nocache true if the parser detected a nocache situation\r
-    * @param boolean $is_code true if content is compiled code\r
-    * @return string content\r
-    */\r
+     * Inject inline code for nocache template sections\r
+     \r
+     * This method gets the content of each template element from the parser.\r
+     * If the content is compiled code and it should be not cached the code is injected\r
+     * into the rendered output.\r
+     \r
+     * @param string $content content of template element\r
+     * @param boolean $tag_nocache true if the parser detected a nocache situation\r
+     * @param boolean $is_code true if content is compiled code\r
+     * @return string content\r
+     */\r
     public function processNocacheCode ($content, $is_code)\r
     { \r
         // If the template is not evaluated and we have a nocache section and or a nocache tag\r
@@ -344,8 +378,8 @@ class Smarty_Internal_TemplateCompilerBase {
                 // 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->required_plugins['compiled'][$plugin_name])) {\r
-                            $this->template->required_plugins['cache'][$plugin_name] = $this->template->required_plugins['compiled'][$plugin_name];\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
@@ -360,15 +394,15 @@ class Smarty_Internal_TemplateCompilerBase {
         return $_output;\r
     } \r
     /**\r
-    * display compiler error messages without dying\r
-    * \r
-    * If parameter $args is empty it is a parser detected syntax error.\r
-    * In this case the parser is called to obtain information about expected tokens.\r
-    * \r
-    * If parameter $args contains a string this is used as error message\r
-    * \r
-    * @param  $args string individual error message or null\r
-    */\r
+     * display compiler error messages without dying\r
+     \r
+     * If parameter $args is empty it is a parser detected syntax error.\r
+     * In this case the parser is called to obtain information about expected tokens.\r
+     \r
+     * If parameter $args contains a string this is used as error message\r
+     \r
+     * @param  $args string individual error message or null\r
+     */\r
     public function trigger_template_error($args = null, $line = null)\r
     { \r
         // get template source line which has error\r
@@ -376,7 +410,7 @@ class Smarty_Internal_TemplateCompilerBase {
             $line = $this->lex->line;\r
         } \r
         $match = preg_split("/\n/", $this->lex->data);\r
-        $error_text = 'Syntax Error in template "' . $this->template->getTemplateFilepath() . '"  on line ' . $line . ' "' . $match[$line-1] . '" ';\r
+        $error_text = 'Syntax Error in template "' . $this->template->getTemplateFilepath() . '"  on line ' . $line . ' "' . htmlspecialchars($match[$line-1]) . '" ';\r
         if (isset($args)) {\r
             // individual error message\r
             $error_text .= $args;\r
@@ -401,4 +435,4 @@ class Smarty_Internal_TemplateCompilerBase {
     } \r
 } \r
 \r
-?>\r
+?>
\ No newline at end of file
index fb259847f071831f746ac144310f36e8d40a5645..4a9ab57882b37b6182c310f67a4e5a389579cb54 100644 (file)
@@ -82,7 +82,8 @@ class Smarty_Internal_Templatelexer
     {
         // set instance object
         self::instance($this); 
-        $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
+//        $this->data = preg_replace("/(\r\n|\r|\n)/", "\n", $data);
+        $this->data = $data;
         $this->counter = 0;
         $this->line = 1;
         $this->smarty = $compiler->smarty;
@@ -148,7 +149,7 @@ class Smarty_Internal_Templatelexer
         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,6 +215,8 @@ 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 {
     $this->token = Smarty_Internal_Templateparser::TP_FAKEPHPSTARTTAG;
     $this->value = substr($this->value, 0, 2);
@@ -286,16 +289,6 @@ class Smarty_Internal_Templatelexer
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
-  if (substr($this->value,-2) == '<?') {
-     $this->value = substr($this->value,0,-2);
-  } elseif (substr($this->value,-strlen($this->smarty->left_delimiter)) == $this->smarty->left_delimiter){
-     $this->value = substr($this->value,0,-strlen($this->smarty->left_delimiter));
-  } else {
-     $this->value = rtrim($this->value);
-  }
-  if (strlen($this->value) == 0) {
-     return true;              // rescan
-  }
     }
     function yy_r1_16($yy_subpatterns)
     {
@@ -307,15 +300,15 @@ class Smarty_Internal_Templatelexer
     function yylex2()
     {
         $tokenMap = array (
-              1 => 1,
+              1 => 0,
+              2 => 0,
               3 => 0,
               4 => 0,
               5 => 0,
               6 => 0,
               7 => 0,
               8 => 0,
-              9 => 0,
-              10 => 0,
+              9 => 1,
               11 => 1,
               13 => 1,
               15 => 0,
@@ -379,7 +372,7 @@ class Smarty_Internal_Templatelexer
         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+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+)|^(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+)|^(.)/";
 
         do {
             if (preg_match($yy_global_pattern, substr($this->data, $this->counter), $yymatches)) {
@@ -432,14 +425,9 @@ class Smarty_Internal_Templatelexer
     function yy_r2_1($yy_subpatterns)
     {
 
-  $this->token = Smarty_Internal_Templateparser::TP_OTHER;
-    }
-    function yy_r2_3($yy_subpatterns)
-    {
-
   $this->token = Smarty_Internal_Templateparser::TP_SINGLEQUOTESTRING;
     }
-    function yy_r2_4($yy_subpatterns)
+    function yy_r2_2($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -450,7 +438,7 @@ class Smarty_Internal_Templatelexer
      $this->taglineno = $this->line;
   }
     }
-    function yy_r2_5($yy_subpatterns)
+    function yy_r2_3($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -461,7 +449,7 @@ class Smarty_Internal_Templatelexer
      $this->taglineno = $this->line;
   }
     }
-    function yy_r2_6($yy_subpatterns)
+    function yy_r2_4($yy_subpatterns)
     {
 
   if ($this->smarty->auto_literal) {
@@ -471,40 +459,45 @@ class Smarty_Internal_Templatelexer
      $this->yypopstate();
   }
     }
-    function yy_r2_7($yy_subpatterns)
+    function yy_r2_5($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDELSLASH;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r2_8($yy_subpatterns)
+    function yy_r2_6($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_LDEL;
      $this->yypushstate(self::SMARTY);
      $this->taglineno = $this->line;
     }
-    function yy_r2_9($yy_subpatterns)
+    function yy_r2_7($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_RDEL;
      $this->yypopstate();
     }
-    function yy_r2_10($yy_subpatterns)
+    function yy_r2_8($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_ISIN;
     }
-    function yy_r2_11($yy_subpatterns)
+    function yy_r2_9($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_AS;
     }
-    function yy_r2_13($yy_subpatterns)
+    function yy_r2_11($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_TO;
+    }
+    function yy_r2_13($yy_subpatterns)
+    {
+
+  $this->token = Smarty_Internal_Templateparser::TP_STEP;
     }
     function yy_r2_15($yy_subpatterns)
     {
@@ -1573,13 +1566,13 @@ class Smarty_Internal_Templatelexer
               2 => 0,
               3 => 0,
               4 => 0,
-              5 => 1,
-              7 => 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]+)/";
+        $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)) {
@@ -1659,20 +1652,9 @@ class Smarty_Internal_Templatelexer
     function yy_r12_5($yy_subpatterns)
     {
 
-  $lenght_literal = strlen($this->smarty->left_delimiter.$this->smarty->right_delimiter)+7;
-  if (substr($this->value,-2,2) === '<?') {
-    $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    $this->value = substr($this->value,0,-2);
-  } else if (substr($this->value,-$lenght_literal,$lenght_literal) === $this->smarty->left_delimiter.'literal'.$this->smarty->right_delimiter) {
-    $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    $this->value = substr($this->value,0,-$lenght_literal);
-  } else {
-    assert(substr($this->value,-$lenght_literal-1,$lenght_literal+1) === $this->smarty->left_delimiter.'/literal'.$this->smarty->right_delimiter);
-    $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
-    $this->value = substr($this->value,0,-$lenght_literal-1);
-  }
+  $this->token = Smarty_Internal_Templateparser::TP_LITERAL;
     }
-    function yy_r12_7($yy_subpatterns)
+    function yy_r12_8($yy_subpatterns)
     {
 
   $this->compiler->trigger_template_error ("missing or misspelled literal closing tag");
@@ -1690,13 +1672,13 @@ class Smarty_Internal_Templatelexer
               6 => 0,
               7 => 0,
               8 => 0,
-              9 => 2,
-              12 => 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.")|^(\")|^(`\\$)|^(\\$\\w+)|^(\\$)|^(([\S\s]*?)(".$this->ldel."|\\$|`\\$|\\\\\\\\|[^\\\\]\"))|^([\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)) {
@@ -1810,18 +1792,8 @@ class Smarty_Internal_Templatelexer
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
-  if (substr($this->value,-strlen($this->smarty->left_delimiter)) == $this->smarty->left_delimiter) {
-     $this->value = substr($this->value,0,-strlen($this->smarty->left_delimiter));
-  } elseif (substr($this->value,-2) == '`$') {
-    $this->value = substr($this->value,0,-2);  
-  } elseif (strpbrk(substr($this->value,-1),'"$') !== false) {
-    $this->value = substr($this->value,0,-1);
-  } 
-  if (strlen($this->value) == 0) {
-     return true;              // rescan
-  }
     }
-    function yy_r13_12($yy_subpatterns)
+    function yy_r13_13($yy_subpatterns)
     {
 
   $this->token = Smarty_Internal_Templateparser::TP_OTHER;
index 3ad06029e270bb07a701fa24b09f24b06f43ffe1..8e1531cf39f2e137bdd26e5bffd6d395d1f12dcf 100644 (file)
@@ -109,6 +109,7 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
         $this->compiler->has_variable_string = false;\r
                                $this->compiler->prefix_code = array();\r
                                $this->prefix_number = 0;\r
+                               $this->block_nesting_level = 0;\r
     }\r
     public static function &instance($new_instance = null)\r
     {\r
@@ -130,772 +131,815 @@ class Smarty_Internal_Templateparser#line 79 "smarty_internal_templateparser.php
     }\r
 \r
     \r
-#line 126 "smarty_internal_templateparser.php"\r
+#line 127 "smarty_internal_templateparser.php"\r
 \r
-    const TP_COMMENT                        =  1;\r
-    const TP_PHPSTARTTAG                    =  2;\r
-    const TP_PHPENDTAG                      =  3;\r
-    const TP_OTHER                          =  4;\r
-    const TP_FAKEPHPSTARTTAG                =  5;\r
-    const TP_PHP_CODE                       =  6;\r
-    const TP_PHP_CODE_START_DOUBLEQUOTE     =  7;\r
-    const TP_PHP_CODE_DOUBLEQUOTE           =  8;\r
-    const TP_PHP_HEREDOC_START              =  9;\r
-    const TP_PHP_HEREDOC_END                = 10;\r
-    const TP_PHP_NOWDOC_START               = 11;\r
-    const TP_PHP_NOWDOC_END                 = 12;\r
-    const TP_PHP_DQ_CONTENT                 = 13;\r
-    const TP_PHP_DQ_EMBED_START             = 14;\r
-    const TP_PHP_DQ_EMBED_END               = 15;\r
-    const TP_LITERALSTART                   = 16;\r
-    const TP_LITERALEND                     = 17;\r
-    const TP_LITERAL                        = 18;\r
-    const TP_LDEL                           = 19;\r
-    const TP_RDEL                           = 20;\r
-    const TP_DOLLAR                         = 21;\r
-    const TP_ID                             = 22;\r
-    const TP_EQUAL                          = 23;\r
-    const TP_FOREACH                        = 24;\r
-    const TP_PTR                            = 25;\r
-    const TP_IF                             = 26;\r
-    const TP_SPACE                          = 27;\r
-    const TP_UNIMATH                        = 28;\r
-    const TP_FOR                            = 29;\r
-    const TP_SEMICOLON                      = 30;\r
-    const TP_INCDEC                         = 31;\r
-    const TP_TO                             = 32;\r
-    const TP_AS                             = 33;\r
-    const TP_APTR                           = 34;\r
-    const TP_LDELSLASH                      = 35;\r
-    const TP_INTEGER                        = 36;\r
-    const TP_COMMA                          = 37;\r
-    const TP_COLON                          = 38;\r
-    const TP_MATH                           = 39;\r
-    const TP_ANDSYM                         = 40;\r
-    const TP_OPENP                          = 41;\r
-    const TP_CLOSEP                         = 42;\r
-    const TP_QMARK                          = 43;\r
-    const TP_NOT                            = 44;\r
-    const TP_TYPECAST                       = 45;\r
-    const TP_DOT                            = 46;\r
-    const TP_BOOLEAN                        = 47;\r
-    const TP_NULL                           = 48;\r
-    const TP_SINGLEQUOTESTRING              = 49;\r
-    const TP_QUOTE                          = 50;\r
-    const TP_DOUBLECOLON                    = 51;\r
-    const TP_AT                             = 52;\r
-    const TP_HATCH                          = 53;\r
-    const TP_OPENB                          = 54;\r
-    const TP_CLOSEB                         = 55;\r
-    const TP_VERT                           = 56;\r
-    const TP_ISIN                           = 57;\r
-    const TP_ISDIVBY                        = 58;\r
-    const TP_ISNOTDIVBY                     = 59;\r
-    const TP_ISEVEN                         = 60;\r
-    const TP_ISNOTEVEN                      = 61;\r
-    const TP_ISEVENBY                       = 62;\r
-    const TP_ISNOTEVENBY                    = 63;\r
-    const TP_ISODD                          = 64;\r
-    const TP_ISNOTODD                       = 65;\r
-    const TP_ISODDBY                        = 66;\r
-    const TP_ISNOTODDBY                     = 67;\r
-    const TP_INSTANCEOF                     = 68;\r
-    const TP_EQUALS                         = 69;\r
-    const TP_NOTEQUALS                      = 70;\r
-    const TP_GREATERTHAN                    = 71;\r
-    const TP_LESSTHAN                       = 72;\r
-    const TP_GREATEREQUAL                   = 73;\r
-    const TP_LESSEQUAL                      = 74;\r
-    const TP_IDENTITY                       = 75;\r
-    const TP_NONEIDENTITY                   = 76;\r
-    const TP_MOD                            = 77;\r
-    const TP_LAND                           = 78;\r
-    const TP_LOR                            = 79;\r
-    const TP_LXOR                           = 80;\r
-    const TP_BACKTICK                       = 81;\r
-    const TP_DOLLARID                       = 82;\r
-    const YY_NO_ACTION = 613;\r
-    const YY_ACCEPT_ACTION = 612;\r
-    const YY_ERROR_ACTION = 611;\r
+    const TP_VERT                           =  1;\r
+    const TP_COLON                          =  2;\r
+    const TP_COMMENT                        =  3;\r
+    const TP_PHPSTARTTAG                    =  4;\r
+    const TP_PHPENDTAG                      =  5;\r
+    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
 \r
-    const YY_SZ_ACTTAB = 1771;\r
+    const YY_SZ_ACTTAB = 1995;\r
 static public $yy_action = array(\r
- /*     0 */    19,   25,   98,   62,  192,  106,  376,  210,  202,   48,\r
- /*    10 */   224,  228,   42,  214,   22,  188,  129,  225,  330,   95,\r
- /*    20 */   202,   92,   11,   96,  143,   52,   50,   22,  300,  301,\r
- /*    30 */   312,   61,   97,  282,   65,   14,   19,  143,  100,  194,\r
- /*    40 */   344,  339,  202,  340,  141,   48,  612,   59,  273,  332,\r
- /*    50 */   335,  202,  129,  225,   60,  346,  345,   51,   26,  304,\r
- /*    60 */    28,   52,   50,  226,  300,  301,  312,   61,   47,   49,\r
- /*    70 */    65,   14,  264,   19,    9,   89,  209,  253,  344,  339,\r
- /*    80 */   328,  340,   48,  229,  267,   27,  362,  100,  157,  129,\r
- /*    90 */   225,    2,   60,   30,  345,   26,  317,   33,   52,   50,\r
- /*   100 */   202,  300,  301,  312,   61,  285,  240,   65,   14,   19,\r
- /*   110 */    22,   89,  209,   30,  310,  254,  317,   32,   48,   65,\r
- /*   120 */   143,   51,  269,  326,  266,  129,  225,  217,  258,  476,\r
- /*   130 */    51,    5,   47,   49,    8,   50,  476,  300,  301,  312,\r
- /*   140 */    61,   47,   49,   65,   14,   19,  216,   89,  199,   64,\r
- /*   150 */    22,  274,  324,  277,   48,  236,  275,  239,  475,  214,\r
- /*   160 */   143,  129,  225,   30,  368,  214,  317,   26,  187,  303,\r
- /*   170 */    52,   50,  351,  300,  301,  312,   61,    1,  218,   65,\r
- /*   180 */    14,   19,  303,  100,  203,  150,   30,  369,  202,  317,\r
- /*   190 */    48,  186,  100,  241,  127,   22,   30,  129,  225,  317,\r
- /*   200 */   304,  248,  256,   26,  202,  143,   52,   50,  391,  300,\r
- /*   210 */   301,  312,   61,  289,   39,   65,   14,   19,  191,  100,\r
- /*   220 */   213,   40,  109,    4,   65,   56,   48,   30,   22,  216,\r
- /*   230 */   317,   32,  287,  129,  225,  138,  270,  479,  143,   26,\r
- /*   240 */   386,  186,   52,   50,  479,  300,  301,  312,   61,  202,\r
- /*   250 */   304,   65,   14,   19,   29,  100,  200,   56,   30,  367,\r
- /*   260 */    30,  317,   48,  317,   39,  406,  313,    3,   10,  129,\r
- /*   270 */   207,   30,  370,  214,  317,   26,   23,  303,   52,   50,\r
- /*   280 */   156,  300,  301,  312,   61,   53,  186,   65,   14,   19,\r
- /*   290 */   293,   89,  193,  221,  352,  304,  388,  177,   48,  246,\r
- /*   300 */   320,  214,  319,  109,  350,  129,  225,  144,   56,  242,\r
- /*   310 */    63,   16,  303,  186,    8,   50,  147,  300,  301,  312,\r
- /*   320 */    61,  386,  304,   65,   14,   19,  186,  103,  209,  192,\r
- /*   330 */   202,  304,  281,  153,   48,  327,   83,   42,  293,  190,\r
- /*   340 */    41,  129,  225,  306,   53,  238,   90,    5,  304,   39,\r
- /*   350 */     8,   50,  164,  300,  301,  312,   61,  214,  202,   65,\r
- /*   360 */    14,   19,  186,   89,  209,   78,  271,  304,   43,  152,\r
- /*   370 */    48,  333,  332,  335,  220,  185,  350,  129,  225,  306,\r
- /*   380 */   262,  349,   63,   16,  304,   39,    8,   50,  146,  300,\r
- /*   390 */   301,  312,   61,   35,  348,   65,   14,   19,    9,  100,\r
- /*   400 */   213,  140,  404,  304,  261,  374,   48,  189,  360,  214,\r
- /*   410 */   373,  202,  214,  129,  225,  214,  304,  214,    9,   26,\r
- /*   420 */   202,   45,   52,   50,  245,  300,  301,  312,   61,  260,\r
- /*   430 */    90,   65,   31,  400,  396,  395,  397,  398,  399,  380,\r
- /*   440 */   379,  361,    6,    7,  296,  359,   13,   12,  358,  354,\r
- /*   450 */    18,   17,  342,  169,   68,   44,  202,  101,  290,  214,\r
- /*   460 */   168,  135,  353,  355,  356,   19,   30,  100,  208,  317,\r
- /*   470 */   375,  372,  268,  378,   48,   85,  304,  214,  214,  366,\r
- /*   480 */   214,  129,  225,  279,  278,  223,  214,   26,  306,  391,\r
- /*   490 */    52,   50,   66,  300,  301,  312,   61,   21,  173,   65,\r
- /*   500 */   133,    6,    7,  296,  359,   13,   12,  358,  354,   18,\r
- /*   510 */    17,  365,  389,  214,  391,  384,  186,  305,  214,  214,\r
- /*   520 */   181,  353,  355,  356,  214,  319,    6,    7,  296,  359,\r
- /*   530 */    13,   12,  358,  354,   18,   17,  364,  155,  323,   24,\r
- /*   540 */   322,  178,  202,  377,  357,  214,  353,  355,  356,  130,\r
- /*   550 */   214,  214,    6,    7,  296,  359,   13,   12,  358,  354,\r
- /*   560 */    18,   17,   30,  391,  252,  211,  159,  371,  314,  311,\r
- /*   570 */   142,  283,  353,  355,  356,  214,  214,  154,  214,  136,\r
- /*   580 */     6,    7,  296,  359,   13,   12,  358,  354,   18,   17,\r
- /*   590 */   215,   82,  304,   30,  304,  390,  247,  341,  331,   82,\r
- /*   600 */   353,  355,  356,  255,  214,    6,    7,  296,  359,   13,\r
- /*   610 */    12,  358,  354,   18,   17,  214,   70,  202,   45,  235,\r
- /*   620 */    90,  325,   90,  250,   82,  353,  355,  356,  128,  362,\r
- /*   630 */   400,  396,  395,  397,  398,  399,  380,  379,  361,  251,\r
- /*   640 */   205,  107,  391,  202,   45,  145,    6,    7,  296,  359,\r
- /*   650 */    13,   12,  358,  354,   18,   17,  400,  396,  395,  397,\r
- /*   660 */   398,  399,  380,  379,  361,  131,  353,  355,  356,    6,\r
- /*   670 */     7,  296,  359,   13,   12,  358,  354,   18,   17,  391,\r
- /*   680 */   334,   80,  299,  338,  347,   73,  132,  477,  257,  353,\r
- /*   690 */   355,  356,  175,  165,  477,   60,  475,  319,   19,  387,\r
- /*   700 */   391,  322,  387,  214,  151,  163,  180,  234,  304,  233,\r
- /*   710 */   302,  319,  233,  109,  129,  158,  109,   38,   88,  304,\r
- /*   720 */   304,  237,  315,  202,   45,  309,  321,  336,  309,  394,\r
- /*   730 */   304,  386,  202,   45,  386,  276,  400,  396,  395,  397,\r
- /*   740 */   398,  399,  380,  379,  361,  400,  396,  395,  397,  398,\r
- /*   750 */   399,  380,  379,  361,  403,  387,   34,   81,  337,   79,\r
- /*   760 */   318,  214,  387,  197,  183,  233,   74,  272,  124,  109,\r
- /*   770 */   401,  391,  233,  391,  227,   36,  109,  392,   93,  295,\r
- /*   780 */   201,  309,  294,  240,  405,   53,  294,  386,  309,   28,\r
- /*   790 */   202,   45,  363,  102,  386,  329,   71,   20,  111,  381,\r
- /*   800 */   229,   20,  263,  400,  396,  395,  397,  398,  399,  380,\r
- /*   810 */   379,  361,  387,  129,    1,   99,   23,  129,  265,  343,\r
- /*   820 */   204,  320,  233,   55,  105,   57,  109,   43,  280,  214,\r
- /*   830 */   160,  108,  292,   46,  392,  322,  219,  201,  309,  286,\r
- /*   840 */   387,  230,  306,  382,  386,   91,   15,  336,  249,  363,\r
- /*   850 */   233,   77,  284,  117,  109,  336,  336,  243,  336,   37,\r
- /*   860 */   288,  336,  392,   37,  288,  201,  309,  336,  387,  336,\r
- /*   870 */   336,  336,  386,  336,  336,  336,  249,  363,  233,   54,\r
- /*   880 */   110,   58,  109,  336,  336,  336,  336,  336,  336,  336,\r
- /*   890 */   392,  336,  336,  201,  309,  336,  387,  336,  336,  336,\r
- /*   900 */   386,  336,  336,  336,  249,  363,  233,   77,  336,  125,\r
- /*   910 */   109,  336,  336,  336,  336,  336,  336,  336,  392,  336,\r
- /*   920 */   336,  201,  309,  336,  336,  336,  387,  336,  386,  336,\r
- /*   930 */   336,  336,  336,  363,  249,  336,  233,   77,  336,  113,\r
- /*   940 */   109,  336,  336,  336,  336,  387,  336,  336,  392,  336,\r
- /*   950 */   336,  201,  309,  291,  387,  233,  336,  336,  386,  109,\r
- /*   960 */   336,  336,  259,  363,  233,   77,  336,  126,  109,  336,\r
- /*   970 */   336,  309,  336,  336,  336,  336,  392,  386,  336,  201,\r
- /*   980 */   309,  336,  387,  336,  336,  336,  386,  336,  336,  336,\r
- /*   990 */   249,  363,  233,   77,  336,  122,  109,  336,  336,  336,\r
- /*  1000 */   336,  336,  336,  336,  392,  336,  336,  201,  309,  336,\r
- /*  1010 */   387,  336,  336,  336,  386,  336,  336,  336,  249,  363,\r
- /*  1020 */   233,   77,  336,  115,  109,  336,  336,  336,  336,  336,\r
- /*  1030 */   336,  336,  392,  336,  336,  201,  309,  336,  336,  336,\r
- /*  1040 */   387,  336,  386,  336,  336,  336,  336,  363,  249,  336,\r
- /*  1050 */   233,   76,  336,  116,  109,  336,  336,  336,  336,  387,\r
- /*  1060 */   336,  336,  392,  336,  336,  201,  309,  297,  387,  233,\r
- /*  1070 */   336,  336,  386,  109,  336,  336,  249,  363,  233,   77,\r
- /*  1080 */   336,  120,  109,  336,  336,  309,  336,  336,  336,  336,\r
- /*  1090 */   392,  386,  336,  201,  309,  336,  387,  336,  336,  336,\r
- /*  1100 */   386,  336,  336,  336,  249,  363,  233,   77,  336,  123,\r
- /*  1110 */   109,  336,  336,  336,  336,  336,  336,  336,  392,  336,\r
- /*  1120 */   336,  201,  309,  336,  387,  336,  336,  336,  386,  336,\r
- /*  1130 */   336,  336,  244,  363,  233,  179,  336,  336,  109,  336,\r
- /*  1140 */   336,  336,  336,  336,  336,  336,  392,  336,  336,  201,\r
- /*  1150 */   309,  336,  336,  336,  336,  336,  386,  336,  336,  336,\r
- /*  1160 */   387,  336,  336,  336,  206,  393,  336,  336,  249,  336,\r
- /*  1170 */   233,   77,  336,  118,  109,  336,  336,  336,  336,  387,\r
- /*  1180 */   336,  336,  392,  336,  336,  201,  309,  316,  387,  233,\r
- /*  1190 */   336,  336,  386,  109,  336,  336,  249,  363,  233,   77,\r
- /*  1200 */   336,  121,  109,  336,  336,  309,  336,  336,  336,  336,\r
- /*  1210 */   392,  386,  336,  201,  309,  336,  387,  336,  336,  336,\r
- /*  1220 */   386,  336,  336,  336,  249,  363,  233,   76,  336,  114,\r
- /*  1230 */   109,  336,  336,  336,  336,  336,  336,  336,  392,  336,\r
- /*  1240 */   336,  201,  309,  336,  387,  336,  336,  336,  386,  336,\r
- /*  1250 */   336,  336,  249,  363,  233,   77,  336,  119,  109,  336,\r
- /*  1260 */   336,  336,  336,  336,  336,  336,  392,  336,  336,  201,\r
- /*  1270 */   309,  336,  336,  336,  387,  336,  386,  336,  336,  336,\r
- /*  1280 */   336,  363,  249,  336,  233,   75,  336,  112,  109,  336,\r
- /*  1290 */   336,  336,  336,  336,  336,  336,  392,  336,  336,  201,\r
- /*  1300 */   309,  336,  387,  336,  336,  336,  386,  336,  336,  336,\r
- /*  1310 */   244,  363,  233,  179,  336,  387,  109,  336,  336,  336,\r
- /*  1320 */   336,  336,  336,  307,  392,  233,  161,  201,  309,  109,\r
- /*  1330 */   336,  336,  336,  336,  386,  336,  336,  392,  336,  336,\r
- /*  1340 */   201,  309,  387,  385,  222,  336,  336,  386,  336,  336,\r
- /*  1350 */   307,  336,  233,  161,  336,  336,  109,  336,  336,  336,\r
- /*  1360 */   336,  336,  387,  336,  392,  336,  336,  201,  309,  336,\r
- /*  1370 */   307,  231,  233,  161,  386,  387,  109,  336,  336,  336,\r
- /*  1380 */   336,  336,  336,  307,  392,  233,  161,  201,  309,  109,\r
- /*  1390 */   336,  383,  336,  336,  386,  336,  336,  392,  387,  336,\r
- /*  1400 */   201,  309,  336,  387,  232,  336,   87,  386,   86,   67,\r
- /*  1410 */   104,   87,   94,   84,   72,  104,  336,   94,  336,  336,\r
- /*  1420 */   392,  336,  336,  201,  309,  392,  336,  336,  201,  309,\r
- /*  1430 */   386,  387,  336,  336,  336,  386,  336,  336,  336,  307,\r
- /*  1440 */   387,  212,  137,  336,  336,  109,  336,  336,  307,  336,\r
- /*  1450 */   233,  184,  336,  392,  109,  336,  201,  309,  336,  387,\r
- /*  1460 */   336,  336,  392,  386,  336,  201,  309,  307,  336,  233,\r
- /*  1470 */   176,  336,  386,  109,  336,  336,  336,  336,  336,  387,\r
- /*  1480 */   336,  392,  336,  336,  201,  309,  336,  307,  387,  233,\r
- /*  1490 */   134,  386,  336,  109,  336,  336,  307,  336,  233,  172,\r
- /*  1500 */   336,  392,  109,  336,  201,  309,  336,  336,  387,  336,\r
- /*  1510 */   392,  386,  336,  201,  309,  336,  307,  387,  233,  170,\r
- /*  1520 */   386,  336,  109,  336,  336,  307,  336,  233,  149,  336,\r
- /*  1530 */   392,  109,  336,  201,  309,  336,  387,  336,  336,  392,\r
- /*  1540 */   386,  336,  201,  309,  307,  387,  233,  174,  336,  386,\r
- /*  1550 */   109,  336,  336,  307,  336,  233,  166,  336,  392,  109,\r
- /*  1560 */   336,  201,  309,  336,  336,  336,  336,  392,  386,  336,\r
- /*  1570 */   201,  309,  387,  336,  336,  336,  336,  386,  336,  336,\r
- /*  1580 */   307,  387,  233,  167,  336,  336,  109,  336,  336,  307,\r
- /*  1590 */   336,  233,  171,  336,  392,  109,  336,  201,  309,  336,\r
- /*  1600 */   336,  387,  336,  392,  386,  336,  201,  309,  336,  307,\r
- /*  1610 */   387,  233,  162,  386,  336,  109,  336,  336,  307,  336,\r
- /*  1620 */   233,  148,  336,  392,  109,  336,  201,  309,  336,  336,\r
- /*  1630 */   387,  336,  392,  386,  336,  201,  309,  336,  307,  336,\r
- /*  1640 */   233,   69,  386,  387,  109,  336,  336,  336,  336,  336,\r
- /*  1650 */   387,  307,  392,  233,  182,  201,  309,  109,  298,  336,\r
- /*  1660 */   233,  336,  386,  336,  109,  392,  336,  336,  201,  309,\r
- /*  1670 */   387,  336,  336,  336,  336,  386,  309,  336,  307,  387,\r
- /*  1680 */   233,  139,  386,  336,  109,  336,  336,  307,  336,  233,\r
- /*  1690 */   336,  336,  392,  109,  336,  201,  309,  336,  387,  387,\r
- /*  1700 */   336,  392,  386,  336,  198,  309,  307,  308,  233,  233,\r
- /*  1710 */   336,  386,  109,  109,  336,  336,  336,  336,  387,  336,\r
- /*  1720 */   392,  336,  336,  196,  309,  309,  307,  336,  233,  336,\r
- /*  1730 */   386,  386,  109,  336,  336,  336,  336,  336,  387,  336,\r
- /*  1740 */   392,  336,  336,  195,  309,  336,  402,  336,  233,  336,\r
- /*  1750 */   386,  336,  109,  336,  336,  336,  336,  336,  336,  336,\r
- /*  1760 */   336,  336,  336,  336,  309,  336,  336,  336,  336,  336,\r
- /*  1770 */   386,\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
     );\r
     static public $yy_lookahead = array(\r
- /*     0 */    19,   37,   21,   22,   46,   24,   20,   26,   56,   28,\r
- /*    10 */    29,   25,   54,   27,   41,   20,   35,   36,    6,    7,\r
- /*    20 */    56,    9,   41,   11,   51,   44,   45,   41,   47,   48,\r
- /*    30 */    49,   50,   21,   81,   53,   54,   19,   51,   21,   22,\r
- /*    40 */     2,    3,   56,    5,   96,   28,   84,   85,   86,   87,\r
- /*    50 */    88,   56,   35,   36,   16,   17,   18,   28,   41,  111,\r
- /*    60 */    23,   44,   45,   22,   47,   48,   49,   50,   39,   40,\r
- /*    70 */    53,   54,   55,   19,  126,   21,   22,   36,    2,    3,\r
- /*    80 */    10,    5,   28,   46,   55,   19,   42,   21,   22,   35,\r
- /*    90 */    36,   23,   16,   19,   18,   41,   22,   23,   44,   45,\r
- /*   100 */    56,   47,   48,   49,   50,   31,   38,   53,   54,   19,\r
- /*   110 */    41,   21,   22,   19,  122,   46,   22,   23,   28,   53,\r
- /*   120 */    51,   28,   20,    8,   55,   35,   36,   21,   22,   20,\r
- /*   130 */    28,   41,   39,   40,   44,   45,   27,   47,   48,   49,\r
- /*   140 */    50,   39,   40,   53,   54,   19,   52,   21,   22,   22,\r
- /*   150 */    41,   24,   20,   26,   28,   33,   29,   25,   20,   27,\r
- /*   160 */    51,   35,   36,   19,   20,   27,   22,   41,   20,   31,\r
- /*   170 */    44,   45,   22,   47,   48,   49,   50,   23,   34,   53,\r
- /*   180 */    54,   19,   31,   21,   22,   96,   19,   20,   56,   22,\r
- /*   190 */    28,  102,   21,   22,  107,   41,   19,   35,   36,   22,\r
- /*   200 */   111,   34,   52,   41,   56,   51,   44,   45,  121,   47,\r
- /*   210 */    48,   49,   50,   20,  125,   53,   54,   19,   97,   21,\r
- /*   220 */    22,   34,  101,   23,   53,   25,   28,   19,   41,   52,\r
- /*   230 */    22,   23,   81,   35,   36,   96,  115,   20,   51,   41,\r
- /*   240 */   119,  102,   44,   45,   27,   47,   48,   49,   50,   56,\r
- /*   250 */   111,   53,   54,   19,   19,   21,   22,   25,   19,   20,\r
- /*   260 */    19,   22,   28,   22,  125,   20,   20,   27,   28,   35,\r
- /*   270 */    36,   19,   20,   27,   22,   41,   41,   31,   44,   45,\r
- /*   280 */    96,   47,   48,   49,   50,   68,  102,   53,   54,   19,\r
- /*   290 */    87,   21,   22,   52,   20,  111,   20,  117,   28,   97,\r
- /*   300 */   120,   27,  122,  101,   88,   35,   36,   96,   25,   93,\r
- /*   310 */    94,   41,   31,  102,   44,   45,   96,   47,   48,   49,\r
- /*   320 */    50,  119,  111,   53,   54,   19,  102,   21,   22,   46,\r
- /*   330 */    56,  111,  129,   96,   28,   13,   14,   54,   87,  102,\r
- /*   340 */    38,   35,   36,  123,   68,   91,   92,   41,  111,  125,\r
- /*   350 */    44,   45,   96,   47,   48,   49,   50,   27,   56,   53,\r
- /*   360 */    54,   19,  102,   21,   22,  114,   20,  111,   38,   96,\r
- /*   370 */    28,   86,   87,   88,   33,  102,   88,   35,   36,  123,\r
- /*   380 */   129,   93,   94,   41,  111,  125,   44,   45,   96,   47,\r
- /*   390 */    48,   49,   50,   38,   17,   53,   54,   19,  126,   21,\r
- /*   400 */    22,   96,   20,  111,   20,   20,   28,  102,   20,   27,\r
- /*   410 */    20,   56,   27,   35,   36,   27,  111,   27,  126,   41,\r
- /*   420 */    56,   57,   44,   45,   22,   47,   48,   49,   50,   91,\r
- /*   430 */    92,   53,   34,   69,   70,   71,   72,   73,   74,   75,\r
- /*   440 */    76,   77,   58,   59,   60,   61,   62,   63,   64,   65,\r
- /*   450 */    66,   67,   20,   30,  103,   19,   56,   21,   22,   27,\r
- /*   460 */    37,   96,   78,   79,   80,   19,   19,   21,   22,   22,\r
- /*   470 */    20,   20,   36,   20,   28,  107,  111,   27,   27,   20,\r
- /*   480 */    27,   35,   36,   47,   48,   42,   27,   41,  123,  121,\r
- /*   490 */    44,   45,  118,   47,   48,   49,   50,   37,   30,   53,\r
- /*   500 */   107,   58,   59,   60,   61,   62,   63,   64,   65,   66,\r
- /*   510 */    67,   20,   20,   27,  121,   55,  102,   20,   27,   27,\r
- /*   520 */   117,   78,   79,   80,   27,  122,   58,   59,   60,   61,\r
- /*   530 */    62,   63,   64,   65,   66,   67,   42,  118,   20,   41,\r
- /*   540 */   121,  103,   56,   20,   20,   27,   78,   79,   80,  107,\r
- /*   550 */    27,   27,   58,   59,   60,   61,   62,   63,   64,   65,\r
- /*   560 */    66,   67,   19,  121,   42,   22,  118,   20,   20,   20,\r
- /*   570 */   118,   20,   78,   79,   80,   27,   27,   96,   27,   96,\r
- /*   580 */    58,   59,   60,   61,   62,   63,   64,   65,   66,   67,\r
- /*   590 */    89,   90,  111,   19,  111,   22,   22,   20,   89,   90,\r
- /*   600 */    78,   79,   80,   42,   27,   58,   59,   60,   61,   62,\r
- /*   610 */    63,   64,   65,   66,   67,   27,  103,   56,   57,   91,\r
- /*   620 */    92,   91,   92,   89,   90,   78,   79,   80,  107,   42,\r
- /*   630 */    69,   70,   71,   72,   73,   74,   75,   76,   77,  104,\r
- /*   640 */   105,   42,  121,   56,   57,  118,   58,   59,   60,   61,\r
- /*   650 */    62,   63,   64,   65,   66,   67,   69,   70,   71,   72,\r
- /*   660 */    73,   74,   75,   76,   77,  107,   78,   79,   80,   58,\r
- /*   670 */    59,   60,   61,   62,   63,   64,   65,   66,   67,  121,\r
- /*   680 */     1,    2,   36,    4,    5,  103,  107,   20,  108,   78,\r
- /*   690 */    79,   80,  117,   96,   27,   16,   20,  122,   19,   87,\r
- /*   700 */   121,  121,   87,   27,   96,   96,  117,   95,  111,   97,\r
- /*   710 */    95,  122,   97,  101,   35,   96,  101,   32,   21,  111,\r
- /*   720 */   111,  109,   22,   56,   57,  113,   22,    3,  113,   42,\r
- /*   730 */   111,  119,   56,   57,  119,   20,   69,   70,   71,   72,\r
- /*   740 */    73,   74,   75,   76,   77,   69,   70,   71,   72,   73,\r
- /*   750 */    74,   75,   76,   77,   20,   87,   43,  107,   15,  107,\r
- /*   760 */    22,   27,   87,   95,   22,   97,   98,   99,  100,  101,\r
- /*   770 */    95,  121,   97,  121,   22,   43,  101,  109,   21,   20,\r
- /*   780 */   112,  113,    4,   38,  109,   68,    4,  119,  113,   23,\r
- /*   790 */    56,   57,  124,   21,  119,   12,   22,   19,   27,   53,\r
- /*   800 */    46,   19,   55,   69,   70,   71,   72,   73,   74,   75,\r
- /*   810 */    76,   77,   87,   35,   23,   21,   41,   35,   42,  111,\r
- /*   820 */    95,  120,   97,   98,   99,  100,  101,   38,   50,   27,\r
- /*   830 */   118,  115,   50,   27,  109,  121,  110,  112,  113,   27,\r
- /*   840 */    87,  106,  123,   53,  119,   21,  106,  130,   95,  124,\r
- /*   850 */    97,   98,  104,  100,  101,  130,  130,  104,  130,   81,\r
- /*   860 */    82,  130,  109,   81,   82,  112,  113,  130,   87,  130,\r
- /*   870 */   130,  130,  119,  130,  130,  130,   95,  124,   97,   98,\r
- /*   880 */    99,  100,  101,  130,  130,  130,  130,  130,  130,  130,\r
- /*   890 */   109,  130,  130,  112,  113,  130,   87,  130,  130,  130,\r
- /*   900 */   119,  130,  130,  130,   95,  124,   97,   98,  130,  100,\r
- /*   910 */   101,  130,  130,  130,  130,  130,  130,  130,  109,  130,\r
- /*   920 */   130,  112,  113,  130,  130,  130,   87,  130,  119,  130,\r
- /*   930 */   130,  130,  130,  124,   95,  130,   97,   98,  130,  100,\r
- /*   940 */   101,  130,  130,  130,  130,   87,  130,  130,  109,  130,\r
- /*   950 */   130,  112,  113,   95,   87,   97,  130,  130,  119,  101,\r
- /*   960 */   130,  130,   95,  124,   97,   98,  130,  100,  101,  130,\r
- /*   970 */   130,  113,  130,  130,  130,  130,  109,  119,  130,  112,\r
- /*   980 */   113,  130,   87,  130,  130,  130,  119,  130,  130,  130,\r
- /*   990 */    95,  124,   97,   98,  130,  100,  101,  130,  130,  130,\r
- /*  1000 */   130,  130,  130,  130,  109,  130,  130,  112,  113,  130,\r
- /*  1010 */    87,  130,  130,  130,  119,  130,  130,  130,   95,  124,\r
- /*  1020 */    97,   98,  130,  100,  101,  130,  130,  130,  130,  130,\r
- /*  1030 */   130,  130,  109,  130,  130,  112,  113,  130,  130,  130,\r
- /*  1040 */    87,  130,  119,  130,  130,  130,  130,  124,   95,  130,\r
- /*  1050 */    97,   98,  130,  100,  101,  130,  130,  130,  130,   87,\r
- /*  1060 */   130,  130,  109,  130,  130,  112,  113,   95,   87,   97,\r
- /*  1070 */   130,  130,  119,  101,  130,  130,   95,  124,   97,   98,\r
- /*  1080 */   130,  100,  101,  130,  130,  113,  130,  130,  130,  130,\r
- /*  1090 */   109,  119,  130,  112,  113,  130,   87,  130,  130,  130,\r
- /*  1100 */   119,  130,  130,  130,   95,  124,   97,   98,  130,  100,\r
- /*  1110 */   101,  130,  130,  130,  130,  130,  130,  130,  109,  130,\r
- /*  1120 */   130,  112,  113,  130,   87,  130,  130,  130,  119,  130,\r
- /*  1130 */   130,  130,   95,  124,   97,   98,  130,  130,  101,  130,\r
- /*  1140 */   130,  130,  130,  130,  130,  130,  109,  130,  130,  112,\r
- /*  1150 */   113,  130,  130,  130,  130,  130,  119,  130,  130,  130,\r
- /*  1160 */    87,  130,  130,  130,  127,  128,  130,  130,   95,  130,\r
- /*  1170 */    97,   98,  130,  100,  101,  130,  130,  130,  130,   87,\r
- /*  1180 */   130,  130,  109,  130,  130,  112,  113,   95,   87,   97,\r
- /*  1190 */   130,  130,  119,  101,  130,  130,   95,  124,   97,   98,\r
- /*  1200 */   130,  100,  101,  130,  130,  113,  130,  130,  130,  130,\r
- /*  1210 */   109,  119,  130,  112,  113,  130,   87,  130,  130,  130,\r
- /*  1220 */   119,  130,  130,  130,   95,  124,   97,   98,  130,  100,\r
- /*  1230 */   101,  130,  130,  130,  130,  130,  130,  130,  109,  130,\r
- /*  1240 */   130,  112,  113,  130,   87,  130,  130,  130,  119,  130,\r
- /*  1250 */   130,  130,   95,  124,   97,   98,  130,  100,  101,  130,\r
- /*  1260 */   130,  130,  130,  130,  130,  130,  109,  130,  130,  112,\r
- /*  1270 */   113,  130,  130,  130,   87,  130,  119,  130,  130,  130,\r
- /*  1280 */   130,  124,   95,  130,   97,   98,  130,  100,  101,  130,\r
- /*  1290 */   130,  130,  130,  130,  130,  130,  109,  130,  130,  112,\r
- /*  1300 */   113,  130,   87,  130,  130,  130,  119,  130,  130,  130,\r
- /*  1310 */    95,  124,   97,   98,  130,   87,  101,  130,  130,  130,\r
- /*  1320 */   130,  130,  130,   95,  109,   97,   98,  112,  113,  101,\r
- /*  1330 */   130,  130,  130,  130,  119,  130,  130,  109,  130,  130,\r
- /*  1340 */   112,  113,   87,  128,  116,  130,  130,  119,  130,  130,\r
- /*  1350 */    95,  130,   97,   98,  130,  130,  101,  130,  130,  130,\r
- /*  1360 */   130,  130,   87,  130,  109,  130,  130,  112,  113,  130,\r
- /*  1370 */    95,  116,   97,   98,  119,   87,  101,  130,  130,  130,\r
- /*  1380 */   130,  130,  130,   95,  109,   97,   98,  112,  113,  101,\r
- /*  1390 */   130,  116,  130,  130,  119,  130,  130,  109,   87,  130,\r
- /*  1400 */   112,  113,  130,   87,  116,  130,   95,  119,   97,   98,\r
- /*  1410 */    99,   95,  101,   97,   98,   99,  130,  101,  130,  130,\r
- /*  1420 */   109,  130,  130,  112,  113,  109,  130,  130,  112,  113,\r
- /*  1430 */   119,   87,  130,  130,  130,  119,  130,  130,  130,   95,\r
- /*  1440 */    87,   97,   98,  130,  130,  101,  130,  130,   95,  130,\r
- /*  1450 */    97,   98,  130,  109,  101,  130,  112,  113,  130,   87,\r
- /*  1460 */   130,  130,  109,  119,  130,  112,  113,   95,  130,   97,\r
- /*  1470 */    98,  130,  119,  101,  130,  130,  130,  130,  130,   87,\r
- /*  1480 */   130,  109,  130,  130,  112,  113,  130,   95,   87,   97,\r
- /*  1490 */    98,  119,  130,  101,  130,  130,   95,  130,   97,   98,\r
- /*  1500 */   130,  109,  101,  130,  112,  113,  130,  130,   87,  130,\r
- /*  1510 */   109,  119,  130,  112,  113,  130,   95,   87,   97,   98,\r
- /*  1520 */   119,  130,  101,  130,  130,   95,  130,   97,   98,  130,\r
- /*  1530 */   109,  101,  130,  112,  113,  130,   87,  130,  130,  109,\r
- /*  1540 */   119,  130,  112,  113,   95,   87,   97,   98,  130,  119,\r
- /*  1550 */   101,  130,  130,   95,  130,   97,   98,  130,  109,  101,\r
- /*  1560 */   130,  112,  113,  130,  130,  130,  130,  109,  119,  130,\r
- /*  1570 */   112,  113,   87,  130,  130,  130,  130,  119,  130,  130,\r
- /*  1580 */    95,   87,   97,   98,  130,  130,  101,  130,  130,   95,\r
- /*  1590 */   130,   97,   98,  130,  109,  101,  130,  112,  113,  130,\r
- /*  1600 */   130,   87,  130,  109,  119,  130,  112,  113,  130,   95,\r
- /*  1610 */    87,   97,   98,  119,  130,  101,  130,  130,   95,  130,\r
- /*  1620 */    97,   98,  130,  109,  101,  130,  112,  113,  130,  130,\r
- /*  1630 */    87,  130,  109,  119,  130,  112,  113,  130,   95,  130,\r
- /*  1640 */    97,   98,  119,   87,  101,  130,  130,  130,  130,  130,\r
- /*  1650 */    87,   95,  109,   97,   98,  112,  113,  101,   95,  130,\r
- /*  1660 */    97,  130,  119,  130,  101,  109,  130,  130,  112,  113,\r
- /*  1670 */    87,  130,  130,  130,  130,  119,  113,  130,   95,   87,\r
- /*  1680 */    97,   98,  119,  130,  101,  130,  130,   95,  130,   97,\r
- /*  1690 */   130,  130,  109,  101,  130,  112,  113,  130,   87,   87,\r
- /*  1700 */   130,  109,  119,  130,  112,  113,   95,   95,   97,   97,\r
- /*  1710 */   130,  119,  101,  101,  130,  130,  130,  130,   87,  130,\r
- /*  1720 */   109,  130,  130,  112,  113,  113,   95,  130,   97,  130,\r
- /*  1730 */   119,  119,  101,  130,  130,  130,  130,  130,   87,  130,\r
- /*  1740 */   109,  130,  130,  112,  113,  130,   95,  130,   97,  130,\r
- /*  1750 */   119,  130,  101,  130,  130,  130,  130,  130,  130,  130,\r
- /*  1760 */   130,  130,  130,  130,  113,  130,  130,  130,  130,  130,\r
- /*  1770 */   119,\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
 );\r
-    const YY_SHIFT_USE_DFLT = -49;\r
-    const YY_SHIFT_MAX = 260;\r
+    const YY_SHIFT_USE_DFLT = -51;\r
+    const YY_SHIFT_MAX = 246;\r
     static public $yy_shift_ofst = array(\r
- /*     0 */   679,  270,  342,  306,  342,   90,   90,   90,   90,   90,\r
- /*    10 */    90,   90,   90,   90,  126,   90,   90,   90,   90,  -19,\r
- /*    20 */   -19,  126,   54,   54,   54,   54,   54,   54,   54,   54,\r
- /*    30 */    54,   54,   54,   54,   54,   54,   54,   54,   54,   54,\r
- /*    40 */    54,   54,   17,  162,  198,  198,  234,  378,  378,  378,\r
- /*    50 */   378,  378,  378,  446,  676,  734,   66,  588,  588,  679,\r
- /*    60 */    38,  782,  -14,   76,  132,  171,  283,  274,  330,  486,\r
- /*    70 */   330,  486,  486,  330,  667,  587,  561,  364,  778,   74,\r
- /*    80 */    12,   94,   12,   12,  138,  177,  246,  577,  447,  574,\r
- /*    90 */   322,  447,  322,  447,  200,  322,  322,  447,  543,  447,\r
- /*   100 */   447,  447,  447,  574,  802,  802,  806,  232,  232,  232,\r
- /*   110 */   802,  824,  494,  384,  522,  468,  443,  547,  611,  611,\r
- /*   120 */   611,  611,  611,  611,  611,  611,  611,  167,  144,  127,\r
- /*   130 */   239,  208,  241,  252,  302,  390,  432,  -48,  382,   -5,\r
- /*   140 */   385,  388,  -42,  106,  551,  -42,  450,  497,  193,   44,\r
- /*   150 */   491,  492,  518,  523,  549,  -42,  548,  235,  524,  -42,\r
- /*   160 */   -42,  -36,  355,  459,  453,  451,  148,  400,  824,  812,\r
- /*   170 */   400,  400,  400,  812,  400,  232,  400,  232,  789,  400,\r
- /*   180 */   232,  232,  400,  498,  400,  -49,  -49,  -49,  -49,  -49,\r
- /*   190 */   -49,  -49,  436,  109,   69,   29,  102,  217,   93,  187,\r
- /*   200 */   154,   93,  150,  -27,  276,  423,  460,   37,  -27,  -27,\r
- /*   210 */   240,   68,  151,  -27,   41,  743,  738,  742,  757,  715,\r
- /*   220 */   697,  704,  687,  732,  771,  754,  791,  747,  774,  646,\r
- /*   230 */   772,  776,  599,  281,  341,   70,   11,  122,  115,  402,\r
- /*   240 */   573,  790,  377,  245,  398,  346,  746,  745,  794,  717,\r
- /*   250 */   724,  685,  732,  766,  752,  713,  700,  759,  775,  717,\r
- /*   260 */   783,\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
 );\r
-    const YY_REDUCE_USE_DFLT = -53;\r
-    const YY_REDUCE_MAX = 191;\r
+    const YY_REDUCE_USE_DFLT = -86;\r
+    const YY_REDUCE_MAX = 189;\r
     static public $yy_reduce_ofst = array(\r
- /*     0 */   -38,  668,  725,  753,  781, 1187,  895, 1157,  867,  809,\r
- /*    10 */   839,  953,  981, 1101, 1037,  923, 1129, 1009, 1073, 1316,\r
- /*    20 */  1311, 1215, 1228, 1255, 1288, 1275, 1430, 1458, 1556, 1583,\r
- /*    30 */  1523, 1449, 1485, 1494, 1514, 1421, 1392, 1344, 1543, 1353,\r
- /*    40 */  1372, 1401, 1631, 1592, 1611,  675,  612, 1612,  615,  858,\r
- /*    50 */   972, 1092, 1563, 1651,   89,  139,  121,  -52,  292,  285,\r
- /*    60 */   216,  251,  305,  288,  273,  202,  180,  184,  220,  211,\r
- /*    70 */   256,  237,  184,  365,  260,  224,  260,  224,  203,  580,\r
- /*    80 */   534,  419,  509,  501,  481,  419,  481,  483,  521,  368,\r
- /*    90 */   530,  558,  528,  442,  403,  254,  338,   87,  368,  393,\r
- /*   100 */   368,  579,  652,  650,  608,  619,  597,  575,  589,  403,\r
- /*   110 */   609,  535,  272,  272,  272,  272,  272,  272,  272,  272,\r
- /*   120 */   272,  272,  272,  272,  272,  272,  272,  714,  714,  726,\r
- /*   130 */   714,  714,  714,  714,  414,  708,  708,  414,  708,  414,\r
- /*   140 */   708,  708,  701,  716,  708,  701,  708,  708,  414,  414,\r
- /*   150 */   708,  708,  708,  708,  708,  701,  708,  712,  708,  701,\r
- /*   160 */   701,  414,  414,  708,  708,  708,  414,  414,  748,  740,\r
- /*   170 */   414,  414,  414,  735,  414,   -8,  414,   -8,  719,  414,\r
- /*   180 */    -8,   -8,  414,  374,  414,  351,  438,  448,  527,  582,\r
- /*   190 */   513,  452,\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
 );\r
     static public $yyExpectedTokens = array(\r
-        /* 0 */ array(1, 2, 4, 5, 16, 19, 35, ),\r
-        /* 1 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 2 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 3 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 4 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 5 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 6 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 7 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 8 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 9 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 10 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 11 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 12 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 13 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 14 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 15 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 16 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 17 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 18 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 19 */ array(19, 21, 22, 24, 26, 28, 29, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 20 */ array(19, 21, 22, 24, 26, 28, 29, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 21 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 22 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 23 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 24 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 25 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 26 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 27 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 28 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 29 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 30 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 31 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 32 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 33 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 34 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 35 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 36 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 37 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 38 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 39 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 40 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 41 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 42 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, 55, ),\r
-        /* 43 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 44 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 45 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 46 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, 54, ),\r
-        /* 47 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 48 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 49 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 50 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 51 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 52 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 53 */ array(19, 21, 22, 28, 35, 36, 41, 44, 45, 47, 48, 49, 50, 53, ),\r
-        /* 54 */ array(20, 27, 56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 55 */ array(20, 27, 56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 56 */ array(19, 21, 22, 53, ),\r
-        /* 57 */ array(27, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 58 */ array(27, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 59 */ array(1, 2, 4, 5, 16, 19, 35, ),\r
-        /* 60 */ array(2, 3, 5, 16, 17, 18, ),\r
-        /* 61 */ array(4, 19, 35, 50, 81, 82, ),\r
-        /* 62 */ array(20, 25, 27, 41, 51, 56, ),\r
-        /* 63 */ array(2, 3, 5, 16, 18, ),\r
-        /* 64 */ array(20, 25, 27, 56, ),\r
-        /* 65 */ array(21, 22, 53, ),\r
-        /* 66 */ array(25, 46, 54, ),\r
-        /* 67 */ array(20, 27, 56, ),\r
-        /* 68 */ array(27, 38, ),\r
-        /* 69 */ array(27, 56, ),\r
-        /* 70 */ array(27, 38, ),\r
-        /* 71 */ array(27, 56, ),\r
-        /* 72 */ array(27, 56, ),\r
-        /* 73 */ array(27, 38, ),\r
-        /* 74 */ array(20, 27, 56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 75 */ array(42, 56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 76 */ array(42, 56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 77 */ array(56, 57, 69, 70, 71, 72, 73, 74, 75, 76, 77, ),\r
-        /* 78 */ array(4, 19, 35, 50, 81, 82, ),\r
-        /* 79 */ array(19, 22, 23, 31, ),\r
-        /* 80 */ array(6, 7, 9, 11, ),\r
-        /* 81 */ array(19, 22, 23, 52, ),\r
-        /* 82 */ array(6, 7, 9, 11, ),\r
-        /* 83 */ array(6, 7, 9, 11, ),\r
-        /* 84 */ array(20, 27, 31, ),\r
-        /* 85 */ array(19, 22, 52, ),\r
-        /* 86 */ array(20, 27, 31, ),\r
-        /* 87 */ array(20, 27, ),\r
-        /* 88 */ array(19, 22, ),\r
-        /* 89 */ array(19, 22, ),\r
-        /* 90 */ array(13, 14, ),\r
-        /* 91 */ array(19, 22, ),\r
-        /* 92 */ array(13, 14, ),\r
-        /* 93 */ array(19, 22, ),\r
-        /* 94 */ array(23, 25, ),\r
-        /* 95 */ array(13, 14, ),\r
-        /* 96 */ array(13, 14, ),\r
-        /* 97 */ array(19, 22, ),\r
-        /* 98 */ array(19, 22, ),\r
-        /* 99 */ array(19, 22, ),\r
-        /* 100 */ array(19, 22, ),\r
-        /* 101 */ array(19, 22, ),\r
-        /* 102 */ array(19, 22, ),\r
-        /* 103 */ array(19, 22, ),\r
-        /* 104 */ array(27, ),\r
-        /* 105 */ array(27, ),\r
-        /* 106 */ array(27, ),\r
-        /* 107 */ array(25, ),\r
-        /* 108 */ array(25, ),\r
-        /* 109 */ array(25, ),\r
-        /* 110 */ array(27, ),\r
-        /* 111 */ array(21, ),\r
-        /* 112 */ array(42, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 113 */ array(20, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 114 */ array(42, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 115 */ array(30, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 116 */ array(42, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 117 */ array(20, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 118 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 119 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 120 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 121 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 122 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 123 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 124 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 125 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 126 */ array(58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 78, 79, 80, ),\r
-        /* 127 */ array(19, 20, 22, 34, ),\r
-        /* 128 */ array(19, 20, 22, 34, ),\r
-        /* 129 */ array(22, 24, 26, 29, ),\r
-        /* 130 */ array(19, 20, 22, ),\r
-        /* 131 */ array(19, 22, 23, ),\r
-        /* 132 */ array(19, 22, 52, ),\r
-        /* 133 */ array(19, 20, 22, ),\r
-        /* 134 */ array(38, 56, ),\r
-        /* 135 */ array(20, 27, ),\r
-        /* 136 */ array(20, 27, ),\r
-        /* 137 */ array(56, 81, ),\r
-        /* 138 */ array(20, 27, ),\r
-        /* 139 */ array(20, 56, ),\r
-        /* 140 */ array(20, 27, ),\r
-        /* 141 */ array(20, 27, ),\r
-        /* 142 */ array(46, 54, ),\r
-        /* 143 */ array(21, 22, ),\r
-        /* 144 */ array(20, 27, ),\r
-        /* 145 */ array(46, 54, ),\r
-        /* 146 */ array(20, 27, ),\r
-        /* 147 */ array(20, 27, ),\r
-        /* 148 */ array(20, 56, ),\r
-        /* 149 */ array(42, 56, ),\r
-        /* 150 */ array(20, 27, ),\r
-        /* 151 */ array(20, 27, ),\r
-        /* 152 */ array(20, 27, ),\r
-        /* 153 */ array(20, 27, ),\r
-        /* 154 */ array(20, 27, ),\r
-        /* 155 */ array(46, 54, ),\r
-        /* 156 */ array(20, 27, ),\r
-        /* 157 */ array(19, 41, ),\r
-        /* 158 */ array(20, 27, ),\r
-        /* 159 */ array(46, 54, ),\r
-        /* 160 */ array(46, 54, ),\r
-        /* 161 */ array(37, 56, ),\r
-        /* 162 */ array(38, 56, ),\r
-        /* 163 */ array(20, 27, ),\r
-        /* 164 */ array(20, 27, ),\r
-        /* 165 */ array(20, 27, ),\r
-        /* 166 */ array(20, 56, ),\r
-        /* 167 */ array(56, ),\r
-        /* 168 */ array(21, ),\r
-        /* 169 */ array(27, ),\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(56, ),\r
-        /* 172 */ array(56, ),\r
-        /* 173 */ array(27, ),\r
-        /* 174 */ array(56, ),\r
-        /* 175 */ array(25, ),\r
-        /* 176 */ array(56, ),\r
-        /* 177 */ array(25, ),\r
-        /* 178 */ array(38, ),\r
-        /* 179 */ array(56, ),\r
-        /* 180 */ array(25, ),\r
-        /* 181 */ array(25, ),\r
-        /* 182 */ array(56, ),\r
-        /* 183 */ array(41, ),\r
-        /* 184 */ 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(),\r
-        /* 191 */ array(),\r
-        /* 192 */ array(19, 21, 22, 36, 47, 48, ),\r
-        /* 193 */ array(20, 27, 41, 51, ),\r
-        /* 194 */ array(41, 46, 51, 55, ),\r
-        /* 195 */ array(28, 39, 40, 55, ),\r
-        /* 196 */ array(20, 28, 39, 40, ),\r
-        /* 197 */ array(20, 27, 68, ),\r
-        /* 198 */ array(28, 39, 40, ),\r
-        /* 199 */ array(34, 41, 51, ),\r
-        /* 200 */ array(23, 41, 51, ),\r
-        /* 201 */ array(28, 39, 40, ),\r
-        /* 202 */ array(22, 52, ),\r
-        /* 203 */ array(41, 51, ),\r
-        /* 204 */ array(20, 68, ),\r
-        /* 205 */ array(30, 37, ),\r
-        /* 206 */ array(37, 55, ),\r
-        /* 207 */ array(23, 46, ),\r
-        /* 208 */ array(41, 51, ),\r
-        /* 209 */ array(41, 51, ),\r
-        /* 210 */ array(27, 28, ),\r
-        /* 211 */ array(23, 38, ),\r
-        /* 212 */ array(31, 81, ),\r
-        /* 213 */ array(41, 51, ),\r
-        /* 214 */ array(22, 36, ),\r
-        /* 215 */ array(15, ),\r
-        /* 216 */ array(22, ),\r
-        /* 217 */ array(22, ),\r
-        /* 218 */ array(21, ),\r
-        /* 219 */ array(20, ),\r
-        /* 220 */ array(21, ),\r
-        /* 221 */ array(22, ),\r
-        /* 222 */ array(42, ),\r
-        /* 223 */ array(43, ),\r
-        /* 224 */ array(27, ),\r
-        /* 225 */ array(46, ),\r
-        /* 226 */ array(23, ),\r
-        /* 227 */ array(55, ),\r
-        /* 228 */ array(22, ),\r
-        /* 229 */ array(36, ),\r
-        /* 230 */ array(21, ),\r
-        /* 231 */ array(42, ),\r
-        /* 232 */ array(42, ),\r
-        /* 233 */ array(31, ),\r
-        /* 234 */ array(33, ),\r
-        /* 235 */ array(10, ),\r
-        /* 236 */ array(21, ),\r
-        /* 237 */ array(33, ),\r
-        /* 238 */ array(8, ),\r
-        /* 239 */ array(22, ),\r
-        /* 240 */ array(22, ),\r
-        /* 241 */ array(53, ),\r
-        /* 242 */ array(17, ),\r
-        /* 243 */ array(20, ),\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(20, ),\r
-        /* 246 */ array(53, ),\r
-        /* 247 */ array(38, ),\r
-        /* 248 */ array(21, ),\r
-        /* 249 */ array(68, ),\r
-        /* 250 */ array(3, ),\r
-        /* 251 */ array(32, ),\r
-        /* 252 */ array(43, ),\r
-        /* 253 */ array(23, ),\r
-        /* 254 */ array(22, ),\r
-        /* 255 */ array(43, ),\r
-        /* 256 */ array(22, ),\r
-        /* 257 */ array(20, ),\r
-        /* 258 */ array(41, ),\r
-        /* 259 */ array(68, ),\r
-        /* 260 */ array(12, ),\r
+        /* 245 */ array(58, ),\r
+        /* 246 */ array(24, ),\r
+        /* 247 */ array(),\r
+        /* 248 */ array(),\r
+        /* 249 */ array(),\r
+        /* 250 */ array(),\r
+        /* 251 */ array(),\r
+        /* 252 */ array(),\r
+        /* 253 */ array(),\r
+        /* 254 */ array(),\r
+        /* 255 */ array(),\r
+        /* 256 */ array(),\r
+        /* 257 */ array(),\r
+        /* 258 */ array(),\r
+        /* 259 */ array(),\r
+        /* 260 */ array(),\r
         /* 261 */ array(),\r
         /* 262 */ array(),\r
         /* 263 */ array(),\r
@@ -1019,78 +1063,53 @@ static public $yy_action = array(
         /* 381 */ array(),\r
         /* 382 */ array(),\r
         /* 383 */ array(),\r
-        /* 384 */ array(),\r
-        /* 385 */ array(),\r
-        /* 386 */ array(),\r
-        /* 387 */ array(),\r
-        /* 388 */ array(),\r
-        /* 389 */ array(),\r
-        /* 390 */ array(),\r
-        /* 391 */ array(),\r
-        /* 392 */ array(),\r
-        /* 393 */ array(),\r
-        /* 394 */ array(),\r
-        /* 395 */ array(),\r
-        /* 396 */ array(),\r
-        /* 397 */ array(),\r
-        /* 398 */ array(),\r
-        /* 399 */ array(),\r
-        /* 400 */ array(),\r
-        /* 401 */ array(),\r
-        /* 402 */ array(),\r
-        /* 403 */ array(),\r
-        /* 404 */ array(),\r
-        /* 405 */ array(),\r
-        /* 406 */ array(),\r
 );\r
     static public $yy_default = array(\r
- /*     0 */   611,  611,  611,  611,  611,  611,  611,  611,  611,  611,\r
- /*    10 */   611,  611,  611,  611,  596,  611,  611,  611,  611,  611,\r
- /*    20 */   611,  611,  554,  554,  554,  554,  611,  611,  611,  611,\r
- /*    30 */   611,  611,  611,  611,  611,  611,  611,  611,  611,  611,\r
- /*    40 */   611,  611,  611,  611,  611,  611,  611,  611,  611,  611,\r
- /*    50 */   611,  611,  611,  611,  564,  564,  611,  475,  475,  407,\r
- /*    60 */   611,  611,  611,  429,  611,  611,  516,  611,  475,  475,\r
- /*    70 */   475,  475,  475,  475,  564,  564,  564,  564,  611,  611,\r
- /*    80 */   417,  526,  417,  417,  497,  526,  497,  490,  611,  611,\r
- /*    90 */   423,  611,  423,  611,  519,  423,  423,  611,  611,  611,\r
- /*   100 */   611,  611,  611,  611,  475,  475,  475,  512,  511,  519,\r
- /*   110 */   475,  611,  611,  611,  611,  611,  611,  611,  577,  570,\r
- /*   120 */   574,  573,  569,  578,  478,  568,  562,  611,  611,  611,\r
- /*   130 */   611,  611,  527,  611,  611,  611,  611,  611,  611,  611,\r
- /*   140 */   611,  611,  546,  611,  611,  548,  611,  611,  611,  611,\r
- /*   150 */   611,  611,  611,  611,  611,  524,  611,  526,  611,  547,\r
- /*   160 */   545,  553,  611,  611,  611,  611,  611,  485,  611,  610,\r
- /*   170 */   496,  458,  495,  610,  597,  514,  598,  517,  489,  599,\r
- /*   180 */   513,  542,  482,  526,  565,  558,  558,  526,  526,  558,\r
- /*   190 */   558,  526,  611,  486,  611,  611,  611,  490,  559,  486,\r
- /*   200 */   481,  487,  611,  560,  490,  611,  611,  502,  579,  486,\r
- /*   210 */   611,  540,  497,  611,  611,  611,  611,  611,  611,  611,\r
- /*   220 */   611,  611,  611,  611,  611,  502,  481,  611,  611,  611,\r
- /*   230 */   611,  611,  611,  497,  611,  611,  611,  611,  611,  611,\r
- /*   240 */   611,  611,  611,  611,  490,  611,  611,  540,  611,  490,\r
- /*   250 */   611,  483,  563,  611,  611,  507,  611,  611,  515,  490,\r
- /*   260 */   611,  455,  601,  535,  537,  551,  534,  536,  532,  533,\r
- /*   270 */   549,  472,  480,  408,  469,  468,  466,  467,  531,  530,\r
- /*   280 */   509,  600,  603,  460,  484,  459,  609,  602,  604,  541,\r
- /*   290 */   529,  493,  510,  607,  608,  457,  571,  500,  499,  503,\r
- /*   300 */   504,  505,  498,  501,  474,  471,  557,  490,  491,  506,\r
- /*   310 */   544,  437,  508,  605,  438,  555,  492,  540,  520,  543,\r
- /*   320 */   525,  528,  539,  470,  465,  422,  419,  424,  420,  421,\r
- /*   330 */   418,  416,  410,  409,  411,  412,  413,  425,  414,  434,\r
- /*   340 */   433,  435,  436,  473,  432,  431,  426,  415,  427,  428,\r
- /*   350 */   430,  556,  606,  590,  576,  591,  592,  444,  575,  572,\r
- /*   360 */   443,  589,  507,  561,  563,  445,  446,  462,  461,  463,\r
- /*   370 */   464,  454,  449,  452,  448,  447,  450,  451,  453,  588,\r
- /*   380 */   587,  523,  522,  552,  593,  595,  521,  518,  440,  439,\r
- /*   390 */   488,  538,  494,  594,  550,  583,  582,  584,  585,  586,\r
- /*   400 */   581,  567,  580,  441,  442,  566,  456,\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
 );\r
-    const YYNOCODE = 131;\r
+    const YYNOCODE = 132;\r
     const YYSTACKDEPTH = 100;\r
-    const YYNSTATE = 407;\r
-    const YYNRULE = 204;\r
-    const YYERRORSYMBOL = 83;\r
+    const YYNSTATE = 384;\r
+    const YYNRULE = 199;\r
+    const YYERRORSYMBOL = 85;\r
     const YYERRSYMDT = 'yy0';\r
     const YYFALLBACK = 0;\r
     static public $yyFallback = array(\r
@@ -1119,39 +1138,39 @@ static public $yy_action = array(
     public $yystack = array();  /* The parser's stack */\r
 \r
     public $yyTokenName = array( \r
-  '$',             'COMMENT',       'PHPSTARTTAG',   'PHPENDTAG',   \r
-  'OTHER',         'FAKEPHPSTARTTAG',  'PHP_CODE',      'PHP_CODE_START_DOUBLEQUOTE',\r
-  'PHP_CODE_DOUBLEQUOTE',  'PHP_HEREDOC_START',  'PHP_HEREDOC_END',  'PHP_NOWDOC_START',\r
-  'PHP_NOWDOC_END',  'PHP_DQ_CONTENT',  'PHP_DQ_EMBED_START',  'PHP_DQ_EMBED_END',\r
-  'LITERALSTART',  'LITERALEND',    'LITERAL',       'LDEL',        \r
-  'RDEL',          'DOLLAR',        'ID',            'EQUAL',       \r
-  'FOREACH',       'PTR',           'IF',            'SPACE',       \r
-  'UNIMATH',       'FOR',           'SEMICOLON',     'INCDEC',      \r
-  'TO',            'AS',            'APTR',          'LDELSLASH',   \r
-  'INTEGER',       'COMMA',         'COLON',         'MATH',        \r
-  'ANDSYM',        'OPENP',         'CLOSEP',        'QMARK',       \r
-  'NOT',           'TYPECAST',      'DOT',           'BOOLEAN',     \r
-  'NULL',          'SINGLEQUOTESTRING',  'QUOTE',         'DOUBLECOLON', \r
-  'AT',            'HATCH',         'OPENB',         'CLOSEB',      \r
-  'VERT',          'ISIN',          'ISDIVBY',       'ISNOTDIVBY',  \r
-  'ISEVEN',        'ISNOTEVEN',     'ISEVENBY',      'ISNOTEVENBY', \r
-  'ISODD',         'ISNOTODD',      'ISODDBY',       'ISNOTODDBY',  \r
-  'INSTANCEOF',    'EQUALS',        'NOTEQUALS',     'GREATERTHAN', \r
-  'LESSTHAN',      'GREATEREQUAL',  'LESSEQUAL',     'IDENTITY',    \r
-  'NONEIDENTITY',  'MOD',           'LAND',          'LOR',         \r
-  'LXOR',          'BACKTICK',      'DOLLARID',      'error',       \r
-  'start',         'template',      'template_element',  'smartytag',   \r
-  'literal',       'php_code',      'php_code_element',  'php_dq_contents',\r
-  'php_dq_content',  'literal_elements',  'literal_element',  'value',       \r
-  'attributes',    'variable',      'expr',          'ternary',     \r
-  'ifexprs',       'varindexed',    'modifier',      'modparameters',\r
-  'statement',     'statements',    'optspace',      'varvar',      \r
-  'foraction',     'array',         'specialclose',  'attribute',   \r
-  'exprs',         'function',      'doublequoted',  'method',      \r
-  'params',        'objectchain',   'arrayindex',    'object',      \r
-  'indexdef',      'varvarele',     'objectelement',  'modparameter',\r
-  'ifexpr',        'ifcond',        'lop',           'arrayelements',\r
-  'arrayelement',  'doublequotedcontent',\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
+  '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
+  'literal_element',  'value',         'attributes',    'variable',    \r
+  'expr',          'ternary',       'varindexed',    'modifier',    \r
+  'modparameters',  'statement',     'statements',    'optspace',    \r
+  'varvar',        'foraction',     'array',         'specialclose',\r
+  'attribute',     'ifcond',        'lop',           'function',    \r
+  'doublequoted_with_quotes',  'static_class_access',  'object',        'arrayindex',  \r
+  'indexdef',      'varvarele',     'objectchain',   'objectelement',\r
+  'method',        'params',        'modparameter',  'arrayelements',\r
+  'arrayelement',  'doublequoted',  'doublequotedcontent',\r
     );\r
 \r
     static public $yyRuleName = array(\r
@@ -1162,203 +1181,198 @@ static public $yy_action = array(
  /*   4 */ "template_element ::= COMMENT",\r
  /*   5 */ "template_element ::= literal",\r
  /*   6 */ "template_element ::= PHPSTARTTAG php_code PHPENDTAG",\r
- /*   7 */ "template_element ::= OTHER",\r
- /*   8 */ "template_element ::= FAKEPHPSTARTTAG",\r
- /*   9 */ "php_code ::= php_code_element php_code",\r
- /*  10 */ "php_code ::=",\r
- /*  11 */ "php_code_element ::= PHP_CODE",\r
- /*  12 */ "php_code_element ::= PHP_CODE_START_DOUBLEQUOTE php_dq_contents PHP_CODE_DOUBLEQUOTE",\r
- /*  13 */ "php_code_element ::= PHP_HEREDOC_START php_dq_contents PHP_HEREDOC_END",\r
- /*  14 */ "php_code_element ::= PHP_NOWDOC_START php_dq_contents PHP_NOWDOC_END",\r
- /*  15 */ "php_dq_contents ::= php_dq_content php_dq_contents",\r
- /*  16 */ "php_dq_contents ::=",\r
- /*  17 */ "php_dq_content ::= PHP_DQ_CONTENT",\r
- /*  18 */ "php_dq_content ::= PHP_DQ_EMBED_START php_code PHP_DQ_EMBED_END",\r
- /*  19 */ "literal ::= LITERALSTART LITERALEND",\r
- /*  20 */ "literal ::= LITERALSTART literal_elements LITERALEND",\r
- /*  21 */ "literal_elements ::= literal_element literal_elements",\r
- /*  22 */ "literal_elements ::=",\r
- /*  23 */ "literal_element ::= literal",\r
- /*  24 */ "literal_element ::= LITERAL",\r
- /*  25 */ "literal_element ::= PHPSTARTTAG",\r
- /*  26 */ "literal_element ::= FAKEPHPSTARTTAG",\r
- /*  27 */ "literal_element ::= PHPENDTAG",\r
- /*  28 */ "smartytag ::= LDEL value RDEL",\r
- /*  29 */ "smartytag ::= LDEL value attributes RDEL",\r
- /*  30 */ "smartytag ::= LDEL variable attributes RDEL",\r
- /*  31 */ "smartytag ::= LDEL expr attributes RDEL",\r
- /*  32 */ "smartytag ::= LDEL ternary attributes RDEL",\r
- /*  33 */ "smartytag ::= LDEL DOLLAR ID EQUAL value RDEL",\r
- /*  34 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr RDEL",\r
- /*  35 */ "smartytag ::= LDEL DOLLAR ID EQUAL expr attributes RDEL",\r
- /*  36 */ "smartytag ::= LDEL DOLLAR ID EQUAL ifexprs attributes RDEL",\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 varindexed EQUAL ifexprs attributes RDEL",\r
- /*  41 */ "smartytag ::= LDEL ID attributes RDEL",\r
- /*  42 */ "smartytag ::= LDEL FOREACH attributes RDEL",\r
- /*  43 */ "smartytag ::= LDEL ID RDEL",\r
- /*  44 */ "smartytag ::= LDEL ID PTR ID attributes RDEL",\r
- /*  45 */ "smartytag ::= LDEL ID modifier modparameters attributes RDEL",\r
- /*  46 */ "smartytag ::= LDEL ID PTR ID modifier modparameters attributes RDEL",\r
- /*  47 */ "smartytag ::= LDEL IF SPACE ifexprs RDEL",\r
- /*  48 */ "smartytag ::= LDEL IF UNIMATH ifexprs RDEL",\r
- /*  49 */ "smartytag ::= LDEL IF SPACE statement RDEL",\r
- /*  50 */ "smartytag ::= LDEL FOR SPACE statements SEMICOLON optspace ifexprs SEMICOLON optspace DOLLAR varvar foraction RDEL",\r
- /*  51 */ "foraction ::= EQUAL expr",\r
- /*  52 */ "foraction ::= INCDEC",\r
- /*  53 */ "smartytag ::= LDEL FOR SPACE statement TO expr attributes RDEL",\r
- /*  54 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar RDEL",\r
- /*  55 */ "smartytag ::= LDEL FOREACH SPACE value AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  56 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar RDEL",\r
- /*  57 */ "smartytag ::= LDEL FOREACH SPACE array AS DOLLAR varvar APTR DOLLAR varvar RDEL",\r
- /*  58 */ "smartytag ::= LDELSLASH ID RDEL",\r
- /*  59 */ "smartytag ::= LDELSLASH specialclose RDEL",\r
- /*  60 */ "specialclose ::= IF",\r
- /*  61 */ "specialclose ::= FOR",\r
- /*  62 */ "specialclose ::= FOREACH",\r
- /*  63 */ "smartytag ::= LDELSLASH ID attributes RDEL",\r
- /*  64 */ "smartytag ::= LDELSLASH ID modifier modparameters attributes RDEL",\r
- /*  65 */ "smartytag ::= LDELSLASH ID PTR ID RDEL",\r
- /*  66 */ "attributes ::= attributes attribute",\r
- /*  67 */ "attributes ::= attribute",\r
- /*  68 */ "attributes ::=",\r
- /*  69 */ "attribute ::= SPACE ID EQUAL ID",\r
- /*  70 */ "attribute ::= SPACE ID EQUAL expr",\r
- /*  71 */ "attribute ::= SPACE ID EQUAL ifexprs",\r
- /*  72 */ "attribute ::= SPACE ID EQUAL value",\r
- /*  73 */ "attribute ::= SPACE ID EQUAL ternary",\r
- /*  74 */ "attribute ::= SPACE ID",\r
- /*  75 */ "attribute ::= SPACE INTEGER EQUAL expr",\r
- /*  76 */ "statements ::= statement",\r
- /*  77 */ "statements ::= statements COMMA statement",\r
- /*  78 */ "statement ::= DOLLAR varvar EQUAL expr",\r
- /*  79 */ "expr ::= ID",\r
- /*  80 */ "expr ::= exprs",\r
- /*  81 */ "expr ::= DOLLAR ID COLON ID",\r
- /*  82 */ "expr ::= expr modifier modparameters",\r
- /*  83 */ "exprs ::= value",\r
- /*  84 */ "exprs ::= exprs MATH value",\r
- /*  85 */ "exprs ::= exprs UNIMATH value",\r
- /*  86 */ "exprs ::= exprs ANDSYM value",\r
- /*  87 */ "exprs ::= array",\r
- /*  88 */ "ternary ::= OPENP ifexprs CLOSEP QMARK expr COLON expr",\r
- /*  89 */ "ternary ::= OPENP expr CLOSEP QMARK expr COLON expr",\r
- /*  90 */ "value ::= variable",\r
- /*  91 */ "value ::= UNIMATH value",\r
- /*  92 */ "value ::= NOT value",\r
- /*  93 */ "value ::= TYPECAST value",\r
- /*  94 */ "value ::= variable INCDEC",\r
- /*  95 */ "value ::= INTEGER",\r
- /*  96 */ "value ::= INTEGER DOT INTEGER",\r
- /*  97 */ "value ::= BOOLEAN",\r
- /*  98 */ "value ::= NULL",\r
- /*  99 */ "value ::= function",\r
- /* 100 */ "value ::= OPENP expr CLOSEP",\r
- /* 101 */ "value ::= SINGLEQUOTESTRING",\r
- /* 102 */ "value ::= QUOTE doublequoted QUOTE",\r
- /* 103 */ "value ::= QUOTE QUOTE",\r
- /* 104 */ "value ::= ID DOUBLECOLON method",\r
- /* 105 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP",\r
- /* 106 */ "value ::= ID DOUBLECOLON method objectchain",\r
- /* 107 */ "value ::= ID DOUBLECOLON DOLLAR ID OPENP params CLOSEP objectchain",\r
- /* 108 */ "value ::= ID DOUBLECOLON ID",\r
- /* 109 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex",\r
- /* 110 */ "value ::= ID DOUBLECOLON DOLLAR ID arrayindex objectchain",\r
- /* 111 */ "value ::= smartytag",\r
- /* 112 */ "variable ::= varindexed",\r
- /* 113 */ "variable ::= DOLLAR varvar AT ID",\r
- /* 114 */ "variable ::= object",\r
- /* 115 */ "variable ::= HATCH ID HATCH",\r
- /* 116 */ "variable ::= HATCH variable HATCH",\r
- /* 117 */ "varindexed ::= DOLLAR varvar arrayindex",\r
- /* 118 */ "arrayindex ::= arrayindex indexdef",\r
- /* 119 */ "arrayindex ::=",\r
- /* 120 */ "indexdef ::= DOT DOLLAR varvar",\r
- /* 121 */ "indexdef ::= DOT DOLLAR varvar AT ID",\r
- /* 122 */ "indexdef ::= DOT ID",\r
- /* 123 */ "indexdef ::= DOT BOOLEAN",\r
- /* 124 */ "indexdef ::= DOT NULL",\r
- /* 125 */ "indexdef ::= DOT INTEGER",\r
- /* 126 */ "indexdef ::= DOT LDEL exprs RDEL",\r
- /* 127 */ "indexdef ::= OPENB ID CLOSEB",\r
- /* 128 */ "indexdef ::= OPENB ID DOT ID CLOSEB",\r
- /* 129 */ "indexdef ::= OPENB exprs CLOSEB",\r
- /* 130 */ "indexdef ::= OPENB CLOSEB",\r
- /* 131 */ "varvar ::= varvarele",\r
- /* 132 */ "varvar ::= varvar varvarele",\r
- /* 133 */ "varvarele ::= ID",\r
- /* 134 */ "varvarele ::= LDEL expr RDEL",\r
- /* 135 */ "object ::= varindexed objectchain",\r
- /* 136 */ "objectchain ::= objectelement",\r
- /* 137 */ "objectchain ::= objectchain objectelement",\r
- /* 138 */ "objectelement ::= PTR ID arrayindex",\r
- /* 139 */ "objectelement ::= PTR variable arrayindex",\r
- /* 140 */ "objectelement ::= PTR LDEL expr RDEL arrayindex",\r
- /* 141 */ "objectelement ::= PTR ID LDEL expr RDEL arrayindex",\r
- /* 142 */ "objectelement ::= PTR method",\r
- /* 143 */ "function ::= ID OPENP params CLOSEP",\r
- /* 144 */ "method ::= ID OPENP params CLOSEP",\r
- /* 145 */ "params ::= expr COMMA params",\r
- /* 146 */ "params ::= expr",\r
- /* 147 */ "params ::=",\r
- /* 148 */ "modifier ::= VERT AT ID",\r
- /* 149 */ "modifier ::= VERT ID",\r
- /* 150 */ "modparameters ::= modparameters modparameter",\r
- /* 151 */ "modparameters ::=",\r
- /* 152 */ "modparameter ::= COLON exprs",\r
- /* 153 */ "modparameter ::= COLON ID",\r
- /* 154 */ "ifexprs ::= ifexpr",\r
- /* 155 */ "ifexprs ::= NOT ifexprs",\r
- /* 156 */ "ifexprs ::= OPENP ifexprs CLOSEP",\r
- /* 157 */ "ifexpr ::= expr",\r
- /* 158 */ "ifexpr ::= expr ifcond expr",\r
- /* 159 */ "ifexpr ::= expr ISIN array",\r
- /* 160 */ "ifexpr ::= expr ISIN value",\r
- /* 161 */ "ifexpr ::= ifexprs lop ifexprs",\r
- /* 162 */ "ifexpr ::= ifexprs ISDIVBY ifexprs",\r
- /* 163 */ "ifexpr ::= ifexprs ISNOTDIVBY ifexprs",\r
- /* 164 */ "ifexpr ::= ifexprs ISEVEN",\r
- /* 165 */ "ifexpr ::= ifexprs ISNOTEVEN",\r
- /* 166 */ "ifexpr ::= ifexprs ISEVENBY ifexprs",\r
- /* 167 */ "ifexpr ::= ifexprs ISNOTEVENBY ifexprs",\r
- /* 168 */ "ifexpr ::= ifexprs ISODD",\r
- /* 169 */ "ifexpr ::= ifexprs ISNOTODD",\r
- /* 170 */ "ifexpr ::= ifexprs ISODDBY ifexprs",\r
- /* 171 */ "ifexpr ::= ifexprs ISNOTODDBY ifexprs",\r
- /* 172 */ "ifexpr ::= value INSTANCEOF ID",\r
- /* 173 */ "ifexpr ::= value INSTANCEOF value",\r
- /* 174 */ "ifcond ::= EQUALS",\r
- /* 175 */ "ifcond ::= NOTEQUALS",\r
- /* 176 */ "ifcond ::= GREATERTHAN",\r
- /* 177 */ "ifcond ::= LESSTHAN",\r
- /* 178 */ "ifcond ::= GREATEREQUAL",\r
- /* 179 */ "ifcond ::= LESSEQUAL",\r
- /* 180 */ "ifcond ::= IDENTITY",\r
- /* 181 */ "ifcond ::= NONEIDENTITY",\r
- /* 182 */ "ifcond ::= MOD",\r
- /* 183 */ "lop ::= LAND",\r
- /* 184 */ "lop ::= LOR",\r
- /* 185 */ "lop ::= LXOR",\r
- /* 186 */ "array ::= OPENB arrayelements CLOSEB",\r
- /* 187 */ "arrayelements ::= arrayelement",\r
- /* 188 */ "arrayelements ::= arrayelements COMMA arrayelement",\r
- /* 189 */ "arrayelements ::=",\r
- /* 190 */ "arrayelement ::= value APTR expr",\r
- /* 191 */ "arrayelement ::= ID APTR expr",\r
- /* 192 */ "arrayelement ::= expr",\r
- /* 193 */ "doublequoted ::= doublequoted doublequotedcontent",\r
- /* 194 */ "doublequoted ::= doublequotedcontent",\r
- /* 195 */ "doublequotedcontent ::= BACKTICK variable BACKTICK",\r
- /* 196 */ "doublequotedcontent ::= BACKTICK expr BACKTICK",\r
- /* 197 */ "doublequotedcontent ::= DOLLARID",\r
- /* 198 */ "doublequotedcontent ::= LDEL variable RDEL",\r
- /* 199 */ "doublequotedcontent ::= LDEL expr RDEL",\r
- /* 200 */ "doublequotedcontent ::= smartytag",\r
- /* 201 */ "doublequotedcontent ::= OTHER",\r
- /* 202 */ "optspace ::= SPACE",\r
- /* 203 */ "optspace ::=",\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
     );\r
 \r
     function tokenName($tokenType)\r
@@ -1632,126 +1646,131 @@ static public $yy_action = array(
     }\r
 \r
     static public $yyRuleInfo = array(\r
-  array( 'lhs' => 84, 'rhs' => 1 ),\r
-  array( 'lhs' => 85, 'rhs' => 1 ),\r
-  array( 'lhs' => 85, 'rhs' => 2 ),\r
   array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 86, 'rhs' => 3 ),\r
-  array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 86, 'rhs' => 1 ),\r
-  array( 'lhs' => 89, 'rhs' => 2 ),\r
-  array( 'lhs' => 89, 'rhs' => 0 ),\r
-  array( 'lhs' => 90, 'rhs' => 1 ),\r
-  array( 'lhs' => 90, 'rhs' => 3 ),\r
-  array( 'lhs' => 90, 'rhs' => 3 ),\r
-  array( 'lhs' => 90, 'rhs' => 3 ),\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' => 88, 'rhs' => 2 ),\r
-  array( 'lhs' => 88, 'rhs' => 3 ),\r
+  array( 'lhs' => 92, 'rhs' => 3 ),\r
+  array( 'lhs' => 92, 'rhs' => 3 ),\r
   array( 'lhs' => 93, 'rhs' => 2 ),\r
   array( 'lhs' => 93, 'rhs' => 0 ),\r
   array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 94, 'rhs' => 1 ),\r
-  array( 'lhs' => 87, 'rhs' => 3 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 7 ),\r
-  array( 'lhs' => 87, 'rhs' => 7 ),\r
-  array( 'lhs' => 87, 'rhs' => 7 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 3 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 8 ),\r
-  array( 'lhs' => 87, 'rhs' => 5 ),\r
-  array( 'lhs' => 87, 'rhs' => 5 ),\r
-  array( 'lhs' => 87, 'rhs' => 5 ),\r
-  array( 'lhs' => 87, 'rhs' => 13 ),\r
-  array( 'lhs' => 108, 'rhs' => 2 ),\r
-  array( 'lhs' => 108, 'rhs' => 1 ),\r
-  array( 'lhs' => 87, 'rhs' => 8 ),\r
-  array( 'lhs' => 87, 'rhs' => 8 ),\r
-  array( 'lhs' => 87, 'rhs' => 11 ),\r
-  array( 'lhs' => 87, 'rhs' => 8 ),\r
-  array( 'lhs' => 87, 'rhs' => 11 ),\r
-  array( 'lhs' => 87, 'rhs' => 3 ),\r
-  array( 'lhs' => 87, 'rhs' => 3 ),\r
-  array( 'lhs' => 110, 'rhs' => 1 ),\r
-  array( 'lhs' => 110, 'rhs' => 1 ),\r
-  array( 'lhs' => 110, 'rhs' => 1 ),\r
-  array( 'lhs' => 87, 'rhs' => 4 ),\r
-  array( 'lhs' => 87, 'rhs' => 6 ),\r
-  array( 'lhs' => 87, 'rhs' => 5 ),\r
-  array( 'lhs' => 96, 'rhs' => 2 ),\r
+  array( 'lhs' => 94, 'rhs' => 3 ),\r
+  array( 'lhs' => 90, 'rhs' => 2 ),\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' => 0 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 111, 'rhs' => 2 ),\r
-  array( 'lhs' => 111, 'rhs' => 4 ),\r
-  array( 'lhs' => 105, 'rhs' => 1 ),\r
-  array( 'lhs' => 105, 'rhs' => 3 ),\r
-  array( 'lhs' => 104, 'rhs' => 4 ),\r
-  array( 'lhs' => 98, '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' => 4 ),\r
-  array( 'lhs' => 98, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 1 ),\r
-  array( 'lhs' => 112, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 3 ),\r
-  array( 'lhs' => 112, 'rhs' => 1 ),\r
-  array( 'lhs' => 99, 'rhs' => 7 ),\r
-  array( 'lhs' => 99, 'rhs' => 7 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 1 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 2 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 7 ),\r
-  array( 'lhs' => 95, 'rhs' => 4 ),\r
-  array( 'lhs' => 95, 'rhs' => 8 ),\r
-  array( 'lhs' => 95, 'rhs' => 3 ),\r
-  array( 'lhs' => 95, 'rhs' => 5 ),\r
-  array( 'lhs' => 95, 'rhs' => 6 ),\r
-  array( 'lhs' => 95, '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' => 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' => 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' => 4 ),\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' => 101, 'rhs' => 3 ),\r
-  array( 'lhs' => 118, 'rhs' => 2 ),\r
-  array( 'lhs' => 118, 'rhs' => 0 ),\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
@@ -1763,100 +1782,92 @@ static public $yy_action = array(
   array( 'lhs' => 120, 'rhs' => 5 ),\r
   array( 'lhs' => 120, 'rhs' => 3 ),\r
   array( 'lhs' => 120, 'rhs' => 2 ),\r
-  array( 'lhs' => 107, 'rhs' => 1 ),\r
-  array( 'lhs' => 107, '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' => 119, 'rhs' => 2 ),\r
-  array( 'lhs' => 117, 'rhs' => 1 ),\r
-  array( 'lhs' => 117, 'rhs' => 2 ),\r
-  array( 'lhs' => 122, 'rhs' => 3 ),\r
-  array( 'lhs' => 122, 'rhs' => 3 ),\r
-  array( 'lhs' => 122, 'rhs' => 5 ),\r
-  array( 'lhs' => 122, 'rhs' => 6 ),\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' => 113, 'rhs' => 4 ),\r
-  array( 'lhs' => 115, 'rhs' => 4 ),\r
-  array( 'lhs' => 116, 'rhs' => 3 ),\r
-  array( 'lhs' => 116, 'rhs' => 1 ),\r
-  array( 'lhs' => 116, 'rhs' => 0 ),\r
-  array( 'lhs' => 102, 'rhs' => 3 ),\r
-  array( 'lhs' => 102, 'rhs' => 2 ),\r
-  array( 'lhs' => 103, 'rhs' => 2 ),\r
-  array( 'lhs' => 103, 'rhs' => 0 ),\r
-  array( 'lhs' => 123, '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' => 100, 'rhs' => 1 ),\r
-  array( 'lhs' => 100, 'rhs' => 2 ),\r
-  array( 'lhs' => 100, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 1 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 2 ),\r
-  array( 'lhs' => 124, 'rhs' => 2 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 2 ),\r
-  array( 'lhs' => 124, 'rhs' => 2 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 124, 'rhs' => 3 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\r
-  array( 'lhs' => 125, 'rhs' => 1 ),\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' => 126, 'rhs' => 1 ),\r
-  array( 'lhs' => 126, 'rhs' => 1 ),\r
-  array( 'lhs' => 126, 'rhs' => 1 ),\r
-  array( 'lhs' => 109, 'rhs' => 3 ),\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' => 113, 'rhs' => 1 ),\r
+  array( 'lhs' => 114, 'rhs' => 1 ),\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' => 114, 'rhs' => 2 ),\r
-  array( 'lhs' => 114, 'rhs' => 1 ),\r
-  array( 'lhs' => 129, 'rhs' => 3 ),\r
-  array( 'lhs' => 129, 'rhs' => 3 ),\r
-  array( 'lhs' => 129, 'rhs' => 1 ),\r
-  array( 'lhs' => 129, 'rhs' => 3 ),\r
-  array( 'lhs' => 129, 'rhs' => 3 ),\r
-  array( 'lhs' => 129, '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' => 106, 'rhs' => 1 ),\r
-  array( 'lhs' => 106, 'rhs' => 0 ),\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
     );\r
 \r
     static public $yyReduceMap = array(\r
         0 => 0,\r
         5 => 0,\r
-        11 => 0,\r
-        17 => 0,\r
-        23 => 0,\r
+        12 => 0,\r
+        18 => 0,\r
         24 => 0,\r
+        25 => 0,\r
+        59 => 0,\r
         60 => 0,\r
         61 => 0,\r
-        62 => 0,\r
-        83 => 0,\r
-        90 => 0,\r
-        95 => 0,\r
-        97 => 0,\r
-        98 => 0,\r
-        99 => 0,\r
+        77 => 0,\r
         101 => 0,\r
-        114 => 0,\r
-        187 => 0,\r
+        106 => 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
         1 => 1,\r
         2 => 2,\r
         3 => 3,\r
@@ -1865,128 +1876,124 @@ static public $yy_action = array(
         7 => 7,\r
         8 => 8,\r
         9 => 9,\r
-        15 => 9,\r
-        21 => 9,\r
-        91 => 9,\r
-        93 => 9,\r
-        94 => 9,\r
         10 => 10,\r
         16 => 10,\r
-        19 => 10,\r
         22 => 10,\r
-        12 => 12,\r
-        13 => 12,\r
-        14 => 12,\r
-        18 => 12,\r
-        20 => 20,\r
-        25 => 25,\r
-        26 => 25,\r
-        27 => 27,\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
+        13 => 13,\r
+        14 => 13,\r
+        15 => 13,\r
+        19 => 13,\r
+        21 => 21,\r
+        26 => 26,\r
+        27 => 26,\r
         28 => 28,\r
         29 => 29,\r
-        30 => 29,\r
-        31 => 29,\r
-        32 => 29,\r
-        33 => 33,\r
-        34 => 33,\r
-        35 => 35,\r
-        36 => 35,\r
-        37 => 35,\r
+        30 => 30,\r
+        31 => 30,\r
+        32 => 30,\r
+        33 => 30,\r
+        34 => 34,\r
+        35 => 34,\r
+        36 => 36,\r
+        37 => 36,\r
         38 => 38,\r
         39 => 38,\r
-        40 => 38,\r
-        41 => 41,\r
-        42 => 41,\r
+        40 => 40,\r
+        41 => 40,\r
+        42 => 42,\r
         43 => 43,\r
         44 => 44,\r
         45 => 45,\r
         46 => 46,\r
-        47 => 47,\r
-        49 => 47,\r
+        47 => 46,\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
-        67 => 52,\r
-        146 => 52,\r
-        192 => 52,\r
         53 => 53,\r
         54 => 54,\r
         55 => 55,\r
         56 => 56,\r
         57 => 57,\r
-        58 => 58,\r
-        59 => 58,\r
+        58 => 57,\r
+        62 => 62,\r
         63 => 63,\r
         64 => 64,\r
         65 => 65,\r
-        66 => 66,\r
+        67 => 67,\r
         68 => 68,\r
         69 => 69,\r
-        70 => 70,\r
-        71 => 70,\r
-        72 => 70,\r
-        73 => 70,\r
-        75 => 70,\r
+        70 => 69,\r
+        71 => 69,\r
+        73 => 69,\r
+        72 => 72,\r
         74 => 74,\r
+        75 => 75,\r
         76 => 76,\r
-        77 => 77,\r
         78 => 78,\r
         79 => 79,\r
         80 => 80,\r
-        87 => 80,\r
-        131 => 80,\r
-        154 => 80,\r
-        194 => 80,\r
-        201 => 80,\r
-        202 => 80,\r
-        81 => 81,\r
-        82 => 82,\r
+        81 => 80,\r
+        82 => 80,\r
+        83 => 83,\r
+        136 => 83,\r
+        197 => 83,\r
         84 => 84,\r
-        85 => 84,\r
-        86 => 84,\r
+        87 => 84,\r
+        98 => 84,\r
+        85 => 85,\r
+        86 => 86,\r
         88 => 88,\r
-        89 => 88,\r
+        89 => 89,\r
+        90 => 90,\r
+        95 => 90,\r
+        91 => 91,\r
+        94 => 91,\r
         92 => 92,\r
-        96 => 96,\r
+        97 => 92,\r
+        93 => 93,\r
+        96 => 93,\r
+        99 => 99,\r
         100 => 100,\r
-        102 => 102,\r
         103 => 103,\r
-        104 => 104,\r
-        105 => 105,\r
-        106 => 106,\r
         107 => 107,\r
-        108 => 108,\r
-        109 => 109,\r
-        110 => 110,\r
         111 => 111,\r
-        112 => 112,\r
-        113 => 113,\r
+        114 => 114,\r
         115 => 115,\r
         116 => 116,\r
         117 => 117,\r
         118 => 118,\r
-        193 => 118,\r
-        119 => 119,\r
-        151 => 119,\r
         120 => 120,\r
         121 => 121,\r
         122 => 122,\r
-        123 => 122,\r
-        124 => 122,\r
+        123 => 123,\r
+        124 => 124,\r
+        164 => 124,\r
         125 => 125,\r
         126 => 126,\r
-        129 => 126,\r
         127 => 127,\r
-        128 => 128,\r
+        128 => 127,\r
+        129 => 127,\r
         130 => 130,\r
-        203 => 130,\r
+        131 => 131,\r
+        134 => 131,\r
         132 => 132,\r
         133 => 133,\r
-        134 => 134,\r
-        156 => 134,\r
         135 => 135,\r
-        136 => 136,\r
+        198 => 135,\r
         137 => 137,\r
         138 => 138,\r
         139 => 139,\r
@@ -1996,29 +2003,28 @@ static public $yy_action = array(
         143 => 143,\r
         144 => 144,\r
         145 => 145,\r
+        146 => 146,\r
         147 => 147,\r
         148 => 148,\r
-        149 => 148,\r
+        149 => 149,\r
         150 => 150,\r
-        152 => 152,\r
+        151 => 151,\r
         153 => 153,\r
-        155 => 155,\r
+        154 => 154,\r
+        155 => 154,\r
         157 => 157,\r
-        158 => 158,\r
-        161 => 158,\r
-        172 => 158,\r
         159 => 159,\r
-        160 => 160,\r
+        161 => 161,\r
         162 => 162,\r
         163 => 163,\r
-        164 => 164,\r
-        169 => 164,\r
         165 => 165,\r
-        168 => 165,\r
         166 => 166,\r
-        171 => 166,\r
         167 => 167,\r
-        170 => 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
@@ -2026,28 +2032,26 @@ static public $yy_action = array(
         177 => 177,\r
         178 => 178,\r
         179 => 179,\r
-        180 => 180,\r
         181 => 181,\r
         182 => 182,\r
         183 => 183,\r
         184 => 184,\r
-        185 => 185,\r
         186 => 186,\r
+        187 => 187,\r
         188 => 188,\r
         189 => 189,\r
         190 => 190,\r
-        191 => 191,\r
+        191 => 190,\r
+        193 => 190,\r
+        192 => 192,\r
+        194 => 194,\r
         195 => 195,\r
-        198 => 195,\r
         196 => 196,\r
-        197 => 197,\r
-        199 => 199,\r
-        200 => 200,\r
     );\r
-#line 81 "smarty_internal_templateparser.y"\r
+#line 84 "smarty_internal_templateparser.y"\r
     function yy_r0(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2044 "smarty_internal_templateparser.php"\r
-#line 87 "smarty_internal_templateparser.y"\r
+#line 2048 "smarty_internal_templateparser.php"\r
+#line 90 "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
@@ -2055,8 +2059,8 @@ static public $yy_action = array(
                                                   $this->template->extracted_compiled_code .= $this->yystack[$this->yyidx + 0]->minor;\r
                                                } \r
                                                  }\r
-#line 2053 "smarty_internal_templateparser.php"\r
-#line 95 "smarty_internal_templateparser.y"\r
+#line 2057 "smarty_internal_templateparser.php"\r
+#line 98 "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
@@ -2065,18 +2069,23 @@ static public $yy_action = array(
                                                              $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;\r
                                                            } \r
                                                               }\r
-#line 2063 "smarty_internal_templateparser.php"\r
-#line 108 "smarty_internal_templateparser.y"\r
+#line 2067 "smarty_internal_templateparser.php"\r
+#line 111 "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
                                             $this->_retvalue = $this->compiler->processNocacheCode($tmp.$this->yystack[$this->yyidx + 0]->minor,true);\r
-                                         } else { $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;}  $this->compiler->has_variable_string = false;    }\r
-#line 2070 "smarty_internal_templateparser.php"\r
-#line 115 "smarty_internal_templateparser.y"\r
+                                         } else { \r
+                                           $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;\r
+                                         }  \r
+                                         $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
     function yy_r4(){ $this->_retvalue = '';    }\r
-#line 2073 "smarty_internal_templateparser.php"\r
-#line 121 "smarty_internal_templateparser.y"\r
+#line 2082 "smarty_internal_templateparser.php"\r
+#line 129 "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
@@ -2088,428 +2097,425 @@ static public $yy_action = array(
                                        $this->_retvalue = '';\r
                                       }\r
                                          }\r
-#line 2086 "smarty_internal_templateparser.php"\r
-#line 135 "smarty_internal_templateparser.y"\r
+#line 2095 "smarty_internal_templateparser.php"\r
+#line 141 "smarty_internal_templateparser.y"\r
     function yy_r7(){if ($this->lex->strip) {\r
-                                       $this->_retvalue = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor);  \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 = $this->yystack[$this->yyidx + 0]->minor;     \r
+                                       $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     \r
                                      }\r
                                         }\r
-#line 2094 "smarty_internal_templateparser.php"\r
-#line 141 "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
+#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
+                                       $this->_retvalue = preg_replace('![\t ]*[\r\n]+[\t ]*!', '', $this->yystack[$this->yyidx + 0]->minor);  \r
                                      } else {\r
-                                       $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     \r
+                                       $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;     \r
                                      }\r
                                         }\r
-#line 2102 "smarty_internal_templateparser.php"\r
-#line 150 "smarty_internal_templateparser.y"\r
-    function yy_r9(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2105 "smarty_internal_templateparser.php"\r
-#line 151 "smarty_internal_templateparser.y"\r
-    function yy_r10(){ $this->_retvalue = '';     }\r
-#line 2108 "smarty_internal_templateparser.php"\r
-#line 154 "smarty_internal_templateparser.y"\r
-    function yy_r12(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2111 "smarty_internal_templateparser.php"\r
-#line 167 "smarty_internal_templateparser.y"\r
-    function yy_r20(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;     }\r
 #line 2114 "smarty_internal_templateparser.php"\r
-#line 174 "smarty_internal_templateparser.y"\r
-    function yy_r25(){ $this->_retvalue = self::escape_start_tag($this->yystack[$this->yyidx + 0]->minor);     }\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 176 "smarty_internal_templateparser.y"\r
-    function yy_r27(){ $this->_retvalue = self::escape_end_tag($this->yystack[$this->yyidx + 0]->minor);     }\r
+#line 161 "smarty_internal_templateparser.y"\r
+    function yy_r11(){ $this->_retvalue = '';     }\r
 #line 2120 "smarty_internal_templateparser.php"\r
-#line 184 "smarty_internal_templateparser.y"\r
-    function yy_r28(){ $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('value'=>$this->yystack[$this->yyidx + -1]->minor));    }\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 185 "smarty_internal_templateparser.y"\r
-    function yy_r29(){ $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 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
-#line 196 "smarty_internal_templateparser.y"\r
-    function yy_r33(){ $this->_retvalue = $this->compiler->compileTag('assign',array('value'=>$this->yystack[$this->yyidx + -1]->minor,'var'=>"'".$this->yystack[$this->yyidx + -3]->minor."'"));    }\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
-#line 198 "smarty_internal_templateparser.y"\r
-    function yy_r35(){ $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 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
-#line 201 "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 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
-#line 205 "smarty_internal_templateparser.y"\r
-    function yy_r41(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + -1]->minor);    }\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
-#line 207 "smarty_internal_templateparser.y"\r
-    function yy_r43(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,array());    }\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
-#line 209 "smarty_internal_templateparser.y"\r
-    function yy_r44(){ $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 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
-#line 211 "smarty_internal_templateparser.y"\r
-    function yy_r45(){  $this->_retvalue = '<?php ob_start();?>'.$this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + -1]->minor).'<?php echo ';\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
+#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
+#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
+#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
+#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
                                                                                     $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 2149 "smarty_internal_templateparser.php"\r
-#line 215 "smarty_internal_templateparser.y"\r
-    function yy_r46(){  $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
+#line 2161 "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
                                                                                                $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 2154 "smarty_internal_templateparser.php"\r
-#line 219 "smarty_internal_templateparser.y"\r
-    function yy_r47(){ $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 2157 "smarty_internal_templateparser.php"\r
-#line 220 "smarty_internal_templateparser.y"\r
-    function yy_r48(){ $this->_retvalue = $this->compiler->compileTag(($this->yystack[$this->yyidx + -3]->minor == 'else if')? 'elseif' : $this->yystack[$this->yyidx + -3]->minor,array('if condition'=>trim($this->yystack[$this->yyidx + -2]->minor).$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2160 "smarty_internal_templateparser.php"\r
-#line 223 "smarty_internal_templateparser.y"\r
-    function yy_r50(){\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 2164 "smarty_internal_templateparser.php"\r
-#line 225 "smarty_internal_templateparser.y"\r
-    function yy_r51(){ $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2167 "smarty_internal_templateparser.php"\r
-#line 226 "smarty_internal_templateparser.y"\r
-    function yy_r52(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2170 "smarty_internal_templateparser.php"\r
+#line 2166 "smarty_internal_templateparser.php"\r
 #line 227 "smarty_internal_templateparser.y"\r
-    function yy_r53(){ $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 2173 "smarty_internal_templateparser.php"\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
 #line 230 "smarty_internal_templateparser.y"\r
-    function yy_r54(){\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 2177 "smarty_internal_templateparser.php"\r
-#line 232 "smarty_internal_templateparser.y"\r
-    function yy_r55(){\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 2181 "smarty_internal_templateparser.php"\r
+    function yy_r48(){\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 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
 #line 234 "smarty_internal_templateparser.y"\r
-    function yy_r56(){ \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 2185 "smarty_internal_templateparser.php"\r
+    function yy_r50(){ $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 2179 "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
 #line 236 "smarty_internal_templateparser.y"\r
-    function yy_r57(){ \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
+    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
+#line 238 "smarty_internal_templateparser.y"\r
+    function yy_r53(){\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 240 "smarty_internal_templateparser.y"\r
-    function yy_r58(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array());    }\r
-#line 2192 "smarty_internal_templateparser.php"\r
-#line 245 "smarty_internal_templateparser.y"\r
-    function yy_r63(){ $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',$this->yystack[$this->yyidx + -1]->minor);    }\r
-#line 2195 "smarty_internal_templateparser.php"\r
-#line 246 "smarty_internal_templateparser.y"\r
-    function yy_r64(){  $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(){\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 242 "smarty_internal_templateparser.y"\r
+    function yy_r55(){ \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 244 "smarty_internal_templateparser.y"\r
+    function yy_r56(){ \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 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
+#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
+#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
                                                                                          $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 2200 "smarty_internal_templateparser.php"\r
-#line 250 "smarty_internal_templateparser.y"\r
-    function yy_r65(){  $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array('object_methode'=>$this->yystack[$this->yyidx + -1]->minor));    }\r
-#line 2203 "smarty_internal_templateparser.php"\r
-#line 257 "smarty_internal_templateparser.y"\r
-    function yy_r66(){ $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2206 "smarty_internal_templateparser.php"\r
-#line 261 "smarty_internal_templateparser.y"\r
-    function yy_r68(){ $this->_retvalue = array();    }\r
-#line 2209 "smarty_internal_templateparser.php"\r
-#line 264 "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 2212 "smarty_internal_templateparser.php"\r
-#line 265 "smarty_internal_templateparser.y"\r
-    function yy_r70(){ $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);    }\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
-#line 269 "smarty_internal_templateparser.y"\r
-    function yy_r74(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor=>'true');    }\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
-#line 276 "smarty_internal_templateparser.y"\r
-    function yy_r76(){ $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);    }\r
+#line 269 "smarty_internal_templateparser.y"\r
+    function yy_r67(){ $this->_retvalue = array();    }\r
 #line 2221 "smarty_internal_templateparser.php"\r
-#line 277 "smarty_internal_templateparser.y"\r
-    function yy_r77(){ $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor; $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;    }\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 279 "smarty_internal_templateparser.y"\r
-    function yy_r78(){ $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);    }\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 285 "smarty_internal_templateparser.y"\r
-    function yy_r79(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';     }\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
-#line 286 "smarty_internal_templateparser.y"\r
-    function yy_r80(){$this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;    }\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 288 "smarty_internal_templateparser.y"\r
-    function yy_r81(){$this->_retvalue = '$_smarty_tpl->getStreamVariable(\''. $this->yystack[$this->yyidx + -2]->minor .'://'. $this->yystack[$this->yyidx + 0]->minor . '\')';    }\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 289 "smarty_internal_templateparser.y"\r
-    function yy_r82(){  $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 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_r84(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;     }\r
+    function yy_r78(){ $this->_retvalue = "'".$this->yystack[$this->yyidx + 0]->minor."'";     }\r
 #line 2242 "smarty_internal_templateparser.php"\r
-#line 307 "smarty_internal_templateparser.y"\r
-    function yy_r88(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;    }\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 316 "smarty_internal_templateparser.y"\r
-    function yy_r92(){ $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;     }\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
-#line 321 "smarty_internal_templateparser.y"\r
-    function yy_r96(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;     }\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 331 "smarty_internal_templateparser.y"\r
-    function yy_r100(){ $this->_retvalue = "(". $this->yystack[$this->yyidx + -1]->minor .")";     }\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 335 "smarty_internal_templateparser.y"\r
-    function yy_r102(){ $_s = str_replace(array('."".','.""'),array('.',''),'"'.$this->yystack[$this->yyidx + -1]->minor.'"'); \r
-                                                    if (substr($_s,0,3) == '"".') {\r
-                                                      $this->_retvalue = substr($_s,3);\r
-                                                    } else {\r
-                                                      $this->_retvalue = $_s;\r
-                                                    }\r
-                                                      }\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
+#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
-#line 342 "smarty_internal_templateparser.y"\r
-    function yy_r103(){ $this->_retvalue = "''";     }\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 344 "smarty_internal_templateparser.y"\r
-    function yy_r104(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;     }\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 345 "smarty_internal_templateparser.y"\r
-    function yy_r105(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -3]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -6]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -1]->minor .')';     }\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 347 "smarty_internal_templateparser.y"\r
-    function yy_r106(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.'::'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\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
-#line 348 "smarty_internal_templateparser.y"\r
-    function yy_r107(){ $this->prefix_number++; $this->compiler->prefix_code[] = '<?php $_tmp'.$this->prefix_number.'=$_smarty_tpl->getVariable(\''. $this->yystack[$this->yyidx + -4]->minor .'\')->value;?>'; $this->_retvalue = $this->yystack[$this->yyidx + -7]->minor.'::$_tmp'.$this->prefix_number.'('. $this->yystack[$this->yyidx + -2]->minor .')'.$this->yystack[$this->yyidx + 0]->minor;     }\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
-#line 350 "smarty_internal_templateparser.y"\r
-    function yy_r108(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor;    }\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 352 "smarty_internal_templateparser.y"\r
-    function yy_r109(){ $this->_retvalue = $this->yystack[$this->yyidx + -4]->minor.'::$'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\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 354 "smarty_internal_templateparser.y"\r
-    function yy_r110(){ $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.'::$'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\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 356 "smarty_internal_templateparser.y"\r
-    function yy_r111(){ $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 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 365 "smarty_internal_templateparser.y"\r
-    function yy_r112(){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 2294 "smarty_internal_templateparser.php"\r
-#line 368 "smarty_internal_templateparser.y"\r
-    function yy_r113(){ $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 2297 "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
+                                                                  $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_r115(){$this->_retvalue = '$_smarty_tpl->getConfigVariable(\''. $this->yystack[$this->yyidx + -1]->minor .'\')';    }\r
-#line 2300 "smarty_internal_templateparser.php"\r
-#line 373 "smarty_internal_templateparser.y"\r
-    function yy_r116(){$this->_retvalue = '$_smarty_tpl->getConfigVariable('. $this->yystack[$this->yyidx + -1]->minor .')';    }\r
-#line 2303 "smarty_internal_templateparser.php"\r
-#line 376 "smarty_internal_templateparser.y"\r
-    function yy_r117(){$this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);    }\r
-#line 2306 "smarty_internal_templateparser.php"\r
-#line 382 "smarty_internal_templateparser.y"\r
-    function yy_r118(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2309 "smarty_internal_templateparser.php"\r
-#line 384 "smarty_internal_templateparser.y"\r
-    function yy_r119(){return;    }\r
-#line 2312 "smarty_internal_templateparser.php"\r
-#line 388 "smarty_internal_templateparser.y"\r
-    function yy_r120(){ $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 2315 "smarty_internal_templateparser.php"\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_r121(){ $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 2318 "smarty_internal_templateparser.php"\r
-#line 392 "smarty_internal_templateparser.y"\r
-    function yy_r122(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }\r
-#line 2321 "smarty_internal_templateparser.php"\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 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_r125(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + 0]->minor ."]";    }\r
-#line 2324 "smarty_internal_templateparser.php"\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_r126(){ $this->_retvalue = "[". $this->yystack[$this->yyidx + -1]->minor ."]";    }\r
-#line 2327 "smarty_internal_templateparser.php"\r
-#line 399 "smarty_internal_templateparser.y"\r
-    function yy_r127(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';    }\r
-#line 2330 "smarty_internal_templateparser.php"\r
-#line 400 "smarty_internal_templateparser.y"\r
-    function yy_r128(){ $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable','[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';    }\r
-#line 2333 "smarty_internal_templateparser.php"\r
+    function yy_r127(){ $this->_retvalue = "['". $this->yystack[$this->yyidx + 0]->minor ."']";    }\r
+#line 2335 "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
 #line 404 "smarty_internal_templateparser.y"\r
-    function yy_r130(){$this->_retvalue = '';    }\r
-#line 2336 "smarty_internal_templateparser.php"\r
-#line 412 "smarty_internal_templateparser.y"\r
-    function yy_r132(){$this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2339 "smarty_internal_templateparser.php"\r
-#line 414 "smarty_internal_templateparser.y"\r
-    function yy_r133(){$this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\r
-#line 2342 "smarty_internal_templateparser.php"\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
 #line 417 "smarty_internal_templateparser.y"\r
-    function yy_r134(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
-#line 2345 "smarty_internal_templateparser.php"\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
+#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
 #line 422 "smarty_internal_templateparser.y"\r
-    function yy_r135(){ 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 2349 "smarty_internal_templateparser.php"\r
-#line 425 "smarty_internal_templateparser.y"\r
-    function yy_r136(){$this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2352 "smarty_internal_templateparser.php"\r
+    function yy_r139(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 2359 "smarty_internal_templateparser.php"\r
 #line 427 "smarty_internal_templateparser.y"\r
-    function yy_r137(){$this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;     }\r
-#line 2355 "smarty_internal_templateparser.php"\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_r138(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2358 "smarty_internal_templateparser.php"\r
-#line 430 "smarty_internal_templateparser.y"\r
-    function yy_r139(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2361 "smarty_internal_templateparser.php"\r
-#line 431 "smarty_internal_templateparser.y"\r
-    function yy_r140(){ $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\r
-#line 2364 "smarty_internal_templateparser.php"\r
-#line 432 "smarty_internal_templateparser.y"\r
-    function yy_r141(){ $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';    }\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 434 "smarty_internal_templateparser.y"\r
-    function yy_r142(){ $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;    }\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 440 "smarty_internal_templateparser.y"\r
-    function yy_r143(){if (!$this->template->security || $this->smarty->security_handler->isTrustedPhpFunction($this->yystack[$this->yyidx + -3]->minor, $this->compiler)) {\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
+#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
+#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
                                                                                                                                                                                    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 2379 "smarty_internal_templateparser.php"\r
-#line 451 "smarty_internal_templateparser.y"\r
-    function yy_r144(){ $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . "(". $this->yystack[$this->yyidx + -1]->minor .")";    }\r
-#line 2382 "smarty_internal_templateparser.php"\r
-#line 455 "smarty_internal_templateparser.y"\r
-    function yy_r145(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.",".$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2385 "smarty_internal_templateparser.php"\r
-#line 459 "smarty_internal_templateparser.y"\r
-    function yy_r147(){ return;    }\r
-#line 2388 "smarty_internal_templateparser.php"\r
-#line 464 "smarty_internal_templateparser.y"\r
-    function yy_r148(){ $this->_retvalue =  $this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2391 "smarty_internal_templateparser.php"\r
-#line 477 "smarty_internal_templateparser.y"\r
-    function yy_r150(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\r
-#line 2394 "smarty_internal_templateparser.php"\r
-#line 481 "smarty_internal_templateparser.y"\r
-    function yy_r152(){$this->_retvalue = ','.$this->yystack[$this->yyidx + 0]->minor;    }\r
 #line 2397 "smarty_internal_templateparser.php"\r
-#line 482 "smarty_internal_templateparser.y"\r
-    function yy_r153(){$this->_retvalue = ',\''.$this->yystack[$this->yyidx + 0]->minor.'\'';    }\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 489 "smarty_internal_templateparser.y"\r
-    function yy_r155(){$this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;    }\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 494 "smarty_internal_templateparser.y"\r
-    function yy_r157(){$this->_retvalue =$this->yystack[$this->yyidx + 0]->minor;    }\r
+#line 466 "smarty_internal_templateparser.y"\r
+    function yy_r153(){ return;    }\r
 #line 2406 "smarty_internal_templateparser.php"\r
-#line 495 "smarty_internal_templateparser.y"\r
-    function yy_r158(){$this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;    }\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 496 "smarty_internal_templateparser.y"\r
-    function yy_r159(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';    }\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 497 "smarty_internal_templateparser.y"\r
-    function yy_r160(){$this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';    }\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
-#line 499 "smarty_internal_templateparser.y"\r
-    function yy_r162(){$this->_retvalue = '!('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\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 500 "smarty_internal_templateparser.y"\r
-    function yy_r163(){$this->_retvalue = '('.$this->yystack[$this->yyidx + -2]->minor.' % '.$this->yystack[$this->yyidx + 0]->minor.')';    }\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
-#line 501 "smarty_internal_templateparser.y"\r
-    function yy_r164(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\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
-#line 502 "smarty_internal_templateparser.y"\r
-    function yy_r165(){$this->_retvalue = '(1 & '.$this->yystack[$this->yyidx + -1]->minor.')';    }\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 503 "smarty_internal_templateparser.y"\r
-    function yy_r166(){$this->_retvalue = '!(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\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 = '(1 & '.$this->yystack[$this->yyidx + -2]->minor.' / '.$this->yystack[$this->yyidx + 0]->minor.')';    }\r
+    function yy_r167(){$this->_retvalue = '==';    }\r
 #line 2433 "smarty_internal_templateparser.php"\r
-#line 510 "smarty_internal_templateparser.y"\r
-    function yy_r173(){$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 505 "smarty_internal_templateparser.y"\r
+    function yy_r168(){$this->_retvalue = '!=';    }\r
 #line 2436 "smarty_internal_templateparser.php"\r
-#line 512 "smarty_internal_templateparser.y"\r
-    function yy_r174(){$this->_retvalue = '==';    }\r
+#line 506 "smarty_internal_templateparser.y"\r
+    function yy_r169(){$this->_retvalue = '>';    }\r
 #line 2439 "smarty_internal_templateparser.php"\r
-#line 513 "smarty_internal_templateparser.y"\r
-    function yy_r175(){$this->_retvalue = '!=';    }\r
+#line 507 "smarty_internal_templateparser.y"\r
+    function yy_r170(){$this->_retvalue = '<';    }\r
 #line 2442 "smarty_internal_templateparser.php"\r
-#line 514 "smarty_internal_templateparser.y"\r
-    function yy_r176(){$this->_retvalue = '>';    }\r
+#line 508 "smarty_internal_templateparser.y"\r
+    function yy_r171(){$this->_retvalue = '>=';    }\r
 #line 2445 "smarty_internal_templateparser.php"\r
-#line 515 "smarty_internal_templateparser.y"\r
-    function yy_r177(){$this->_retvalue = '<';    }\r
+#line 509 "smarty_internal_templateparser.y"\r
+    function yy_r172(){$this->_retvalue = '<=';    }\r
 #line 2448 "smarty_internal_templateparser.php"\r
-#line 516 "smarty_internal_templateparser.y"\r
-    function yy_r178(){$this->_retvalue = '>=';    }\r
+#line 510 "smarty_internal_templateparser.y"\r
+    function yy_r173(){$this->_retvalue = '===';    }\r
 #line 2451 "smarty_internal_templateparser.php"\r
-#line 517 "smarty_internal_templateparser.y"\r
-    function yy_r179(){$this->_retvalue = '<=';    }\r
+#line 511 "smarty_internal_templateparser.y"\r
+    function yy_r174(){$this->_retvalue = '!==';    }\r
 #line 2454 "smarty_internal_templateparser.php"\r
-#line 518 "smarty_internal_templateparser.y"\r
-    function yy_r180(){$this->_retvalue = '===';    }\r
+#line 512 "smarty_internal_templateparser.y"\r
+    function yy_r175(){$this->_retvalue = '%';    }\r
 #line 2457 "smarty_internal_templateparser.php"\r
-#line 519 "smarty_internal_templateparser.y"\r
-    function yy_r181(){$this->_retvalue = '!==';    }\r
+#line 514 "smarty_internal_templateparser.y"\r
+    function yy_r176(){$this->_retvalue = '&&';    }\r
 #line 2460 "smarty_internal_templateparser.php"\r
-#line 520 "smarty_internal_templateparser.y"\r
-    function yy_r182(){$this->_retvalue = '%';    }\r
+#line 515 "smarty_internal_templateparser.y"\r
+    function yy_r177(){$this->_retvalue = '||';    }\r
 #line 2463 "smarty_internal_templateparser.php"\r
-#line 522 "smarty_internal_templateparser.y"\r
-    function yy_r183(){$this->_retvalue = '&&';    }\r
+#line 516 "smarty_internal_templateparser.y"\r
+    function yy_r178(){$this->_retvalue = ' XOR ';    }\r
 #line 2466 "smarty_internal_templateparser.php"\r
-#line 523 "smarty_internal_templateparser.y"\r
-    function yy_r184(){$this->_retvalue = '||';    }\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
-#line 524 "smarty_internal_templateparser.y"\r
-    function yy_r185(){$this->_retvalue = ' XOR ';    }\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
-#line 529 "smarty_internal_templateparser.y"\r
-    function yy_r186(){ $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';    }\r
+#line 524 "smarty_internal_templateparser.y"\r
+    function yy_r182(){ return;     }\r
 #line 2475 "smarty_internal_templateparser.php"\r
-#line 531 "smarty_internal_templateparser.y"\r
-    function yy_r188(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;     }\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
-#line 532 "smarty_internal_templateparser.y"\r
-    function yy_r189(){ return;     }\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
 #line 533 "smarty_internal_templateparser.y"\r
-    function yy_r190(){ $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+    function yy_r186(){ $this->_retvalue = "''";     }\r
 #line 2484 "smarty_internal_templateparser.php"\r
 #line 534 "smarty_internal_templateparser.y"\r
-    function yy_r191(){ $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;    }\r
+    function yy_r187(){ $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php();     }\r
 #line 2487 "smarty_internal_templateparser.php"\r
-#line 543 "smarty_internal_templateparser.y"\r
-    function yy_r195(){if (substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '\'' || substr($this->yystack[$this->yyidx + -1]->minor,0,1) == '@') {\r
-                                                                 $this->_retvalue = '".'.$this->yystack[$this->yyidx + -1]->minor.'."'; $this->compiler->has_variable_string = true;\r
-                                                                } else {\r
-                                                                 $this->_retvalue = '{'.$this->yystack[$this->yyidx + -1]->minor.'}'; $this->compiler->has_variable_string = true;\r
-                                                                }\r
-                                                                   }\r
-#line 2495 "smarty_internal_templateparser.php"\r
-#line 549 "smarty_internal_templateparser.y"\r
-    function yy_r196(){$this->_retvalue = '{'.$this->yystack[$this->yyidx + -1]->minor.'}'; $this->compiler->has_variable_string = true;    }\r
-#line 2498 "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
+#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
+      }\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
+   $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_r197(){$this->_retvalue = '{$_smarty_tpl->getVariable(\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\')->value}'; $this->compiler->tag_nocache=$this->compiler->tag_nocache|$this->template->getVariable(trim($this->yystack[$this->yyidx + 0]->minor,"'"), null, true, false)->nocache; $this->compiler->has_variable_string = true;    }\r
-#line 2501 "smarty_internal_templateparser.php"\r
-#line 557 "smarty_internal_templateparser.y"\r
-    function yy_r199(){ $this->_retvalue = '".('.$this->yystack[$this->yyidx + -1]->minor.')."'; $this->compiler->has_variable_string = true;    }\r
-#line 2504 "smarty_internal_templateparser.php"\r
-#line 558 "smarty_internal_templateparser.y"\r
-    function yy_r200(){ $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.'}'; $this->compiler->has_variable_string = true;    }\r
-#line 2507 "smarty_internal_templateparser.php"\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
 \r
     private $_retvalue;\r
 \r
@@ -2566,12 +2572,12 @@ static public $yy_action = array(
 \r
     function yy_syntax_error($yymajor, $TOKEN)\r
     {\r
-#line 71 "smarty_internal_templateparser.y"\r
+#line 72 "smarty_internal_templateparser.y"\r
 \r
     $this->internalError = true;\r
     $this->yymajor = $yymajor;\r
     $this->compiler->trigger_template_error();\r
-#line 2570 "smarty_internal_templateparser.php"\r
+#line 2576 "smarty_internal_templateparser.php"\r
     }\r
 \r
     function yy_accept()\r
@@ -2582,13 +2588,13 @@ static public $yy_action = array(
         while ($this->yyidx >= 0) {\r
             $stack = $this->yy_pop_parser_stack();\r
         }\r
-#line 63 "smarty_internal_templateparser.y"\r
+#line 64 "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 2588 "smarty_internal_templateparser.php"\r
+#line 2594 "smarty_internal_templateparser.php"\r
     }\r
 \r
     function doParse($yymajor, $yytokenvalue)\r
@@ -2681,4 +2687,4 @@ static public $yy_action = array(
         } while ($yymajor != self::YYNOCODE && $this->yyidx >= 0);\r
     }\r
 }\r
-?>\r
+?>
\ No newline at end of file
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_unregister.php b/gosa-core/include/smarty/sysplugins/smarty_internal_unregister.php
new file mode 100644 (file)
index 0000000..5f3e2ef
--- /dev/null
@@ -0,0 +1,151 @@
+<?php
+
+/**
+* Project:     Smarty: the PHP compiling template engine
+* File:        smarty_internal_unregister.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_Unregister {
+  
+    protected $smarty;
+
+    function __construct($smarty) {
+      $this->smarty = $smarty;
+    }
+    
+    /**
+    * Unregisters block function
+    * 
+    * @param string $block_tag name of template function
+    */
+    function block($block_tag)
+    {
+        if (isset($this->smarty->registered_plugins['block'][$block_tag])) {
+            unset($this->smarty->registered_plugins['block'][$block_tag]);
+        } 
+    }
+    
+    /**
+    * Unregisters compiler function
+    * 
+    * @param string $compiler_tag name of template function
+    */
+    function compilerFunction($compiler_tag)
+    {
+        if (isset($this->smarty->registered_plugins['compiler'][$compiler_tag])) {
+            unset($this->smarty->registered_plugins['compiler'][$compiler_tag]);
+        } 
+    } 
+    
+    /**
+    * Unregisters custom function
+    * 
+    * @param string $function_tag name of template function
+    */
+    function templateFunction($function_tag)
+    {
+        if (isset($this->smarty->registered_plugins['function'][$function_tag])) {
+            unset($this->smarty->registered_plugins['function'][$function_tag]);
+        } 
+    }    
+    
+    /**
+    * Unregisters modifier
+    * 
+    * @param string $modifier name of template modifier
+    */
+    function modifier($modifier)
+    {
+        if (isset($this->smarty->registered_plugins['modifier'][$modifier])) {
+            unset($this->smarty->registered_plugins['modifier'][$modifier]);
+        } 
+    }    
+    
+    /**
+    * Unregisters template object
+    * 
+    * @param string $object_name name of template object
+    */
+     function templateObject($object_name)
+    {
+        unset($this->smarty->registered_objects[$object_name]);
+    } 
+    
+    /**
+    * Unregisters an output filter
+    * 
+    * @param callback $function_name 
+    */
+    function outputFilter($function_name)
+    {
+        unset($this->smarty->registered_filters['output'][$this->smarty->_get_filter_name($function_name)]);
+    }    
+    
+    /**
+    * Unregisters a postfilter function
+    * 
+    * @param callback $function_name 
+    */
+    function postFilter($function_name)
+    {
+        unset($this->smarty->registered_filters['post'][$this->smarty->_get_filter_name($function_name)]);
+    }    
+    
+    /**
+    * Unregisters a prefilter function
+    * 
+    * @param callback $function_name 
+    */
+    function preFilter($function_name)
+    {
+        unset($this->smarty->registered_filters['pre'][$this->smarty->_get_filter_name($function_name)]);
+    }    
+    
+    /**
+    * Unregisters a resource
+    * 
+    * @param string $resource_name name of resource
+    */
+    function resource($resource_name)
+    {
+        unset($this->smarty->plugins['resource'][$resource_name]);
+    }    
+    
+    /**
+    * Unregisters a variablefilter function
+    * 
+    * @param callback $function_name 
+    */
+    function variableFilter($function_name)
+    {
+        unset($this->smarty->registered_filters['variable'][$this->smarty->_get_filter_name($function_name)]);
+    }    
+    
+}
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php b/gosa-core/include/smarty/sysplugins/smarty_internal_utility.php
new file mode 100644 (file)
index 0000000..abf7e1b
--- /dev/null
@@ -0,0 +1,223 @@
+<?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 $
+*/
+
+class Smarty_Internal_Utility {
+  
+    protected $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
+    */
+    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);
+        } 
+        $this->smarty->force_compile = $force_compile;
+        $_count = 0;
+        $_error_count = 0; 
+        // loop over array of template directories
+        foreach((array)$this->smarty->template_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)) {
+                    $_template_file = $_file;
+                } else {
+                    $_template_file = substr($_fileinfo->getPath(), strlen($_dir)) . '\\' . $_file;
+                } 
+                echo '<br>', $_dir, '---', $_template_file;
+                flush();
+                $_start_time = _get_time();
+                try {
+                    $_tpl = $this->smarty->createTemplate($_template_file);
+                    $_tpl->getCompiledTemplate();
+                } 
+                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();
+                } 
+            } 
+        } 
+        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;
+        $_dir_sep = $this->smarty->use_sub_dirs ? DS : '^';
+        if (isset($resource_name)) {
+            $_resource_part_1 = $resource_name . '.php';
+            $_resource_part_2 = $resource_name . '.cache' . '.php';
+        } else {
+            $_resource_part = '';
+        } 
+        $_dir = $this->smarty->compile_dir;
+        if ($this->smarty->use_sub_dirs && isset($_compile_id)) {
+            $_dir .= $_compile_id . $_dir_sep;
+        } 
+        if (isset($_compile_id)) {
+            $_compile_id_part = $this->smarty->compile_dir . $_compile_id . $_dir_sep;
+        } 
+        $_count = 0;
+        $_compileDirs = new RecursiveDirectoryIterator($_dir);
+        $_compile = new RecursiveIteratorIterator($_compileDirs, RecursiveIteratorIterator::CHILD_FIRST);
+        foreach ($_compile as $_file) {
+            if (strpos($_file, '.svn') !== false) continue;
+            if ($_file->isDir()) {
+                if (!$_compile->isDot()) {
+                    // delete folder if empty
+                    @rmdir($_file->getPathname());
+                } 
+            } else {
+                if ((!isset($_compile_id) || (strlen((string)$_file) > strlen($_compile_id_part) && substr_compare((string)$_file, $_compile_id_part, 0, strlen($_compile_id_part)) == 0)) &&
+                        (!isset($resource_name) || (strlen((string)$_file) > strlen($_resource_part_1) && substr_compare((string)$_file, $_resource_part_1, - strlen($_resource_part_1), strlen($_resource_part_1)) == 0) ||
+                            (strlen((string)$_file) > strlen($_resource_part_2) && substr_compare((string)$_file, $_resource_part_2, - strlen($_resource_part_2), strlen($_resource_part_2)) == 0))) {
+                    if (isset($exp_time)) {
+                        if (time() - @filemtime($_file) >= $exp_time) {
+                            $_count += @unlink((string) $_file) ? 1 : 0;
+                        } 
+                    } else {
+                        $_count += @unlink((string) $_file) ? 1 : 0;
+                    } 
+                } 
+            } 
+        } 
+        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";
+            elseif (!is_readable($template_dir))
+                echo "FAILED: $template_dir is not readable.\n";
+            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";
+        elseif (!is_readable($this->smarty->compile_dir))
+            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";
+        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";
+            elseif (!is_readable($plugin_dir))
+                echo "FAILED: $plugin_dir is not readable.\n";
+            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";
+        elseif (!is_readable($this->smarty->cache_dir))
+            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";
+        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";
+        elseif (!is_readable($this->smarty->config_dir))
+            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;
+    } 
+    
+}
diff --git a/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php b/gosa-core/include/smarty/sysplugins/smarty_internal_wrapper.php
new file mode 100644 (file)
index 0000000..aa7bfb4
--- /dev/null
@@ -0,0 +1,127 @@
+<?php
+
+/**
+* Project:     Smarty: the PHP compiling template engine
+* File:        smarty_internal_wrapper.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 $
+*/
+
+/*
+ * Smarty Backward Compatability Wrapper
+ */
+
+class Smarty_Internal_Wrapper {
+  
+    protected $smarty;
+
+    function __construct($smarty) {
+      $this->smarty = $smarty;
+    }
+    
+    /**
+    * Converts smarty2-style function call to smarty 3-style function call
+    * This is expensive, be sure to port your code to Smarty 3!
+    * 
+    * @param string $name Smarty 2 function name
+    * @param array $args Smarty 2 function args
+    */
+    function convert($name, $args) {
+       // throw notice about deprecated function
+       if($this->smarty->deprecation_notices)
+         trigger_error("function call '$name' is unknown or deprecated.",E_USER_NOTICE);
+       // get first and last part of function name
+       $name_parts = explode('_',$name,2);
+       switch($name_parts[0]) {
+         case 'register':
+         case 'unregister':
+           $myobj = $name_parts[0] == 'register' ? $this->smarty->register : $this->smarty->unregister;
+           switch($name_parts[1]) {
+              case 'function':
+                 return call_user_func_array(array($myobj,'templateFunction'),$args);
+                 break;
+              case 'object':
+                 return call_user_func_array(array($myobj,'templateObject'),$args);
+                 break;
+              case 'compiler_function':
+                 return call_user_func_array(array($myobj,'compilerFunction'),$args);
+                 break;
+              default:
+                 return call_user_func_array(array($myobj,$name_parts[1]),$args);
+                 break;
+           }
+           break;
+           case 'get':
+           switch($name_parts[1]) {
+              case 'template_vars':
+                 return call_user_func_array(array($this->smarty,'getTemplateVars'),$args);
+                 break;
+              case 'config_vars':
+                 return call_user_func_array(array($this->smarty,'getConfigVars'),$args);
+                 break;
+              default:
+                 return call_user_func_array(array($myobj,$name_parts[1]),$args);
+                 break;
+           }
+           break;
+           case 'clear':
+           switch($name_parts[1]) {
+              case 'all_assign':
+                 return call_user_func_array(array($this->smarty,'clearAllAssign'),$args);
+                 break;
+           }
+           break;
+           case 'config':
+           switch($name_parts[1]) {
+              case 'load':
+                 return call_user_func_array(array($this->smarty,'configLoad'),$args);
+                 break;
+           }
+           break;
+           default:
+             // convert foo_bar_baz to fooBarBaz style names
+             $name_parts = explode('_',$name);
+             foreach($name_parts as $idx=>$part) {
+                if($idx==0)
+                  $name_parts[$idx] = strtolower($part);
+                else
+                  $name_parts[$idx] = ucfirst($part);
+             }
+             $func_name = implode('',$name_parts);
+             if(!method_exists($this->smarty,$func_name)) {
+                throw new Exception("unknown method '$name'");
+                return false;
+             }
+             return call_user_func_array(array($this->smarty,$func_name),$args);
+           break;
+       }
+       return false;
+    }
+}
+
+?>
index 2c99fbc36437962e59251055c866add4116bc43c..9fb85a9fcdf7c1e1a8eb2bdecad8e3aa8a783b9e 100644 (file)
@@ -44,6 +44,15 @@ class Smarty_Security {
     public $trusted_dir = array();
 
 
+    /**
+    * This is an array of trusted static classes.
+    *
+    * If empty access to all static classes is allowed.
+    * If set to 'none' none is allowed.
+    * @var array 
+    */
+    public $static_classes = array();
+
     /**
     * This is an array of trusted PHP functions.
     *
@@ -85,4 +94,4 @@ class Smarty_Security {
     public $allow_php_tag = false;
 } 
 
-?>
+?>
\ No newline at end of file