<?php

class TP_yyStackEntry
{
    public $stateno;       /* The state-number */
    public $major;         /* The major token value.  This is the code
                     ** number for the token at this stack level */
    public $minor; /* The user-supplied minor token value.  This
                     ** is the value of the token  */
};


// line 11 "../smarty/lexer/smarty_internal_templateparser.y"

/**
* Smarty Template Parser Class
*
* This is the template parser.
* It is generated from the smarty_internal_templateparser.y file
* 
* @author Uwe Tews <uwe.tews@googlemail.com>
*/
class Smarty_Internal_Templateparser
{
// line 23 "../smarty/lexer/smarty_internal_templateparser.y"

    const ERR1 = 'Security error: Call to private object member not allowed';
    const ERR2 = 'Security error: Call to dynamic object member not allowed';

    /**
     * result status
     *
     * @var bool
     */
    public $successful = true;

    /**
     * return value
     *
     * @var mixed
     */
    public $retvalue = 0;

    /**
     * @var
     */
    public $yymajor;

    /**
     * last index of array variable
     *
     * @var mixed
     */
    public $last_index;

    /**
     * last variable name
     *
     * @var string
     */
    public $last_variable;

    /**
     * root parse tree buffer
     *
     * @var Smarty_Internal_ParseTree_Template
     */
    public $root_buffer;

    /**
     * current parse tree object
     *
     * @var Smarty_Internal_ParseTree
     */
    public $current_buffer;

    /**
     * lexer object
     *
     * @var Smarty_Internal_Templatelexer
     */
    public $lex;

    /**
     * internal error flag
     *
     * @var bool
     */
    private $internalError = false;

    /**
     * {strip} status
     *
     * @var bool
     */
    public $strip = false;
    /**
     * compiler object
     *
     * @var Smarty_Internal_TemplateCompilerBase
     */
    public $compiler = null;

    /**
     * smarty object
     *
     * @var Smarty
     */
    public $smarty = null;

    /**
     * template object
     *
     * @var Smarty_Internal_Template
     */
    public $template = null;

    /**
     * block nesting level
     *
     * @var int
     */
    public $block_nesting_level = 0;

    /**
     * security object
     *
     * @var Smarty_Security
     */
    public $security = null;

    /**
     * template prefix array
     *
     * @var \Smarty_Internal_ParseTree[]
     */
    public $template_prefix = array();

    /**
     * template prefix array
     *
     * @var \Smarty_Internal_ParseTree[]
     */
    public $template_postfix = array();

    /**
     * constructor
     *
     * @param Smarty_Internal_Templatelexer        $lex
     * @param Smarty_Internal_TemplateCompilerBase $compiler
     */
    public function __construct(Smarty_Internal_Templatelexer $lex, Smarty_Internal_TemplateCompilerBase $compiler)
    {
        $this->lex = $lex;
        $this->compiler = $compiler;
        $this->template = $this->compiler->template;
        $this->smarty = $this->template->smarty;
        $this->security = isset($this->smarty->security_policy) ? $this->smarty->security_policy : false;
        $this->current_buffer = $this->root_buffer = new Smarty_Internal_ParseTree_Template();
    }

     /**
     * insert PHP code in current buffer
     *
     * @param string $code
     */
    public function insertPhpCode($code)
    {
        $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Tag($this, $code));
    }

    /**
     * error rundown
     *
     */
    public function errorRunDown()
    {
        while ($this->yystack !== array()) {
            $this->yy_pop_parser_stack();
        }
        if (is_resource($this->yyTraceFILE)) {
            fclose($this->yyTraceFILE);
        }
    }

    /**
     *  merge PHP code with prefix code and return parse tree tag object
     *
     * @param string $code
     *
     * @return Smarty_Internal_ParseTree_Tag
     */
    public function mergePrefixCode($code)
    {
        $tmp = '';
        foreach ($this->compiler->prefix_code as $preCode) {
            $tmp .= $preCode;
        }
        $this->compiler->prefix_code = array();
        $tmp .= $code;
        return new Smarty_Internal_ParseTree_Tag($this, $this->compiler->processNocacheCode($tmp, true));
    }


    const TP_VERT                           =  1;
    const TP_COLON                          =  2;
    const TP_TEXT                           =  3;
    const TP_STRIPON                        =  4;
    const TP_STRIPOFF                       =  5;
    const TP_LITERALSTART                   =  6;
    const TP_LITERALEND                     =  7;
    const TP_LITERAL                        =  8;
    const TP_SIMPELOUTPUT                   =  9;
    const TP_SIMPLETAG                      = 10;
    const TP_SMARTYBLOCKCHILDPARENT         = 11;
    const TP_LDEL                           = 12;
    const TP_RDEL                           = 13;
    const TP_DOLLARID                       = 14;
    const TP_EQUAL                          = 15;
    const TP_ID                             = 16;
    const TP_PTR                            = 17;
    const TP_LDELMAKENOCACHE                = 18;
    const TP_LDELIF                         = 19;
    const TP_LDELFOR                        = 20;
    const TP_SEMICOLON                      = 21;
    const TP_INCDEC                         = 22;
    const TP_TO                             = 23;
    const TP_STEP                           = 24;
    const TP_LDELFOREACH                    = 25;
    const TP_SPACE                          = 26;
    const TP_AS                             = 27;
    const TP_APTR                           = 28;
    const TP_LDELSETFILTER                  = 29;
    const TP_CLOSETAG                       = 30;
    const TP_LDELSLASH                      = 31;
    const TP_ATTR                           = 32;
    const TP_INTEGER                        = 33;
    const TP_COMMA                          = 34;
    const TP_OPENP                          = 35;
    const TP_CLOSEP                         = 36;
    const TP_MATH                           = 37;
    const TP_UNIMATH                        = 38;
    const TP_ISIN                           = 39;
    const TP_QMARK                          = 40;
    const TP_NOT                            = 41;
    const TP_TYPECAST                       = 42;
    const TP_HEX                            = 43;
    const TP_DOT                            = 44;
    const TP_INSTANCEOF                     = 45;
    const TP_SINGLEQUOTESTRING              = 46;
    const TP_DOUBLECOLON                    = 47;
    const TP_NAMESPACE                      = 48;
    const TP_AT                             = 49;
    const TP_HATCH                          = 50;
    const TP_OPENB                          = 51;
    const TP_CLOSEB                         = 52;
    const TP_DOLLAR                         = 53;
    const TP_LOGOP                          = 54;
    const TP_SLOGOP                         = 55;
    const TP_TLOGOP                         = 56;
    const TP_SINGLECOND                     = 57;
    const TP_ARRAYOPEN                      = 58;
    const TP_QUOTE                          = 59;
    const TP_BACKTICK                       = 60;
    const YY_NO_ACTION = 514;
    const YY_ACCEPT_ACTION = 513;
    const YY_ERROR_ACTION = 512;

    const YY_SZ_ACTTAB = 1997;
public static $yy_action = array(
    249,  250,  239,    1,   27,  127,  220,  184,  160,  213,
     11,   54,  278,   10,  173,   34,  108,  387,  282,  279,
    223,  321,  221,    8,  194,  387,   18,  387,   85,   41,
    387,  285,   42,   44,  264,  222,  387,  209,  387,  198,
    387,   52,    5,  307,  288,  288,  164,  283,  224,    4,
     50,  249,  250,  239,    1,  232,  131,  381,  189,  205,
    213,   11,   54,   39,   35,  243,   31,  108,   94,   17,
    381,  223,  321,  221,  439,  226,  381,   33,   49,  426,
     41,  439,   89,   42,   44,  264,  222,    9,  235,  163,
    198,  426,   52,    5,  131,  288,  212,  284,  102,  106,
      4,   50,  249,  250,  239,    1,  232,  129,  426,  189,
    347,  213,   11,   54,  175,  324,  347,  208,  108,   22,
    426,  301,  223,  321,  221,  302,  226,  135,   18,   49,
     52,   41,   26,  288,   42,   44,  264,  222,   16,  235,
    294,  198,  204,   52,    5,  170,  288,   32,   90,  267,
    268,    4,   50,  249,  250,  239,    1,   20,  129,  185,
    179,  255,  213,   11,   54,  455,  288,  192,  455,  108,
    175,  167,  455,  223,  321,  221,  439,  226,  256,   18,
     55,  292,   41,  439,  132,   42,   44,  264,  222,  427,
    235,   12,  198,  165,   52,    5,  232,  288,  288,  347,
    153,  427,    4,   50,  249,  250,  239,    1,  232,  129,
    286,  181,  347,  213,   11,   54,   24,   13,  347,   49,
    108,  232,  320,  426,  223,  321,  221,  195,  201,  173,
     18,   49,  139,   41,  296,  426,   42,   44,  264,  222,
      7,  235,  286,  198,   49,   52,    5,  147,  288,  117,
    150,  317,  263,    4,   50,  249,  250,  239,    1,   95,
    130,  173,  189,  155,  213,   11,   54,   22,  244,  271,
    192,  108,  323,  286,  101,  223,  321,  221,  294,  226,
    204,   18,  348,  257,   41,  166,  283,   42,   44,  264,
    222,   28,  235,  300,  198,  348,   52,    5,  247,  288,
    117,  348,   94,  206,    4,   50,  249,  250,  239,    1,
     95,  129,   22,  189,  277,  213,   11,   54,   91,  274,
    224,  426,  108,  323,  216,  156,  223,  321,  221,  132,
    180,  262,   18,  426,  100,   41,   12,  288,   42,   44,
    264,  222,   15,  235,  216,  198,  254,   52,    5,  233,
    288,  210,  190,  192,  100,    4,   50,  249,  250,  239,
      1,    3,  131,   94,  189,  192,  213,   11,   54,  269,
     10,  204,  290,  108,  325,  216,  224,  223,  321,  221,
     23,  226,  211,   33,  315,  100,   45,  513,   92,   42,
     44,  264,  222,  102,  235,  178,  198,  268,   52,    5,
    275,  288,  161,  192,   37,   25,    4,   50,  249,  250,
    239,    1,  286,  129,  172,  187,  305,  213,   11,   54,
    164,  283,  310,  141,  108,  281,  281,  236,  223,  321,
    221,  169,  226,  230,   18,  122,  171,   41,  225,  175,
     42,   44,  264,  222,  144,  235,  303,  198,  134,   52,
      5,  265,  288,  151,  286,  192,  175,    4,   50,  249,
    250,  239,    1,  286,  128,   94,  189,  143,  213,   11,
     54,  219,  152,  207,  193,  108,  149,  281,   31,  223,
    321,  221,  100,  226,   21,    6,  286,  288,   41,  158,
     16,   42,   44,  264,  222,  102,  235,  238,  198,  286,
     52,    5,  157,  288,  281,  122,  168,  283,    4,   50,
    249,  250,  239,    1,   30,   93,  308,   51,  215,  213,
     11,   54,   53,  251,  140,  248,  108,  245,  304,  116,
    223,  321,  221,  111,  226,  176,   18,  270,  266,   41,
    224,  322,   42,   44,  264,  222,    7,  235,  259,  198,
    147,   52,    5,  257,  288,   43,   40,   38,   83,    4,
     50,  241,  214,  204,  319,  280,   88,  107,  138,  182,
     97,   64,  311,  312,  313,  316,   95,  281,  298,  258,
    142,  234,   94,  105,  272,  197,  231,  482,  237,  323,
     37,  133,  324,  241,  214,  204,  319,  314,   88,  107,
    296,  183,   97,   82,   84,   43,   40,   38,   95,  296,
    296,  258,  296,  296,  296,  159,  272,  197,  231,  296,
    237,  323,  311,  312,  313,  316,  241,  296,  204,  296,
    296,  103,  296,  296,  199,  104,   77,  296,  296,  110,
    296,   95,  296,  296,  258,  278,  296,  296,   34,  272,
    197,  231,  279,  237,  323,   43,   40,   38,  296,  296,
    296,  241,   26,  204,  196,  276,  103,  296,   16,  199,
    104,   77,  311,  312,  313,  316,   95,  192,  296,  258,
    146,  296,  296,  296,  272,  197,  231,  296,  237,  323,
    286,  393,   39,   35,  243,  296,  296,  296,  296,  191,
    276,  296,   26,  318,  252,  253,  126,  296,   16,  249,
    250,  239,    1,  296,  296,  131,  296,  261,  213,   11,
     54,  296,  296,  296,  426,  108,  393,  393,  393,  223,
    321,  221,  241,  296,  204,  299,  426,  103,  107,  296,
    183,   97,   82,  393,  393,  393,  393,   95,  296,  260,
    258,   52,  296,  296,  288,  272,  197,  231,  296,  237,
    323,  293,  296,  296,  296,  296,  296,  249,  250,  239,
      2,  296,  295,  296,  296,  296,  213,   11,   54,  296,
    296,  177,  296,  108,  136,  296,  296,  223,  321,  221,
    296,  296,  296,  293,   43,   40,   38,  296,  296,  249,
    250,  239,    2,  296,  295,   43,   40,   38,  213,   11,
     54,  311,  312,  313,  316,  108,  296,  291,   14,  223,
    321,  221,  311,  312,  313,  316,  296,  296,  241,  296,
    204,  296,  192,  103,  296,  296,  199,  104,   77,  296,
    296,  296,  296,   95,  383,  296,  258,  296,  296,  297,
     14,  272,  197,  231,  296,  237,  323,  383,  296,  296,
    241,  296,  204,  383,  296,   99,  296,  287,  199,  120,
     48,  241,  112,  204,  296,   95,  103,  296,  258,  199,
    120,   74,  296,  272,  197,  231,   95,  237,  323,  258,
    455,  296,  296,  455,  272,  197,  231,  455,  237,  323,
    241,  296,  204,  296,  296,  103,  200,  296,  199,  120,
     74,  296,  296,  296,  296,   95,  296,  296,  258,  278,
    296,  296,   34,  272,  197,  231,  279,  237,  323,  241,
    455,  204,  296,  296,   99,  202,  296,  199,  120,   56,
    241,  211,  204,  296,   95,  103,  296,  258,  199,  120,
     74,  296,  272,  197,  231,   95,  237,  323,  258,  227,
    296,  296,  296,  272,  197,  231,  296,  237,  323,  241,
    296,  204,  148,  296,  103,  203,   86,  199,  120,   73,
    296,  296,  286,  296,   95,  296,  296,  258,  278,  296,
    296,   34,  272,  197,  231,  279,  237,  323,  241,  296,
    204,  175,  296,  103,  296,  296,  199,  120,   75,  241,
    296,  204,  296,   95,  103,  296,  258,  199,  120,   63,
    296,  272,  197,  231,   95,  237,  323,  258,  229,  192,
    296,  296,  272,  197,  231,  296,  237,  323,  241,  296,
    204,  380,  296,  103,  296,  296,  199,  120,   58,  296,
    296,  296,  296,   95,  380,  296,  258,  296,  296,  296,
    380,  272,  197,  231,  296,  237,  323,  241,  296,  204,
    296,  296,  103,  296,  296,  199,  120,   71,  241,  296,
    204,  296,   95,  103,  296,  258,  199,  120,   79,  296,
    272,  197,  231,   95,  237,  323,  258,  296,  296,  296,
    154,  272,  197,  231,   87,  237,  323,  241,  296,  204,
    286,  296,  103,  296,  296,  199,  120,   70,  296,  296,
    296,  296,   95,  296,  296,  258,  296,  296,  296,  175,
    272,  197,  231,  296,  237,  323,  241,  296,  204,  296,
    296,  103,  296,  296,  199,  120,   56,  241,  296,  204,
    296,   95,  103,  296,  258,  199,  120,   46,  296,  272,
    197,  231,   95,  237,  323,  258,  296,  296,  296,  296,
    272,  197,  231,  296,  237,  323,  241,  296,  204,  296,
    296,  103,  296,  296,  199,  120,   78,  296,  296,  296,
    296,   95,  296,  296,  258,  296,  296,  296,  296,  272,
    197,  231,  296,  237,  323,  241,  296,  204,  296,  296,
    103,  296,  296,  199,  120,   66,  241,  296,  204,  296,
     95,  103,  296,  258,  199,  120,   59,  296,  272,  197,
    231,   95,  237,  323,  258,  296,  296,  296,  296,  272,
    197,  231,  296,  237,  323,  241,  296,  204,  296,  296,
    103,  296,  296,  186,  109,   57,  296,  296,  296,  296,
     95,  296,  296,  258,  296,  296,  296,  296,  272,  197,
    231,  296,  237,  323,  241,  296,  204,  296,  296,  103,
    296,  296,  188,  120,   67,  241,  296,  204,  296,   95,
    103,  296,  258,  199,   96,   62,  296,  272,  197,  231,
     95,  237,  323,  258,  296,  296,  296,  296,  272,  197,
    231,  296,  237,  323,  241,  296,  204,  296,  296,  103,
    296,  296,  199,  120,   80,  296,  296,  296,  296,   95,
    296,  296,  258,  296,  296,  296,  296,  272,  197,  231,
    296,  237,  323,  241,  296,  204,  296,  296,  103,  296,
    296,  199,  120,   76,  241,  296,  204,  296,   95,  103,
    296,  258,  199,  120,   81,  296,  272,  197,  231,   95,
    237,  323,  258,  296,  296,  296,  296,  272,  197,  231,
    296,  237,  323,  241,  296,  204,  296,  296,  103,  296,
    296,  199,  120,   65,  296,  296,  296,  296,   95,  296,
    296,  258,  296,  296,  296,  296,  272,  197,  231,  296,
    237,  323,  241,  296,  204,  296,  296,  103,  296,  296,
    199,   96,   68,  241,  296,  204,  296,   95,  103,  296,
    258,  199,  120,   61,  296,  272,  197,  231,   95,  237,
    323,  258,  296,  296,  296,  296,  272,  197,  231,  296,
    237,  323,  241,  296,  204,  296,  296,  103,  296,  296,
    199,   98,   69,  296,  296,  296,  296,   95,  296,  296,
    258,  296,  296,  296,  296,  272,  197,  231,  296,  237,
    323,  241,  296,  204,  296,  296,  103,  296,  296,  199,
    120,   72,  241,  296,  204,  296,   95,  103,  296,  258,
    199,  120,   47,  296,  272,  197,  231,   95,  237,  323,
    258,  296,  296,  296,  296,  272,  197,  231,  296,  237,
    323,  241,  192,  204,  296,  296,  103,  296,  296,  199,
    120,   60,  296,  296,  351,  296,   95,  296,  217,  258,
    296,  296,  296,  296,  272,  197,  231,   26,  237,  323,
    241,  296,  204,   16,  296,  103,  426,  296,  199,  125,
    296,  241,  296,  204,  296,   95,  103,  296,  426,  199,
    118,  296,  242,  272,  197,  231,   95,  237,  323,  296,
    296,  296,  296,  246,  272,  197,  231,  296,  237,  323,
    241,  296,  204,  278,  296,  103,   34,  296,  199,  121,
    279,  296,  296,  296,  296,   95,  296,  296,  296,  296,
     26,  296,  162,  272,  197,  231,   16,  237,  323,  241,
    296,  204,  296,  296,  103,  296,  296,  199,  123,  296,
    241,  296,  204,  296,   95,  103,  296,  296,  199,  114,
    296,  296,  272,  197,  231,   95,  237,  323,  296,  296,
    296,  296,  296,  272,  197,  231,  296,  237,  323,  241,
    296,  204,  296,  145,  103,  296,  296,  199,  124,  296,
    296,  296,  296,  286,   95,   39,   35,  243,  296,  296,
    296,  296,  272,  197,  231,  296,  237,  323,  241,  296,
    204,  296,  296,  103,  296,  296,  199,  115,  296,  241,
    296,  204,  296,   95,  103,  296,  296,  199,  113,  296,
    296,  272,  197,  231,   95,  237,  323,  296,  296,  296,
    296,  296,  272,  197,  231,  228,  237,  323,  241,  296,
    204,  296,  455,  103,  296,  455,  199,  119,    3,  455,
    439,  296,  296,   95,  296,  296,  296,  296,  296,  296,
    296,  272,  197,  231,  228,  237,  323,  296,  296,  296,
    296,  455,  296,  296,  455,  296,  296,  439,  455,  439,
    439,  228,  455,  296,  439,  296,  296,  137,  455,  296,
    296,  455,  296,  296,   32,  455,  439,  286,  296,   39,
     35,  243,   29,  296,   26,  296,  439,  296,  296,  439,
     16,  455,  296,  439,  306,   43,   40,   38,  296,  296,
    296,  296,  296,  439,  296,  296,  439,  296,  455,  296,
    439,   26,  311,  312,  313,  316,  296,   16,  228,  296,
    296,  296,   43,   40,   38,  455,  296,  296,  455,  296,
    296,  296,  455,  439,  296,  296,   19,  296,  296,  311,
    312,  313,  316,  455,  296,  296,  455,  296,  296,  296,
    455,  439,  296,  296,  296,   43,   40,   38,  296,  296,
    439,  296,  296,  439,  174,  455,  296,  439,  296,  240,
    309,  296,  311,  312,  313,  316,  296,  289,  439,  296,
     36,  439,  296,  455,  296,  439,  296,  296,   43,   40,
     38,  296,  296,   43,   40,   38,  296,  296,  296,  296,
    296,   43,   40,   38,  296,  311,  312,  313,  316,  296,
    311,  312,  313,  316,  296,   43,   40,   38,  311,  312,
    313,  316,  273,   43,   40,   38,  296,  296,  296,  296,
    296,  296,  311,  312,  313,  316,  296,  296,  296,  296,
    311,  312,  313,  316,  455,  296,  296,  455,   43,   40,
     38,  455,  439,  218,   43,   40,   38,  296,  296,  296,
    296,  296,  296,  296,  296,  311,  312,  313,  316,  296,
    296,  311,  312,  313,  316,  296,  296,  296,  296,  439,
    296,  296,  439,  296,  455,  296,  439,
    );
    public static $yy_lookahead = array(
      9,   10,   11,   12,   12,   14,   14,   16,   16,   18,
     19,   20,    9,   34,  102,   12,   25,   13,   70,   16,
     29,   30,   31,   35,   33,   21,   35,   23,   95,   38,
     26,   52,   41,   42,   43,   44,   32,   46,   34,   48,
     36,   50,   51,   52,   53,   53,   98,   99,   44,   58,
     59,    9,   10,   11,   12,   22,   14,   13,   16,   15,
     18,   19,   20,   85,   86,   87,   15,   25,   17,   21,
     26,   29,   30,   31,   44,   33,   32,   35,   45,   35,
     38,   51,   34,   41,   42,   43,   44,   35,   46,   77,
     48,   47,   50,   51,   14,   53,   16,   13,   47,   47,
     58,   59,    9,   10,   11,   12,   22,   14,   35,   16,
     26,   18,   19,   20,  102,  103,   32,   44,   25,   34,
     47,   36,   29,   30,   31,   52,   33,   14,   35,   45,
     50,   38,   26,   53,   41,   42,   43,   44,   32,   46,
     66,   48,   68,   50,   51,   77,   53,   15,   35,    7,
      8,   58,   59,    9,   10,   11,   12,   12,   14,   14,
     16,   16,   18,   19,   20,    9,   53,    1,   12,   25,
    102,   82,   16,   29,   30,   31,   44,   33,   33,   35,
    106,  107,   38,   51,   44,   41,   42,   43,   44,   35,
     46,   51,   48,   82,   50,   51,   22,   53,   53,   13,
     73,   47,   58,   59,    9,   10,   11,   12,   22,   14,
     83,   16,   26,   18,   19,   20,   28,   12,   32,   45,
     25,   22,   70,   35,   29,   30,   31,   65,   33,  102,
     35,   45,   73,   38,   60,   47,   41,   42,   43,   44,
     35,   46,   83,   48,   45,   50,   51,   95,   53,   71,
     95,   52,   74,   58,   59,    9,   10,   11,   12,   81,
     14,  102,   16,   73,   18,   19,   20,   34,   90,   36,
      1,   25,   94,   83,   81,   29,   30,   31,   66,   33,
     68,   35,   13,   96,   38,   98,   99,   41,   42,   43,
     44,   15,   46,  100,   48,   26,   50,   51,   14,   53,
     71,   32,   17,   74,   58,   59,    9,   10,   11,   12,
     81,   14,   34,   16,   36,   18,   19,   20,   82,  107,
     44,   35,   25,   94,   71,   95,   29,   30,   31,   44,
     33,   78,   35,   47,   81,   38,   51,   53,   41,   42,
     43,   44,   15,   46,   71,   48,   16,   50,   51,   22,
     53,   78,   79,    1,   81,   58,   59,    9,   10,   11,
     12,   15,   14,   17,   16,    1,   18,   19,   20,   66,
     34,   68,   36,   25,   16,   71,   44,   29,   30,   31,
     28,   33,   78,   35,   52,   81,   38,   62,   63,   41,
     42,   43,   44,   47,   46,    6,   48,    8,   50,   51,
     16,   53,   73,    1,    2,   40,   58,   59,    9,   10,
     11,   12,   83,   14,   77,   16,   52,   18,   19,   20,
     98,   99,   52,   95,   25,   97,   97,   92,   29,   30,
     31,   77,   33,   49,   35,  100,   14,   38,   16,  102,
     41,   42,   43,   44,   73,   46,   14,   48,   14,   50,
     51,   36,   53,   73,   83,    1,  102,   58,   59,    9,
     10,   11,   12,   83,   14,   17,   16,   50,   18,   19,
     20,   17,   71,   64,   65,   25,   73,   97,   15,   29,
     30,   31,   81,   33,   26,   35,   83,   53,   38,   73,
     32,   41,   42,   43,   44,   47,   46,   92,   48,   83,
     50,   51,   95,   53,   97,  100,   98,   99,   58,   59,
      9,   10,   11,   12,   23,   14,   52,   16,   16,   18,
     19,   20,   16,    7,   50,   16,   25,   13,   13,   16,
     29,   30,   31,   16,   33,   16,   35,   33,   33,   38,
     44,   16,   41,   42,   43,   44,   35,   46,   16,   48,
     95,   50,   51,   96,   53,   37,   38,   39,   81,   58,
     59,   66,   67,   68,   69,   83,   71,   72,   95,   74,
     75,   76,   54,   55,   56,   57,   81,   97,   60,   84,
     95,   13,   17,   80,   89,   90,   91,    1,   93,   94,
      2,   81,  103,   66,   67,   68,   69,   99,   71,   72,
    108,   74,   75,   76,   81,   37,   38,   39,   81,  108,
    108,   84,  108,  108,  108,   95,   89,   90,   91,  108,
     93,   94,   54,   55,   56,   57,   66,  108,   68,  108,
    108,   71,  108,  108,   74,   75,   76,  108,  108,   21,
    108,   81,  108,  108,   84,    9,  108,  108,   12,   89,
     90,   91,   16,   93,   94,   37,   38,   39,  108,  108,
    108,   66,   26,   68,  104,  105,   71,  108,   32,   74,
     75,   76,   54,   55,   56,   57,   81,    1,  108,   84,
     73,  108,  108,  108,   89,   90,   91,  108,   93,   94,
     83,    2,   85,   86,   87,  108,  108,  108,  108,  104,
    105,  108,   26,    3,    4,    5,    6,  108,   32,    9,
     10,   11,   12,  108,  108,   14,  108,   16,   18,   19,
     20,  108,  108,  108,   35,   25,   37,   38,   39,   29,
     30,   31,   66,  108,   68,   69,   47,   71,   72,  108,
     74,   75,   76,   54,   55,   56,   57,   81,  108,   48,
     84,   50,  108,  108,   53,   89,   90,   91,  108,   93,
     94,    3,  108,  108,  108,  108,  108,    9,   10,   11,
     12,  108,   14,  108,  108,  108,   18,   19,   20,  108,
    108,   13,  108,   25,   27,  108,  108,   29,   30,   31,
    108,  108,  108,    3,   37,   38,   39,  108,  108,    9,
     10,   11,   12,  108,   14,   37,   38,   39,   18,   19,
     20,   54,   55,   56,   57,   25,  108,   59,   60,   29,
     30,   31,   54,   55,   56,   57,  108,  108,   66,  108,
     68,  108,    1,   71,  108,  108,   74,   75,   76,  108,
    108,  108,  108,   81,   13,  108,   84,  108,  108,   59,
     60,   89,   90,   91,  108,   93,   94,   26,  108,  108,
     66,  108,   68,   32,  108,   71,  108,  105,   74,   75,
     76,   66,   78,   68,  108,   81,   71,  108,   84,   74,
     75,   76,  108,   89,   90,   91,   81,   93,   94,   84,
      9,  108,  108,   12,   89,   90,   91,   16,   93,   94,
     66,  108,   68,  108,  108,   71,  101,  108,   74,   75,
     76,  108,  108,  108,  108,   81,  108,  108,   84,    9,
    108,  108,   12,   89,   90,   91,   16,   93,   94,   66,
     49,   68,  108,  108,   71,  101,  108,   74,   75,   76,
     66,   78,   68,  108,   81,   71,  108,   84,   74,   75,
     76,  108,   89,   90,   91,   81,   93,   94,   84,   49,
    108,  108,  108,   89,   90,   91,  108,   93,   94,   66,
    108,   68,   73,  108,   71,  101,   77,   74,   75,   76,
    108,  108,   83,  108,   81,  108,  108,   84,    9,  108,
    108,   12,   89,   90,   91,   16,   93,   94,   66,  108,
     68,  102,  108,   71,  108,  108,   74,   75,   76,   66,
    108,   68,  108,   81,   71,  108,   84,   74,   75,   76,
    108,   89,   90,   91,   81,   93,   94,   84,   49,    1,
    108,  108,   89,   90,   91,  108,   93,   94,   66,  108,
     68,   13,  108,   71,  108,  108,   74,   75,   76,  108,
    108,  108,  108,   81,   26,  108,   84,  108,  108,  108,
     32,   89,   90,   91,  108,   93,   94,   66,  108,   68,
    108,  108,   71,  108,  108,   74,   75,   76,   66,  108,
     68,  108,   81,   71,  108,   84,   74,   75,   76,  108,
     89,   90,   91,   81,   93,   94,   84,  108,  108,  108,
     73,   89,   90,   91,   77,   93,   94,   66,  108,   68,
     83,  108,   71,  108,  108,   74,   75,   76,  108,  108,
    108,  108,   81,  108,  108,   84,  108,  108,  108,  102,
     89,   90,   91,  108,   93,   94,   66,  108,   68,  108,
    108,   71,  108,  108,   74,   75,   76,   66,  108,   68,
    108,   81,   71,  108,   84,   74,   75,   76,  108,   89,
     90,   91,   81,   93,   94,   84,  108,  108,  108,  108,
     89,   90,   91,  108,   93,   94,   66,  108,   68,  108,
    108,   71,  108,  108,   74,   75,   76,  108,  108,  108,
    108,   81,  108,  108,   84,  108,  108,  108,  108,   89,
     90,   91,  108,   93,   94,   66,  108,   68,  108,  108,
     71,  108,  108,   74,   75,   76,   66,  108,   68,  108,
     81,   71,  108,   84,   74,   75,   76,  108,   89,   90,
     91,   81,   93,   94,   84,  108,  108,  108,  108,   89,
     90,   91,  108,   93,   94,   66,  108,   68,  108,  108,
     71,  108,  108,   74,   75,   76,  108,  108,  108,  108,
     81,  108,  108,   84,  108,  108,  108,  108,   89,   90,
     91,  108,   93,   94,   66,  108,   68,  108,  108,   71,
    108,  108,   74,   75,   76,   66,  108,   68,  108,   81,
     71,  108,   84,   74,   75,   76,  108,   89,   90,   91,
     81,   93,   94,   84,  108,  108,  108,  108,   89,   90,
     91,  108,   93,   94,   66,  108,   68,  108,  108,   71,
    108,  108,   74,   75,   76,  108,  108,  108,  108,   81,
    108,  108,   84,  108,  108,  108,  108,   89,   90,   91,
    108,   93,   94,   66,  108,   68,  108,  108,   71,  108,
    108,   74,   75,   76,   66,  108,   68,  108,   81,   71,
    108,   84,   74,   75,   76,  108,   89,   90,   91,   81,
     93,   94,   84,  108,  108,  108,  108,   89,   90,   91,
    108,   93,   94,   66,  108,   68,  108,  108,   71,  108,
    108,   74,   75,   76,  108,  108,  108,  108,   81,  108,
    108,   84,  108,  108,  108,  108,   89,   90,   91,  108,
     93,   94,   66,  108,   68,  108,  108,   71,  108,  108,
     74,   75,   76,   66,  108,   68,  108,   81,   71,  108,
     84,   74,   75,   76,  108,   89,   90,   91,   81,   93,
     94,   84,  108,  108,  108,  108,   89,   90,   91,  108,
     93,   94,   66,  108,   68,  108,  108,   71,  108,  108,
     74,   75,   76,  108,  108,  108,  108,   81,  108,  108,
     84,  108,  108,  108,  108,   89,   90,   91,  108,   93,
     94,   66,  108,   68,  108,  108,   71,  108,  108,   74,
     75,   76,   66,  108,   68,  108,   81,   71,  108,   84,
     74,   75,   76,  108,   89,   90,   91,   81,   93,   94,
     84,  108,  108,  108,  108,   89,   90,   91,  108,   93,
     94,   66,    1,   68,  108,  108,   71,  108,  108,   74,
     75,   76,  108,  108,   13,  108,   81,  108,   17,   84,
    108,  108,  108,  108,   89,   90,   91,   26,   93,   94,
     66,  108,   68,   32,  108,   71,   35,  108,   74,   75,
    108,   66,  108,   68,  108,   81,   71,  108,   47,   74,
     75,  108,   88,   89,   90,   91,   81,   93,   94,  108,
    108,  108,  108,   88,   89,   90,   91,  108,   93,   94,
     66,  108,   68,    9,  108,   71,   12,  108,   74,   75,
     16,  108,  108,  108,  108,   81,  108,  108,  108,  108,
     26,  108,   28,   89,   90,   91,   32,   93,   94,   66,
    108,   68,  108,  108,   71,  108,  108,   74,   75,  108,
     66,  108,   68,  108,   81,   71,  108,  108,   74,   75,
    108,  108,   89,   90,   91,   81,   93,   94,  108,  108,
    108,  108,  108,   89,   90,   91,  108,   93,   94,   66,
    108,   68,  108,   73,   71,  108,  108,   74,   75,  108,
    108,  108,  108,   83,   81,   85,   86,   87,  108,  108,
    108,  108,   89,   90,   91,  108,   93,   94,   66,  108,
     68,  108,  108,   71,  108,  108,   74,   75,  108,   66,
    108,   68,  108,   81,   71,  108,  108,   74,   75,  108,
    108,   89,   90,   91,   81,   93,   94,  108,  108,  108,
    108,  108,   89,   90,   91,    2,   93,   94,   66,  108,
     68,  108,    9,   71,  108,   12,   74,   75,   15,   16,
     17,  108,  108,   81,  108,  108,  108,  108,  108,  108,
    108,   89,   90,   91,    2,   93,   94,  108,  108,  108,
    108,    9,  108,  108,   12,  108,  108,   44,   16,   17,
     47,    2,   49,  108,   51,  108,  108,   73,    9,  108,
    108,   12,  108,  108,   15,   16,   17,   83,  108,   85,
     86,   87,   24,  108,   26,  108,   44,  108,  108,   47,
     32,   49,  108,   51,   52,   37,   38,   39,  108,  108,
    108,  108,  108,   44,  108,  108,   47,  108,   49,  108,
     51,   26,   54,   55,   56,   57,  108,   32,    2,  108,
    108,  108,   37,   38,   39,    9,  108,  108,   12,  108,
    108,  108,   16,   17,  108,  108,    2,  108,  108,   54,
     55,   56,   57,    9,  108,  108,   12,  108,  108,  108,
     16,   17,  108,  108,  108,   37,   38,   39,  108,  108,
     44,  108,  108,   47,   13,   49,  108,   51,  108,   13,
     52,  108,   54,   55,   56,   57,  108,   13,   44,  108,
      2,   47,  108,   49,  108,   51,  108,  108,   37,   38,
     39,  108,  108,   37,   38,   39,  108,  108,  108,  108,
    108,   37,   38,   39,  108,   54,   55,   56,   57,  108,
     54,   55,   56,   57,  108,   37,   38,   39,   54,   55,
     56,   57,   36,   37,   38,   39,  108,  108,  108,  108,
    108,  108,   54,   55,   56,   57,  108,  108,  108,  108,
     54,   55,   56,   57,    9,  108,  108,   12,   37,   38,
     39,   16,   17,   36,   37,   38,   39,  108,  108,  108,
    108,  108,  108,  108,  108,   54,   55,   56,   57,  108,
    108,   54,   55,   56,   57,  108,  108,  108,  108,   44,
    108,  108,   47,  108,   49,  108,   51,
);
    const YY_SHIFT_USE_DFLT = -22;
    const YY_SHIFT_MAX = 230;
    public static $yy_shift_ofst = array(
    -22,  501,  501,   93,  399,  399,  450,   93,   93,   93,
    399,  450,   -9,   93,   93,   93,   93,   93,   93,  144,
     93,  195,   93,   93,   93,  246,  195,   93,   93,   93,
     93,   93,  297,   93,   93,   93,   93,  348,   42,   42,
     42,   42,   42,   42,   42,   42, 1768, 1795, 1795,  701,
    758, 1521,   80,  676,  113,  790, 1927, 1828, 1896,  568,
    768, 1861,  757, 1866, 1874, 1888,  618,  518, 1921, 1921,
   1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921, 1921,
   1921, 1921, 1921, 1584,  636,  285,  676,  676,  346,  113,
    113,  402,  700, 1723,   -8,  910,  831,  269, 1028,   51,
      3,    3,  422,  448,  352,  106,  422,  106,  458,  364,
    434,  454,  106,  166,  166,  166,  166,  565,  166,  166,
    166,  586,  565,  166,  166,  -22,  -22, 1752, 1769, 1826,
   1844, 1945,  145,  979,  156,  132,  284,  106,  140,  106,
     30,  140,  140,   30,  106,  106,  106,  140,  106,  106,
    140,  106,  327,  106,  106,  106,  140,  140,  106,  140,
    205,  106,  284,  166,  565,  588,  565,  588,  565,  166,
    166,  -12,  166,  -22,  -22,  -22,  -22,  -22,  -22,  689,
      4,   44,   84,  186,   73,  881,  199,  188,  174,  286,
     48,  336,  384,  389,  332,  142,  -21,   52,  154,   33,
     85,  276,  278,  233,  515,  509,  474,  516,  502,  464,
    491,  415,  417,  432,  514,  370,  463,  506,  365,  513,
    -12,  517,  504,  519,  505,  511,  496,  525,  532,  330,
    358,
);
    const YY_REDUCE_USE_DFLT = -89;
    const YY_REDUCE_MAX = 178;
    public static $yy_reduce_ofst = array(
    325,  527,  495,  666,  595,  560,  863,  874,  834,  805,
    762,  794, 1179, 1455, 1208, 1012, 1386, 1139, 1070, 1110,
   1150, 1219, 1248, 1277, 1288, 1317, 1346, 1357, 1415, 1426,
   1081, 1041, 1001,  972,  943,  932,  903, 1484, 1495, 1622,
   1633, 1662, 1593, 1564, 1553, 1524, 1704,  607, 1590,  178,
     74, 1027,  229,  899,  273,  212,  -22,  -22,  -22,  -22,
    -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
    -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,  -22,
    -22,  -22,  -22,  380,  329,  187,  159,  127,  -52,  253,
    304,   12,  303,  152,  193,  328,   68,   68,   68,  322,
    328,  407,  405,  322,   68,  190,  335,  416,  403,   68,
    401,  354,  371,   68,   68,   68,  337,  322,   68,   68,
     68,   68,  408,   68,   68,   68,  409,  455,  455,  455,
    455,  455,  510,  480,  455,  455,  477,  482,  457,  482,
    473,  457,  457,  485,  482,  482,  482,  457,  482,  482,
    457,  482,  503,  482,  482,  482,  457,  457,  482,  457,
    520,  482,  523,  -88,  498,  489,  498,  489,  498,  -88,
    -88,  -67,  -88,  111,  155,   89,  236,  230,  162,
);
    public static $yyExpectedTokens = array(
         array(),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(9, 10, 11, 12, 14, 16, 18, 19, 20, 25, 29, 30, 31, 33, 35, 38, 41, 42, 43, 44, 46, 48, 50, 51, 53, 58, 59, ),
         array(24, 26, 32, 37, 38, 39, 54, 55, 56, 57, ),
         array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
         array(26, 32, 37, 38, 39, 54, 55, 56, 57, ),
         array(14, 16, 48, 50, 53, ),
         array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
         array(1, 13, 17, 26, 32, 35, 47, ),
         array(14, 16, 50, 53, ),
         array(1, 26, 32, ),
         array(14, 35, 53, ),
         array(3, 9, 10, 11, 12, 14, 18, 19, 20, 25, 29, 30, 31, 59, 60, ),
         array(36, 37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 52, 54, 55, 56, 57, ),
         array(36, 37, 38, 39, 54, 55, 56, 57, ),
         array(13, 37, 38, 39, 54, 55, 56, 57, ),
         array(13, 37, 38, 39, 54, 55, 56, 57, ),
         array(13, 37, 38, 39, 54, 55, 56, 57, ),
         array(27, 37, 38, 39, 54, 55, 56, 57, ),
         array(13, 37, 38, 39, 54, 55, 56, 57, ),
         array(13, 37, 38, 39, 54, 55, 56, 57, ),
         array(2, 37, 38, 39, 54, 55, 56, 57, ),
         array(21, 37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, 60, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(37, 38, 39, 54, 55, 56, 57, ),
         array(9, 12, 16, 26, 28, 32, ),
         array(9, 12, 16, 26, 32, ),
         array(17, 44, 51, ),
         array(1, 26, 32, ),
         array(1, 26, 32, ),
         array(15, 17, 47, ),
         array(14, 35, 53, ),
         array(14, 35, 53, ),
         array(1, 2, ),
         array(3, 4, 5, 6, 9, 10, 11, 12, 18, 19, 20, 25, 29, 30, 31, ),
         array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
         array(12, 14, 16, 53, ),
         array(9, 12, 16, 49, ),
         array(1, 13, 26, 32, ),
         array(1, 13, 26, 32, ),
         array(1, 13, 26, 32, ),
         array(15, 17, 47, ),
         array(9, 12, 16, ),
         array(9, 12, 16, ),
         array(14, 16, ),
         array(17, 47, ),
         array(1, 28, ),
         array(26, 32, ),
         array(14, 16, ),
         array(26, 32, ),
         array(26, 32, ),
         array(1, 52, ),
         array(14, 53, ),
         array(1, 17, ),
         array(26, 32, ),
         array(1, ),
         array(1, ),
         array(1, ),
         array(1, ),
         array(17, ),
         array(1, ),
         array(1, ),
         array(1, ),
         array(1, ),
         array(17, ),
         array(1, ),
         array(1, ),
         array(),
         array(),
         array(2, 9, 12, 16, 17, 44, 47, 49, 51, 52, ),
         array(2, 9, 12, 15, 16, 17, 44, 47, 49, 51, ),
         array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
         array(2, 9, 12, 16, 17, 44, 47, 49, 51, ),
         array(9, 12, 16, 17, 44, 47, 49, 51, ),
         array(12, 14, 16, 33, 53, ),
         array(9, 12, 16, 49, ),
         array(9, 12, 16, ),
         array(15, 44, 51, ),
         array(14, 53, ),
         array(26, 32, ),
         array(44, 51, ),
         array(26, 32, ),
         array(44, 51, ),
         array(44, 51, ),
         array(44, 51, ),
         array(44, 51, ),
         array(26, 32, ),
         array(26, 32, ),
         array(26, 32, ),
         array(44, 51, ),
         array(26, 32, ),
         array(26, 32, ),
         array(44, 51, ),
         array(26, 32, ),
         array(15, 22, ),
         array(26, 32, ),
         array(26, 32, ),
         array(26, 32, ),
         array(44, 51, ),
         array(44, 51, ),
         array(26, 32, ),
         array(44, 51, ),
         array(12, 35, ),
         array(26, 32, ),
         array(14, 53, ),
         array(1, ),
         array(17, ),
         array(2, ),
         array(17, ),
         array(2, ),
         array(17, ),
         array(1, ),
         array(1, ),
         array(35, ),
         array(1, ),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(2, 35, 37, 38, 39, 47, 54, 55, 56, 57, ),
         array(13, 21, 23, 26, 32, 34, 36, 44, ),
         array(13, 15, 26, 32, 35, 47, ),
         array(13, 22, 26, 32, 45, ),
         array(13, 22, 26, 32, 45, ),
         array(35, 44, 47, 52, ),
         array(9, 12, 16, 49, ),
         array(22, 45, 52, ),
         array(28, 35, 47, ),
         array(22, 45, 60, ),
         array(35, 47, ),
         array(21, 34, ),
         array(34, 36, ),
         array(16, 49, ),
         array(6, 8, ),
         array(44, 52, ),
         array(7, 8, ),
         array(34, 52, ),
         array(35, 47, ),
         array(35, 47, ),
         array(22, 45, ),
         array(34, 36, ),
         array(15, 44, ),
         array(34, 36, ),
         array(34, 36, ),
         array(13, ),
         array(16, ),
         array(50, ),
         array(7, ),
         array(16, ),
         array(52, ),
         array(23, ),
         array(36, ),
         array(50, ),
         array(14, ),
         array(13, ),
         array(52, ),
         array(15, ),
         array(16, ),
         array(40, ),
         array(16, ),
         array(35, ),
         array(16, ),
         array(33, ),
         array(16, ),
         array(33, ),
         array(35, ),
         array(44, ),
         array(16, ),
         array(16, ),
         array(16, ),
         array(16, ),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
         array(),
);
    public static $yy_default = array(
    336,  512,  512,  512,  497,  497,  512,  474,  474,  474,
    512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
    512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
    512,  512,  512,  512,  512,  512,  512,  512,  512,  512,
    512,  512,  512,  512,  512,  512,  377,  377,  356,  512,
    512,  413,  512,  377,  512,  512,  512,  512,  512,  512,
    512,  512,  382,  512,  349,  512,  512,  512,  382,  379,
    389,  388,  384,  402,  473,  397,  498,  500,  401,  361,
    472,  499,  349,  377,  377,  487,  377,  377,  429,  512,
    512,  368,  326,  428,  512,  439,  391,  391,  391,  429,
    439,  439,  512,  429,  391,  377,  512,  377,  377,  391,
    512,  371,  358,  395,  394,  396,  373,  429,  400,  404,
    391,  404,  484,  406,  405,  481,  334,  428,  428,  428,
    428,  428,  512,  441,  439,  455,  512,  363,  435,  354,
    434,  437,  433,  432,  359,  357,  364,  436,  353,  367,
    466,  365,  512,  352,  350,  360,  467,  465,  346,  464,
    439,  366,  512,  369,  461,  475,  488,  476,  485,  372,
    422,  439,  374,  480,  439,  480,  480,  439,  334,  413,
    409,  413,  403,  403,  413,  440,  403,  413,  403,  413,
    512,  512,  512,  332,  409,  512,  512,  512,  423,  403,
    512,  409,  512,  512,  512,  512,  512,  512,  512,  418,
    385,  512,  512,  512,  512,  512,  512,  512,  415,  512,
    455,  512,  512,  512,  411,  486,  409,  512,  512,  512,
    512,  419,  407,  362,  445,  418,  425,  424,  420,  339,
    460,  421,  483,  398,  416,  340,  399,  455,  378,  337,
    338,  330,  328,  329,  442,  443,  444,  438,  392,  393,
    427,  426,  386,  417,  408,  390,  410,  331,  333,  335,
    412,  470,  414,  415,  503,  478,  495,  471,  459,  458,
    375,  457,  344,  462,  508,  493,  376,  496,  456,  509,
    494,  501,  504,  511,  510,  507,  505,  502,  506,  345,
    468,  469,  446,  355,  341,  452,  450,  454,  448,  453,
    447,  489,  490,  491,  463,  449,  492,  451,  327,  342,
    343,  370,  430,  431,  479,  477,
);
    const YYNOCODE = 109;
    const YYSTACKDEPTH = 500;
    const YYNSTATE = 326;
    const YYNRULE = 186;
    const YYERRORSYMBOL = 61;
    const YYERRSYMDT = 'yy0';
    const YYFALLBACK = 0;
    public static $yyFallback = array(
    );
    public function Trace($TraceFILE, $zTracePrompt)
    {
        if (!$TraceFILE) {
            $zTracePrompt = 0;
        } elseif (!$zTracePrompt) {
            $TraceFILE = 0;
        }
        $this->yyTraceFILE = $TraceFILE;
        $this->yyTracePrompt = $zTracePrompt;
    }

    public function PrintTrace()
    {
        $this->yyTraceFILE = fopen('php://output', 'w');
        $this->yyTracePrompt = '<br>';
    }

    public $yyTraceFILE;
    public $yyTracePrompt;
    public $yyidx;                    /* Index of top element in stack */
    public $yyerrcnt;                 /* Shifts left before out of the error */
    public $yystack = array();  /* The parser's stack */

    public $yyTokenName = array(
  '$',             'VERT',          'COLON',         'TEXT',        
  'STRIPON',       'STRIPOFF',      'LITERALSTART',  'LITERALEND',  
  'LITERAL',       'SIMPELOUTPUT',  'SIMPLETAG',     'SMARTYBLOCKCHILDPARENT',
  'LDEL',          'RDEL',          'DOLLARID',      'EQUAL',       
  'ID',            'PTR',           'LDELMAKENOCACHE',  'LDELIF',      
  'LDELFOR',       'SEMICOLON',     'INCDEC',        'TO',          
  'STEP',          'LDELFOREACH',   'SPACE',         'AS',          
  'APTR',          'LDELSETFILTER',  'CLOSETAG',      'LDELSLASH',   
  'ATTR',          'INTEGER',       'COMMA',         'OPENP',       
  'CLOSEP',        'MATH',          'UNIMATH',       'ISIN',        
  'QMARK',         'NOT',           'TYPECAST',      'HEX',         
  'DOT',           'INSTANCEOF',    'SINGLEQUOTESTRING',  'DOUBLECOLON', 
  'NAMESPACE',     'AT',            'HATCH',         'OPENB',       
  'CLOSEB',        'DOLLAR',        'LOGOP',         'SLOGOP',      
  'TLOGOP',        'SINGLECOND',    'ARRAYOPEN',     'QUOTE',       
  'BACKTICK',      'error',         'start',         'template',    
  'literal_e2',    'literal_e1',    'smartytag',     'tagbody',     
  'tag',           'outattr',       'eqoutattr',     'varindexed',  
  'output',        'attributes',    'variable',      'value',       
  'expr',          'modifierlist',  'statement',     'statements',  
  'foraction',     'varvar',        'modparameters',  'attribute',   
  'ternary',       'tlop',          'lop',           'scond',       
  'array',         'function',      'ns1',           'doublequoted_with_quotes',
  'static_class_access',  'arraydef',      'object',        'arrayindex',  
  'indexdef',      'varvarele',     'objectchain',   'objectelement',
  'method',        'params',        'modifier',      'modparameter',
  'arrayelements',  'arrayelement',  'doublequoted',  'doublequotedcontent',
    );

    public static $yyRuleName = array(
  'start ::= template',
  'template ::= template TEXT',
  'template ::= template STRIPON',
  'template ::= template STRIPOFF',
  'template ::= template LITERALSTART literal_e2 LITERALEND',
  'literal_e2 ::= literal_e1 LITERALSTART literal_e1 LITERALEND',
  'literal_e2 ::= literal_e1',
  'literal_e1 ::= literal_e1 LITERAL',
  'literal_e1 ::=',
  'template ::= template smartytag',
  'template ::=',
  'smartytag ::= SIMPELOUTPUT',
  'smartytag ::= SIMPLETAG',
  'smartytag ::= SMARTYBLOCKCHILDPARENT',
  'smartytag ::= LDEL tagbody RDEL',
  'smartytag ::= tag RDEL',
  'tagbody ::= outattr',
  'tagbody ::= DOLLARID eqoutattr',
  'tagbody ::= varindexed eqoutattr',
  'eqoutattr ::= EQUAL outattr',
  'outattr ::= output attributes',
  'output ::= variable',
  'output ::= value',
  'output ::= expr',
  'tag ::= LDEL ID attributes',
  'tag ::= LDEL ID',
  'tag ::= LDEL ID modifierlist attributes',
  'tag ::= LDEL ID PTR ID attributes',
  'tag ::= LDEL ID PTR ID modifierlist attributes',
  'tag ::= LDELMAKENOCACHE DOLLARID',
  'tag ::= LDELIF expr',
  'tag ::= LDELIF expr attributes',
  'tag ::= LDELIF statement',
  'tag ::= LDELIF statement attributes',
  'tag ::= LDELFOR statements SEMICOLON expr SEMICOLON varindexed foraction attributes',
  'foraction ::= EQUAL expr',
  'foraction ::= INCDEC',
  'tag ::= LDELFOR statement TO expr attributes',
  'tag ::= LDELFOR statement TO expr STEP expr attributes',
  'tag ::= LDELFOREACH SPACE expr AS varvar attributes',
  'tag ::= LDELFOREACH SPACE expr AS varvar APTR varvar attributes',
  'tag ::= LDELFOREACH attributes',
  'tag ::= LDELSETFILTER ID modparameters',
  'tag ::= LDELSETFILTER ID modparameters modifierlist',
  'smartytag ::= CLOSETAG',
  'tag ::= LDELSLASH ID',
  'tag ::= LDELSLASH ID modifierlist',
  'tag ::= LDELSLASH ID PTR ID',
  'tag ::= LDELSLASH ID PTR ID modifierlist',
  'attributes ::= attributes attribute',
  'attributes ::= attribute',
  'attributes ::=',
  'attribute ::= SPACE ID EQUAL ID',
  'attribute ::= ATTR expr',
  'attribute ::= ATTR value',
  'attribute ::= SPACE ID',
  'attribute ::= SPACE expr',
  'attribute ::= SPACE value',
  'attribute ::= SPACE INTEGER EQUAL expr',
  'statements ::= statement',
  'statements ::= statements COMMA statement',
  'statement ::= DOLLARID EQUAL INTEGER',
  'statement ::= DOLLARID EQUAL expr',
  'statement ::= varindexed EQUAL expr',
  'statement ::= OPENP statement CLOSEP',
  'expr ::= value',
  'expr ::= ternary',
  'expr ::= DOLLARID COLON ID',
  'expr ::= expr MATH value',
  'expr ::= expr UNIMATH value',
  'expr ::= expr tlop value',
  'expr ::= expr lop expr',
  'expr ::= expr scond',
  'expr ::= expr ISIN array',
  'expr ::= expr ISIN value',
  'ternary ::= OPENP expr CLOSEP QMARK DOLLARID COLON expr',
  'ternary ::= OPENP expr CLOSEP QMARK expr COLON expr',
  'value ::= variable',
  'value ::= UNIMATH value',
  'value ::= NOT value',
  'value ::= TYPECAST value',
  'value ::= variable INCDEC',
  'value ::= HEX',
  'value ::= INTEGER',
  'value ::= INTEGER DOT INTEGER',
  'value ::= INTEGER DOT',
  'value ::= DOT INTEGER',
  'value ::= ID',
  'value ::= function',
  'value ::= OPENP expr CLOSEP',
  'value ::= variable INSTANCEOF ns1',
  'value ::= variable INSTANCEOF variable',
  'value ::= SINGLEQUOTESTRING',
  'value ::= doublequoted_with_quotes',
  'value ::= varindexed DOUBLECOLON static_class_access',
  'value ::= smartytag',
  'value ::= value modifierlist',
  'value ::= NAMESPACE',
  'value ::= arraydef',
  'value ::= ns1 DOUBLECOLON static_class_access',
  'ns1 ::= ID',
  'ns1 ::= NAMESPACE',
  'variable ::= DOLLARID',
  'variable ::= varindexed',
  'variable ::= varvar AT ID',
  'variable ::= object',
  'variable ::= HATCH ID HATCH',
  'variable ::= HATCH ID HATCH arrayindex',
  'variable ::= HATCH variable HATCH',
  'variable ::= HATCH variable HATCH arrayindex',
  'varindexed ::= DOLLARID arrayindex',
  'varindexed ::= varvar arrayindex',
  'arrayindex ::= arrayindex indexdef',
  'arrayindex ::=',
  'indexdef ::= DOT DOLLARID',
  'indexdef ::= DOT varvar',
  'indexdef ::= DOT varvar AT ID',
  'indexdef ::= DOT ID',
  'indexdef ::= DOT INTEGER',
  'indexdef ::= DOT LDEL expr RDEL',
  'indexdef ::= OPENB ID CLOSEB',
  'indexdef ::= OPENB ID DOT ID CLOSEB',
  'indexdef ::= OPENB SINGLEQUOTESTRING CLOSEB',
  'indexdef ::= OPENB INTEGER CLOSEB',
  'indexdef ::= OPENB DOLLARID CLOSEB',
  'indexdef ::= OPENB variable CLOSEB',
  'indexdef ::= OPENB value CLOSEB',
  'indexdef ::= OPENB expr CLOSEB',
  'indexdef ::= OPENB CLOSEB',
  'varvar ::= DOLLARID',
  'varvar ::= DOLLAR',
  'varvar ::= varvar varvarele',
  'varvarele ::= ID',
  'varvarele ::= SIMPELOUTPUT',
  'varvarele ::= LDEL expr RDEL',
  'object ::= varindexed objectchain',
  'objectchain ::= objectelement',
  'objectchain ::= objectchain objectelement',
  'objectelement ::= PTR ID arrayindex',
  'objectelement ::= PTR varvar arrayindex',
  'objectelement ::= PTR LDEL expr RDEL arrayindex',
  'objectelement ::= PTR ID LDEL expr RDEL arrayindex',
  'objectelement ::= PTR method',
  'function ::= ns1 OPENP params CLOSEP',
  'method ::= ID OPENP params CLOSEP',
  'method ::= DOLLARID OPENP params CLOSEP',
  'params ::= params COMMA expr',
  'params ::= expr',
  'params ::=',
  'modifierlist ::= modifierlist modifier modparameters',
  'modifierlist ::= modifier modparameters',
  'modifier ::= VERT AT ID',
  'modifier ::= VERT ID',
  'modparameters ::= modparameters modparameter',
  'modparameters ::=',
  'modparameter ::= COLON value',
  'modparameter ::= COLON UNIMATH value',
  'modparameter ::= COLON array',
  'static_class_access ::= method',
  'static_class_access ::= method objectchain',
  'static_class_access ::= ID',
  'static_class_access ::= DOLLARID arrayindex',
  'static_class_access ::= DOLLARID arrayindex objectchain',
  'lop ::= LOGOP',
  'lop ::= SLOGOP',
  'tlop ::= TLOGOP',
  'scond ::= SINGLECOND',
  'arraydef ::= OPENB arrayelements CLOSEB',
  'arraydef ::= ARRAYOPEN arrayelements CLOSEP',
  'arrayelements ::= arrayelement',
  'arrayelements ::= arrayelements COMMA arrayelement',
  'arrayelements ::=',
  'arrayelement ::= value APTR expr',
  'arrayelement ::= ID APTR expr',
  'arrayelement ::= expr',
  'doublequoted_with_quotes ::= QUOTE QUOTE',
  'doublequoted_with_quotes ::= QUOTE doublequoted QUOTE',
  'doublequoted ::= doublequoted doublequotedcontent',
  'doublequoted ::= doublequotedcontent',
  'doublequotedcontent ::= BACKTICK variable BACKTICK',
  'doublequotedcontent ::= BACKTICK expr BACKTICK',
  'doublequotedcontent ::= DOLLARID',
  'doublequotedcontent ::= LDEL variable RDEL',
  'doublequotedcontent ::= LDEL expr RDEL',
  'doublequotedcontent ::= smartytag',
  'doublequotedcontent ::= TEXT',
    );

    public function tokenName($tokenType)
    {
        if ($tokenType === 0) {
            return 'End of Input';
        }
        if ($tokenType > 0 && $tokenType < count($this->yyTokenName)) {
            return $this->yyTokenName[$tokenType];
        } else {
            return 'Unknown';
        }
    }

    public static function yy_destructor($yymajor, $yypminor)
    {
        switch ($yymajor) {
            default:  break;   /* If no destructor action specified: do nothing */
        }
    }

    public function yy_pop_parser_stack()
    {
        if (empty($this->yystack)) {
            return;
        }
        $yytos = array_pop($this->yystack);
        if ($this->yyTraceFILE && $this->yyidx >= 0) {
            fwrite($this->yyTraceFILE,
                $this->yyTracePrompt . 'Popping ' . $this->yyTokenName[$yytos->major] .
                    "\n");
        }
        $yymajor = $yytos->major;
        self::yy_destructor($yymajor, $yytos->minor);
        $this->yyidx--;

        return $yymajor;
    }

    public function __destruct()
    {
        while ($this->yystack !== Array()) {
            $this->yy_pop_parser_stack();
        }
        if (is_resource($this->yyTraceFILE)) {
            fclose($this->yyTraceFILE);
        }
    }

    public function yy_get_expected_tokens($token)
    {
        static $res3 = array();
        static $res4 = array();
        $state = $this->yystack[$this->yyidx]->stateno;
        $expected = self::$yyExpectedTokens[$state];
        if (isset($res3[$state][$token])) {
            if ($res3[$state][$token]) {
                return $expected;
            }
        } else {
            if ($res3[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
                return $expected;
            }
        }
        $stack = $this->yystack;
        $yyidx = $this->yyidx;
        do {
            $yyact = $this->yy_find_shift_action($token);
            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
                // reduce action
                $done = 0;
                do {
                    if ($done++ === 100) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        // too much recursion prevents proper detection
                        // so give up
                        return array_unique($expected);
                    }
                    $yyruleno = $yyact - self::YYNSTATE;
                    $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
                    $nextstate = $this->yy_find_reduce_action(
                        $this->yystack[$this->yyidx]->stateno,
                        self::$yyRuleInfo[$yyruleno][0]);
                    if (isset(self::$yyExpectedTokens[$nextstate])) {
                $expected = array_merge($expected, self::$yyExpectedTokens[$nextstate]);
                        if (isset($res4[$nextstate][$token])) {
                            if ($res4[$nextstate][$token]) {
                                $this->yyidx = $yyidx;
                                $this->yystack = $stack;
                                return array_unique($expected);
                            }
                        } else {
                            if ($res4[$nextstate][$token] = in_array($token, self::$yyExpectedTokens[$nextstate], true)) {
                                $this->yyidx = $yyidx;
                                $this->yystack = $stack;
                                return array_unique($expected);
                            }
                        }
                    }
                    if ($nextstate < self::YYNSTATE) {
                        // we need to shift a non-terminal
                        $this->yyidx++;
                        $x = new TP_yyStackEntry;
                        $x->stateno = $nextstate;
                        $x->major = self::$yyRuleInfo[$yyruleno][0];
                        $this->yystack[$this->yyidx] = $x;
                        continue 2;
                    } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        // the last token was just ignored, we can't accept
                        // by ignoring input, this is in essence ignoring a
                        // syntax error!
                        return array_unique($expected);
                    } elseif ($nextstate === self::YY_NO_ACTION) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        // input accepted, but not shifted (I guess)
                        return $expected;
                    } else {
                        $yyact = $nextstate;
                    }
                } while (true);
            }
            break;
        } while (true);
    $this->yyidx = $yyidx;
    $this->yystack = $stack;

        return array_unique($expected);
    }

    public function yy_is_expected_token($token)
    {
        static $res = array();
        static $res2 = array();
        if ($token === 0) {
            return true; // 0 is not part of this
        }
        $state = $this->yystack[$this->yyidx]->stateno;
        if (isset($res[$state][$token])) {
            if ($res[$state][$token]) {
                return true;
            }
        } else {
            if ($res[$state][$token] = in_array($token, self::$yyExpectedTokens[$state], true)) {
                return true;
            }
       }
        $stack = $this->yystack;
        $yyidx = $this->yyidx;
        do {
            $yyact = $this->yy_find_shift_action($token);
            if ($yyact >= self::YYNSTATE && $yyact < self::YYNSTATE + self::YYNRULE) {
                // reduce action
                $done = 0;
                do {
                    if ($done++ === 100) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        // too much recursion prevents proper detection
                        // so give up
                        return true;
                    }
                    $yyruleno = $yyact - self::YYNSTATE;
                    $this->yyidx -= self::$yyRuleInfo[$yyruleno][1];
                    $nextstate = $this->yy_find_reduce_action(
                        $this->yystack[$this->yyidx]->stateno,
                        self::$yyRuleInfo[$yyruleno][0]);
                    if (isset($res2[$nextstate][$token])) {
                        if ($res2[$nextstate][$token]) {
                            $this->yyidx = $yyidx;
                            $this->yystack = $stack;
                            return true;
                        }
                    } else {
                        if ($res2[$nextstate][$token] = (isset(self::$yyExpectedTokens[$nextstate]) && in_array($token, self::$yyExpectedTokens[$nextstate], true))) {
                            $this->yyidx = $yyidx;
                            $this->yystack = $stack;
                            return true;
                        }
                    }
                    if ($nextstate < self::YYNSTATE) {
                        // we need to shift a non-terminal
                        $this->yyidx++;
                        $x = new TP_yyStackEntry;
                        $x->stateno = $nextstate;
                        $x->major = self::$yyRuleInfo[$yyruleno][0];
                        $this->yystack[$this->yyidx] = $x;
                        continue 2;
                    } elseif ($nextstate === self::YYNSTATE + self::YYNRULE + 1) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        if (!$token) {
                            // end of input: this is valid
                            return true;
                        }
                        // the last token was just ignored, we can't accept
                        // by ignoring input, this is in essence ignoring a
                        // syntax error!
                        return false;
                    } elseif ($nextstate === self::YY_NO_ACTION) {
                        $this->yyidx = $yyidx;
                        $this->yystack = $stack;
                        // input accepted, but not shifted (I guess)
                        return true;
                    } else {
                        $yyact = $nextstate;
                    }
                } while (true);
            }
            break;
        } while (true);
        $this->yyidx = $yyidx;
        $this->yystack = $stack;

        return true;
    }

   public function yy_find_shift_action($iLookAhead)
    {
        $stateno = $this->yystack[$this->yyidx]->stateno;

        /* if ($this->yyidx < 0) return self::YY_NO_ACTION;  */
        if (!isset(self::$yy_shift_ofst[$stateno])) {
            // no shift actions
            return self::$yy_default[$stateno];
        }
        $i = self::$yy_shift_ofst[$stateno];
        if ($i === self::YY_SHIFT_USE_DFLT) {
            return self::$yy_default[$stateno];
        }
        if ($iLookAhead === self::YYNOCODE) {
            return self::YY_NO_ACTION;
        }
        $i += $iLookAhead;
        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
              self::$yy_lookahead[$i] != $iLookAhead) {
            if (count(self::$yyFallback) && $iLookAhead < count(self::$yyFallback)
                   && ($iFallback = self::$yyFallback[$iLookAhead]) != 0) {
                if ($this->yyTraceFILE) {
                    fwrite($this->yyTraceFILE, $this->yyTracePrompt . 'FALLBACK ' .
                        $this->yyTokenName[$iLookAhead] . ' => ' .
                        $this->yyTokenName[$iFallback] . "\n");
                }

                return $this->yy_find_shift_action($iFallback);
            }

            return self::$yy_default[$stateno];
        } else {
            return self::$yy_action[$i];
        }
    }

    public function yy_find_reduce_action($stateno, $iLookAhead)
    {
        /* $stateno = $this->yystack[$this->yyidx]->stateno; */

        if (!isset(self::$yy_reduce_ofst[$stateno])) {
            return self::$yy_default[$stateno];
        }
        $i = self::$yy_reduce_ofst[$stateno];
        if ($i === self::YY_REDUCE_USE_DFLT) {
            return self::$yy_default[$stateno];
        }
        if ($iLookAhead === self::YYNOCODE) {
            return self::YY_NO_ACTION;
        }
        $i += $iLookAhead;
        if ($i < 0 || $i >= self::YY_SZ_ACTTAB ||
              self::$yy_lookahead[$i] != $iLookAhead) {
            return self::$yy_default[$stateno];
        } else {
            return self::$yy_action[$i];
        }
    }

    public function yy_shift($yyNewState, $yyMajor, $yypMinor)
    {
        $this->yyidx++;
        if ($this->yyidx >= self::YYSTACKDEPTH) {
            $this->yyidx--;
            if ($this->yyTraceFILE) {
                fprintf($this->yyTraceFILE, "%sStack Overflow!\n", $this->yyTracePrompt);
            }
            while ($this->yyidx >= 0) {
                $this->yy_pop_parser_stack();
            }
// line 220 "../smarty/lexer/smarty_internal_templateparser.y"

    $this->internalError = true;
    $this->compiler->trigger_template_error('Stack overflow in template parser');

            return;
        }
        $yytos = new TP_yyStackEntry;
        $yytos->stateno = $yyNewState;
        $yytos->major = $yyMajor;
        $yytos->minor = $yypMinor;
        $this->yystack[] = $yytos;
        if ($this->yyTraceFILE && $this->yyidx > 0) {
            fprintf($this->yyTraceFILE, "%sShift %d\n", $this->yyTracePrompt,
                $yyNewState);
            fprintf($this->yyTraceFILE, "%sStack:", $this->yyTracePrompt);
            for ($i = 1; $i <= $this->yyidx; $i++) {
                fprintf($this->yyTraceFILE, " %s",
                    $this->yyTokenName[$this->yystack[$i]->major]);
            }
            fwrite($this->yyTraceFILE,"\n");
        }
    }

    public static $yyRuleInfo = array(
  array( 0 => 62, 1 => 1 ),
  array( 0 => 63, 1 => 2 ),
  array( 0 => 63, 1 => 2 ),
  array( 0 => 63, 1 => 2 ),
  array( 0 => 63, 1 => 4 ),
  array( 0 => 64, 1 => 4 ),
  array( 0 => 64, 1 => 1 ),
  array( 0 => 65, 1 => 2 ),
  array( 0 => 65, 1 => 0 ),
  array( 0 => 63, 1 => 2 ),
  array( 0 => 63, 1 => 0 ),
  array( 0 => 66, 1 => 1 ),
  array( 0 => 66, 1 => 1 ),
  array( 0 => 66, 1 => 1 ),
  array( 0 => 66, 1 => 3 ),
  array( 0 => 66, 1 => 2 ),
  array( 0 => 67, 1 => 1 ),
  array( 0 => 67, 1 => 2 ),
  array( 0 => 67, 1 => 2 ),
  array( 0 => 70, 1 => 2 ),
  array( 0 => 69, 1 => 2 ),
  array( 0 => 72, 1 => 1 ),
  array( 0 => 72, 1 => 1 ),
  array( 0 => 72, 1 => 1 ),
  array( 0 => 68, 1 => 3 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 4 ),
  array( 0 => 68, 1 => 5 ),
  array( 0 => 68, 1 => 6 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 3 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 3 ),
  array( 0 => 68, 1 => 8 ),
  array( 0 => 80, 1 => 2 ),
  array( 0 => 80, 1 => 1 ),
  array( 0 => 68, 1 => 5 ),
  array( 0 => 68, 1 => 7 ),
  array( 0 => 68, 1 => 6 ),
  array( 0 => 68, 1 => 8 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 3 ),
  array( 0 => 68, 1 => 4 ),
  array( 0 => 66, 1 => 1 ),
  array( 0 => 68, 1 => 2 ),
  array( 0 => 68, 1 => 3 ),
  array( 0 => 68, 1 => 4 ),
  array( 0 => 68, 1 => 5 ),
  array( 0 => 73, 1 => 2 ),
  array( 0 => 73, 1 => 1 ),
  array( 0 => 73, 1 => 0 ),
  array( 0 => 83, 1 => 4 ),
  array( 0 => 83, 1 => 2 ),
  array( 0 => 83, 1 => 2 ),
  array( 0 => 83, 1 => 2 ),
  array( 0 => 83, 1 => 2 ),
  array( 0 => 83, 1 => 2 ),
  array( 0 => 83, 1 => 4 ),
  array( 0 => 79, 1 => 1 ),
  array( 0 => 79, 1 => 3 ),
  array( 0 => 78, 1 => 3 ),
  array( 0 => 78, 1 => 3 ),
  array( 0 => 78, 1 => 3 ),
  array( 0 => 78, 1 => 3 ),
  array( 0 => 76, 1 => 1 ),
  array( 0 => 76, 1 => 1 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 2 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 76, 1 => 3 ),
  array( 0 => 84, 1 => 7 ),
  array( 0 => 84, 1 => 7 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 2 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 1 ),
  array( 0 => 75, 1 => 3 ),
  array( 0 => 90, 1 => 1 ),
  array( 0 => 90, 1 => 1 ),
  array( 0 => 74, 1 => 1 ),
  array( 0 => 74, 1 => 1 ),
  array( 0 => 74, 1 => 3 ),
  array( 0 => 74, 1 => 1 ),
  array( 0 => 74, 1 => 3 ),
  array( 0 => 74, 1 => 4 ),
  array( 0 => 74, 1 => 3 ),
  array( 0 => 74, 1 => 4 ),
  array( 0 => 71, 1 => 2 ),
  array( 0 => 71, 1 => 2 ),
  array( 0 => 95, 1 => 2 ),
  array( 0 => 95, 1 => 0 ),
  array( 0 => 96, 1 => 2 ),
  array( 0 => 96, 1 => 2 ),
  array( 0 => 96, 1 => 4 ),
  array( 0 => 96, 1 => 2 ),
  array( 0 => 96, 1 => 2 ),
  array( 0 => 96, 1 => 4 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 5 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 3 ),
  array( 0 => 96, 1 => 2 ),
  array( 0 => 81, 1 => 1 ),
  array( 0 => 81, 1 => 1 ),
  array( 0 => 81, 1 => 2 ),
  array( 0 => 97, 1 => 1 ),
  array( 0 => 97, 1 => 1 ),
  array( 0 => 97, 1 => 3 ),
  array( 0 => 94, 1 => 2 ),
  array( 0 => 98, 1 => 1 ),
  array( 0 => 98, 1 => 2 ),
  array( 0 => 99, 1 => 3 ),
  array( 0 => 99, 1 => 3 ),
  array( 0 => 99, 1 => 5 ),
  array( 0 => 99, 1 => 6 ),
  array( 0 => 99, 1 => 2 ),
  array( 0 => 89, 1 => 4 ),
  array( 0 => 100, 1 => 4 ),
  array( 0 => 100, 1 => 4 ),
  array( 0 => 101, 1 => 3 ),
  array( 0 => 101, 1 => 1 ),
  array( 0 => 101, 1 => 0 ),
  array( 0 => 77, 1 => 3 ),
  array( 0 => 77, 1 => 2 ),
  array( 0 => 102, 1 => 3 ),
  array( 0 => 102, 1 => 2 ),
  array( 0 => 82, 1 => 2 ),
  array( 0 => 82, 1 => 0 ),
  array( 0 => 103, 1 => 2 ),
  array( 0 => 103, 1 => 3 ),
  array( 0 => 103, 1 => 2 ),
  array( 0 => 92, 1 => 1 ),
  array( 0 => 92, 1 => 2 ),
  array( 0 => 92, 1 => 1 ),
  array( 0 => 92, 1 => 2 ),
  array( 0 => 92, 1 => 3 ),
  array( 0 => 86, 1 => 1 ),
  array( 0 => 86, 1 => 1 ),
  array( 0 => 85, 1 => 1 ),
  array( 0 => 87, 1 => 1 ),
  array( 0 => 93, 1 => 3 ),
  array( 0 => 93, 1 => 3 ),
  array( 0 => 104, 1 => 1 ),
  array( 0 => 104, 1 => 3 ),
  array( 0 => 104, 1 => 0 ),
  array( 0 => 105, 1 => 3 ),
  array( 0 => 105, 1 => 3 ),
  array( 0 => 105, 1 => 1 ),
  array( 0 => 91, 1 => 2 ),
  array( 0 => 91, 1 => 3 ),
  array( 0 => 106, 1 => 2 ),
  array( 0 => 106, 1 => 1 ),
  array( 0 => 107, 1 => 3 ),
  array( 0 => 107, 1 => 3 ),
  array( 0 => 107, 1 => 1 ),
  array( 0 => 107, 1 => 3 ),
  array( 0 => 107, 1 => 3 ),
  array( 0 => 107, 1 => 1 ),
  array( 0 => 107, 1 => 1 ),
    );

    public static $yyReduceMap = array(
        0 => 0,
        1 => 1,
        2 => 2,
        3 => 3,
        4 => 4,
        5 => 5,
        6 => 6,
        21 => 6,
        22 => 6,
        23 => 6,
        36 => 6,
        56 => 6,
        57 => 6,
        65 => 6,
        66 => 6,
        77 => 6,
        82 => 6,
        83 => 6,
        88 => 6,
        92 => 6,
        93 => 6,
        97 => 6,
        98 => 6,
        100 => 6,
        105 => 6,
        169 => 6,
        174 => 6,
        7 => 7,
        8 => 8,
        9 => 9,
        11 => 11,
        12 => 12,
        13 => 13,
        14 => 14,
        15 => 15,
        16 => 16,
        17 => 17,
        18 => 18,
        19 => 19,
        20 => 20,
        24 => 24,
        25 => 25,
        26 => 26,
        27 => 27,
        28 => 28,
        29 => 29,
        30 => 30,
        31 => 31,
        33 => 31,
        32 => 32,
        34 => 34,
        35 => 35,
        37 => 37,
        38 => 38,
        39 => 39,
        40 => 40,
        41 => 41,
        42 => 42,
        43 => 43,
        44 => 44,
        45 => 45,
        46 => 46,
        47 => 47,
        48 => 48,
        49 => 49,
        50 => 50,
        59 => 50,
        147 => 50,
        151 => 50,
        155 => 50,
        157 => 50,
        51 => 51,
        148 => 51,
        154 => 51,
        52 => 52,
        53 => 53,
        54 => 53,
        55 => 55,
        132 => 55,
        58 => 58,
        60 => 60,
        61 => 61,
        62 => 61,
        63 => 63,
        64 => 64,
        67 => 67,
        68 => 68,
        69 => 68,
        70 => 70,
        71 => 71,
        72 => 72,
        73 => 73,
        74 => 74,
        75 => 75,
        76 => 76,
        78 => 78,
        80 => 78,
        81 => 78,
        112 => 78,
        79 => 79,
        84 => 84,
        85 => 85,
        86 => 86,
        87 => 87,
        89 => 89,
        90 => 90,
        91 => 90,
        94 => 94,
        95 => 95,
        96 => 96,
        99 => 99,
        101 => 101,
        102 => 102,
        103 => 103,
        104 => 104,
        106 => 106,
        107 => 107,
        108 => 108,
        109 => 109,
        110 => 110,
        111 => 111,
        113 => 113,
        171 => 113,
        114 => 114,
        115 => 115,
        116 => 116,
        117 => 117,
        118 => 118,
        119 => 119,
        127 => 119,
        120 => 120,
        121 => 121,
        122 => 122,
        123 => 122,
        125 => 122,
        126 => 122,
        124 => 124,
        128 => 128,
        129 => 129,
        130 => 130,
        175 => 130,
        131 => 131,
        133 => 133,
        134 => 134,
        135 => 135,
        136 => 136,
        137 => 137,
        138 => 138,
        139 => 139,
        140 => 140,
        141 => 141,
        142 => 142,
        143 => 143,
        144 => 144,
        145 => 145,
        146 => 146,
        149 => 149,
        150 => 150,
        152 => 152,
        153 => 153,
        156 => 156,
        158 => 158,
        159 => 159,
        160 => 160,
        161 => 161,
        162 => 162,
        163 => 163,
        164 => 164,
        165 => 165,
        166 => 166,
        167 => 167,
        168 => 167,
        170 => 170,
        172 => 172,
        173 => 173,
        176 => 176,
        177 => 177,
        178 => 178,
        179 => 179,
        182 => 179,
        180 => 180,
        183 => 180,
        181 => 181,
        184 => 184,
        185 => 185,
    );
// line 233 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r0(){
    $this->root_buffer->prepend_array($this, $this->template_prefix);
    $this->root_buffer->append_array($this, $this->template_postfix);
    $this->_retvalue = $this->root_buffer->to_smarty_php($this);
    }
// line 240 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r1(){
         $text = $this->yystack[ $this->yyidx + 0 ]->minor;

         if ((string)$text == '') {
            $this->current_buffer->append_subtree($this, null);
         }

         $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($text, $this->strip));
    }
// line 250 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r2(){
    $this->strip = true;
    }
// line 254 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r3(){
    $this->strip = false;
    }
// line 259 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r4(){
       $this->current_buffer->append_subtree($this, new Smarty_Internal_ParseTree_Text($this->yystack[$this->yyidx + -1]->minor));
    }
// line 264 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r5(){
    $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor.$this->yystack[$this->yyidx + -1]->minor;
    }
// line 267 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r6(){
    $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
    }
// line 271 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r7(){
        $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;

    }
// line 276 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r8(){
    $this->_retvalue = '';
    }
// line 280 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r9(){
      if ($this->compiler->has_code) {
          $this->current_buffer->append_subtree($this, $this->mergePrefixCode($this->yystack[$this->yyidx + 0]->minor));
      }
     $this->compiler->has_variable_string = false;
     $this->block_nesting_level = count($this->compiler->_tag_stack);
    }
// line 292 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r11(){
    $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
    if (preg_match('/^(.*)(\s+nocache)$/', $var, $match)) {
        $this->_retvalue = $this->compiler->compileTag('private_print_expression',array('nocache'),array('value'=>$this->compiler->compileVariable('\''.$match[1].'\'')));
    } else {
        $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->compiler->compileVariable('\''.$var.'\'')));
    }
    }
// line 302 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r12(){
    $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()));
    if ($tag == 'strip') {
        $this->strip = true;
        $this->_retvalue = null;
    } else {
        if (defined($tag)) {
            if ($this->security) {
               $this->security->isTrustedConstant($tag, $this->compiler);
            }
            $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$tag));
        } else {
            if (preg_match('/^(.*)(\s+nocache)$/', $tag, $match)) {
                $this->_retvalue = $this->compiler->compileTag($match[1],array('\'nocache\''));
            } else {
                $this->_retvalue = $this->compiler->compileTag($tag,array());
            }
        }
    }
    }
// line 323 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r13(){
    $j = strrpos($this->yystack[$this->yyidx + 0]->minor,'.');
    if ($this->yystack[$this->yyidx + 0]->minor[$j+1] == 'c') {
        // {$smarty.block.child}
        $this->_retvalue = $this->compiler->compileTag('child',array(),array($this->yystack[$this->yyidx + 0]->minor));
    } else {
        // {$smarty.block.parent}
       $this->_retvalue = $this->compiler->compileTag('parent',array(),array($this->yystack[$this->yyidx + 0]->minor));
     }
    }
// line 334 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r14(){
    $this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor;
    }
// line 338 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r15(){
     $this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor;
     }
// line 342 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r16(){
    $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor[1],array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]));
    }
// line 351 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r17(){
    $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'')),$this->yystack[$this->yyidx + 0]->minor[1]));
    }
// line 355 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r18(){
    $this->_retvalue = $this->compiler->compileTag('assign',array_merge(array(array('value'=>$this->yystack[$this->yyidx + 0]->minor[0]),array('var'=>$this->yystack[$this->yyidx + -1]->minor['var'])),$this->yystack[$this->yyidx + 0]->minor[1]),array('smarty_internal_index'=>$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']));
    }
// line 359 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r19(){
       $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
    }
// line 363 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r20(){
    $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
    }
// line 378 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r24(){
        if (defined($this->yystack[$this->yyidx + -1]->minor)) {
            if ($this->security) {
                $this->security->isTrustedConstant($this->yystack[$this->yyidx + -1]->minor, $this->compiler);
            }
            $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -1]->minor));
        } else {
            $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
        }
    }
// line 388 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r25(){
        if (defined($this->yystack[$this->yyidx + 0]->minor)) {
            if ($this->security) {
                $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
            }
            $this->_retvalue = $this->compiler->compileTag('private_print_expression',array(),array('value'=>$this->yystack[$this->yyidx + 0]->minor));
        } else {
            $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor,array());
        }
    }
// line 401 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r26(){
        if (defined($this->yystack[$this->yyidx + -2]->minor)) {
            if ($this->security) {
                $this->security->isTrustedConstant($this->yystack[$this->yyidx + -2]->minor, $this->compiler);
            }
            $this->_retvalue = $this->compiler->compileTag('private_print_expression',$this->yystack[$this->yyidx + 0]->minor,array('value'=>$this->yystack[$this->yyidx + -2]->minor, 'modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
        } else {
            $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor,$this->yystack[$this->yyidx + 0]->minor, array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor));
        }
    }
// line 413 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r27(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor,$this->yystack[$this->yyidx + 0]->minor,array('object_method'=>$this->yystack[$this->yyidx + -1]->minor));
    }
// line 418 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r28(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -4]->minor,$this->yystack[$this->yyidx + 0]->minor,array('modifierlist'=>$this->yystack[$this->yyidx + -1]->minor, 'object_method'=>$this->yystack[$this->yyidx + -2]->minor));
    }
// line 423 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r29(){
    $this->_retvalue = $this->compiler->compileTag('make_nocache',array(array('var'=>'\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'')));
    }
// line 428 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r30(){
    $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength())); 
    $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 433 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r31(){
    $tag = trim(substr($this->yystack[$this->yyidx + -2]->minor,$this->compiler->getLdelLength()));
    $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,$this->yystack[$this->yyidx + 0]->minor,array('if condition'=>$this->yystack[$this->yyidx + -1]->minor));
    }
// line 438 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r32(){
    $tag = trim(substr($this->yystack[$this->yyidx + -1]->minor,$this->compiler->getLdelLength()));
    $this->_retvalue = $this->compiler->compileTag(($tag === 'else if')? 'elseif' : $tag,array(),array('if condition'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 449 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r34(){
    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -6]->minor),array('ifexp'=>$this->yystack[$this->yyidx + -4]->minor),array('var'=>$this->yystack[$this->yyidx + -2]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),1);
    }
// line 453 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r35(){
    $this->_retvalue = '='.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 461 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r37(){
    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -3]->minor),array('to'=>$this->yystack[$this->yyidx + -1]->minor))),0);
    }
// line 465 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r38(){
    $this->_retvalue = $this->compiler->compileTag('for',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('start'=>$this->yystack[$this->yyidx + -5]->minor),array('to'=>$this->yystack[$this->yyidx + -3]->minor),array('step'=>$this->yystack[$this->yyidx + -1]->minor))),0);
    }
// line 470 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r39(){
    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -3]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor))));
    }
// line 474 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r40(){
    $this->_retvalue = $this->compiler->compileTag('foreach',array_merge($this->yystack[$this->yyidx + 0]->minor,array(array('from'=>$this->yystack[$this->yyidx + -5]->minor),array('item'=>$this->yystack[$this->yyidx + -1]->minor),array('key'=>$this->yystack[$this->yyidx + -3]->minor))));
    }
// line 477 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r41(){
    $this->_retvalue = $this->compiler->compileTag('foreach',$this->yystack[$this->yyidx + 0]->minor);
    }
// line 482 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r42(){
    $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array(array_merge(array($this->yystack[$this->yyidx + -1]->minor),$this->yystack[$this->yyidx + 0]->minor))));
    }
// line 486 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r43(){
    $this->_retvalue = $this->compiler->compileTag('setfilter',array(),array('modifier_list'=>array_merge(array(array_merge(array($this->yystack[$this->yyidx + -2]->minor),$this->yystack[$this->yyidx + -1]->minor)),$this->yystack[$this->yyidx + 0]->minor)));
    }
// line 492 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r44(){
    $tag = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' /');
    if ($tag === 'strip') {
        $this->strip = false;
        $this->_retvalue = null;
    } else {
       $this->_retvalue = $this->compiler->compileTag($tag.'close',array());
    }
     }
// line 501 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r45(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + 0]->minor.'close',array());
    }
// line 505 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r46(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -1]->minor.'close',array(),array('modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 510 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r47(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -2]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 514 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r48(){
    $this->_retvalue = $this->compiler->compileTag($this->yystack[$this->yyidx + -3]->minor.'close',array(),array('object_method'=>$this->yystack[$this->yyidx + -1]->minor, 'modifier_list'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 522 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r49(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
    $this->_retvalue[] = $this->yystack[$this->yyidx + 0]->minor;
    }
// line 528 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r50(){
    $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor);
    }
// line 533 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r51(){
    $this->_retvalue = array();
    }
// line 538 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r52(){
    if (defined($this->yystack[$this->yyidx + 0]->minor)) {
        if ($this->security) {
            $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
        }
        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
    } else {
        $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>'\''.$this->yystack[$this->yyidx + 0]->minor.'\'');
    }
    }
// line 549 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r53(){
    $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor," =\n\r\t")=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 557 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r55(){
    $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
    }
// line 569 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r58(){
    $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 582 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r60(){
    $this->yystack[$this->yyidx + -2]->minor[]=$this->yystack[$this->yyidx + 0]->minor;
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor;
    }
// line 587 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r61(){
    $this->_retvalue = array('var' => '\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'', 'value'=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 594 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r63(){
    $this->_retvalue = array('var' => $this->yystack[$this->yyidx + -2]->minor, 'value'=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 598 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r64(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
    }
// line 618 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r67(){
    $this->_retvalue = '$_smarty_tpl->getStreamVariable(\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'://' . $this->yystack[$this->yyidx + 0]->minor . '\')';
    }
// line 623 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r68(){
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor . trim($this->yystack[$this->yyidx + -1]->minor) . $this->yystack[$this->yyidx + 0]->minor;
    }
// line 633 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r70(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor['pre']. $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor['op'].$this->yystack[$this->yyidx + 0]->minor .')';
    }
// line 637 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r71(){
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 641 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r72(){
    $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor . $this->yystack[$this->yyidx + -1]->minor . ')';
    }
// line 645 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r73(){
    $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor.')';
    }
// line 649 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r74(){
    $this->_retvalue = 'in_array('.$this->yystack[$this->yyidx + -2]->minor.',(array)'.$this->yystack[$this->yyidx + 0]->minor.')';
    }
// line 657 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r75(){
    $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '. $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -2]->minor,1).'\'') . ' : '.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 661 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r76(){
    $this->_retvalue = $this->yystack[$this->yyidx + -5]->minor.' ? '.$this->yystack[$this->yyidx + -2]->minor.' : '.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 671 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r78(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 676 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r79(){
    $this->_retvalue = '!'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 697 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r84(){
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 701 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r85(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.';
    }
// line 705 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r86(){
    $this->_retvalue = '.'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 710 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r87(){
    if (defined($this->yystack[$this->yyidx + 0]->minor)) {
        if ($this->security) {
             $this->security->isTrustedConstant($this->yystack[$this->yyidx + 0]->minor, $this->compiler);
        }
        $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
    } else {
        $this->_retvalue = '\''.$this->yystack[$this->yyidx + 0]->minor.'\'';
    }
    }
// line 727 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r89(){
    $this->_retvalue = '('. $this->yystack[$this->yyidx + -1]->minor .')';
    }
// line 731 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r90(){
      $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 749 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r94(){
	    if ($this->security && $this->security->static_classes !== array()) {
		    $this->compiler->trigger_template_error('dynamic static class not allowed by security setting');
	    }
    $prefixVar = $this->compiler->getNewPrefixVariable();
    if ($this->yystack[$this->yyidx + -2]->minor['var'] === '\'smarty\'') {
        $this->compiler->appendPrefixCode("<?php {$prefixVar} = ". $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index']).';?>');
     } else {
        $this->compiler->appendPrefixCode("<?php  {$prefixVar} = ". $this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor['var']).$this->yystack[$this->yyidx + -2]->minor['smarty_internal_index'].';?>');
    }
    $this->_retvalue = $prefixVar .'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
    }
// line 760 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r95(){
    $prefixVar = $this->compiler->getNewPrefixVariable();
    $tmp = $this->compiler->appendCode('<?php ob_start();?>', $this->yystack[$this->yyidx + 0]->minor);
    $this->compiler->appendPrefixCode($this->compiler->appendCode($tmp, "<?php {$prefixVar} = ob_get_clean();?>"));
    $this->_retvalue = $prefixVar;
    }
// line 767 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r96(){
    $this->_retvalue = $this->compiler->compileTag('private_modifier',array(),array('value'=>$this->yystack[$this->yyidx + -1]->minor,'modifierlist'=>$this->yystack[$this->yyidx + 0]->minor));
    }
// line 780 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r99(){
    if (!in_array(strtolower($this->yystack[$this->yyidx + -2]->minor), array('self', 'parent')) && (!$this->security || $this->security->isTrustedStaticClassAccess($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + 0]->minor, $this->compiler))) {
        if (isset($this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor])) {
            $this->_retvalue = $this->smarty->registered_classes[$this->yystack[$this->yyidx + -2]->minor].'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
        } else {
            $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'::'.$this->yystack[$this->yyidx + 0]->minor[0].$this->yystack[$this->yyidx + 0]->minor[1];
        } 
    } else {
        $this->compiler->trigger_template_error ('static class \''.$this->yystack[$this->yyidx + -2]->minor.'\' is undefined or not allowed by security setting');
    }
    }
// line 799 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r101(){
    $this->_retvalue = $this->yystack[$this->yyidx + 0]->minor;
        }
// line 810 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r102(){
   $this->_retvalue = $this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'');
    }
// line 813 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r103(){
    if ($this->yystack[$this->yyidx + 0]->minor['var'] === '\'smarty\'') {
        $smarty_var = $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index']);
        $this->_retvalue = $smarty_var;
    } else {
        // used for array reset,next,prev,end,current 
        $this->last_variable = $this->yystack[$this->yyidx + 0]->minor['var'];
        $this->last_index = $this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
        $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor['var']).$this->yystack[$this->yyidx + 0]->minor['smarty_internal_index'];
    }
    }
// line 826 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r104(){
    $this->_retvalue = '$_smarty_tpl->tpl_vars['. $this->yystack[$this->yyidx + -2]->minor .']->'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 836 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r106(){
    $this->_retvalue = $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -1]->minor . '\'');
    }
// line 840 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r107(){
    $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable('\'' . $this->yystack[$this->yyidx + -2]->minor . '\'') . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' :null)';
    }
// line 844 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r108(){
    $this->_retvalue = $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -1]->minor);
    }
// line 848 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r109(){
    $this->_retvalue = '(is_array($tmp = ' . $this->compiler->compileConfigVariable($this->yystack[$this->yyidx + -2]->minor) . ') ? $tmp'.$this->yystack[$this->yyidx + 0]->minor.' : null)';
    }
// line 852 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r110(){
    $this->_retvalue = array('var'=>'\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'', 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 855 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r111(){
    $this->_retvalue = array('var'=>$this->yystack[$this->yyidx + -1]->minor, 'smarty_internal_index'=>$this->yystack[$this->yyidx + 0]->minor);
    }
// line 868 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r113(){
    return;
    }
// line 874 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r114(){
    $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'').']';
    }
// line 877 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r115(){
    $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + 0]->minor).']';
    }
// line 881 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r116(){
    $this->_retvalue = '['.$this->compiler->compileVariable($this->yystack[$this->yyidx + -2]->minor).'->'.$this->yystack[$this->yyidx + 0]->minor.']';
    }
// line 885 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r117(){
    $this->_retvalue = '[\''. $this->yystack[$this->yyidx + 0]->minor .'\']';
    }
// line 889 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r118(){
    $this->_retvalue = '['. $this->yystack[$this->yyidx + 0]->minor .']';
    }
// line 894 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r119(){
    $this->_retvalue = '['. $this->yystack[$this->yyidx + -1]->minor .']';
    }
// line 899 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r120(){
    $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\'][\'index\']').']';
    }
// line 903 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r121(){
    $this->_retvalue = '['.$this->compiler->compileTag('private_special_variable',array(),'[\'section\'][\''.$this->yystack[$this->yyidx + -3]->minor.'\'][\''.$this->yystack[$this->yyidx + -1]->minor.'\']').']';
    }
// line 906 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r122(){
    $this->_retvalue = '['.$this->yystack[$this->yyidx + -1]->minor.']';
    }
// line 912 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r124(){
    $this->_retvalue = '['.$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -1]->minor,1).'\'').']';
    }
// line 928 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r128(){
    $this->_retvalue = '[]';
    }
// line 938 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r129(){
    $this->_retvalue = '\''.substr($this->yystack[$this->yyidx + 0]->minor,1).'\'';
    }
// line 942 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r130(){
    $this->_retvalue = '\'\'';
    }
// line 947 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r131(){
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor.'.'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 955 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r133(){
    $var = trim(substr($this->yystack[$this->yyidx + 0]->minor, $this->compiler->getLdelLength(), -$this->compiler->getRdelLength()), ' $');
    $this->_retvalue = $this->compiler->compileVariable('\''.$var.'\'');
    }
// line 961 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r134(){
    $this->_retvalue = '('.$this->yystack[$this->yyidx + -1]->minor.')';
    }
// line 968 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r135(){
    if ($this->yystack[$this->yyidx + -1]->minor['var'] === '\'smarty\'') {
        $this->_retvalue =  $this->compiler->compileTag('private_special_variable',array(),$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index']).$this->yystack[$this->yyidx + 0]->minor;
    } else {
        $this->_retvalue = $this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor['var']).$this->yystack[$this->yyidx + -1]->minor['smarty_internal_index'].$this->yystack[$this->yyidx + 0]->minor;
    }
    }
// line 977 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r136(){
    $this->_retvalue  = $this->yystack[$this->yyidx + 0]->minor;
    }
// line 982 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r137(){
    $this->_retvalue  = $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 987 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r138(){
    if ($this->security && substr($this->yystack[$this->yyidx + -1]->minor,0,1) === '_') {
        $this->compiler->trigger_template_error (self::ERR1);
    }
    $this->_retvalue = '->'.$this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 994 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r139(){
    if ($this->security) {
        $this->compiler->trigger_template_error (self::ERR2);
    }
    $this->_retvalue = '->{'.$this->compiler->compileVariable($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor.'}';
    }
// line 1001 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r140(){
    if ($this->security) {
        $this->compiler->trigger_template_error (self::ERR2);
    }
    $this->_retvalue = '->{'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
    }
// line 1008 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r141(){
    if ($this->security) {
        $this->compiler->trigger_template_error (self::ERR2);
    }
    $this->_retvalue = '->{\''.$this->yystack[$this->yyidx + -4]->minor.'\'.'.$this->yystack[$this->yyidx + -2]->minor.$this->yystack[$this->yyidx + 0]->minor.'}';
    }
// line 1016 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r142(){
    $this->_retvalue = '->'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 1024 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r143(){
    $this->_retvalue = $this->compiler->compilePHPFunctionCall($this->yystack[$this->yyidx + -3]->minor, $this->yystack[$this->yyidx + -1]->minor);
    }
// line 1032 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r144(){
    if ($this->security && substr($this->yystack[$this->yyidx + -3]->minor,0,1) === '_') {
        $this->compiler->trigger_template_error (self::ERR1);
    }
    $this->_retvalue = $this->yystack[$this->yyidx + -3]->minor . '('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
    }
// line 1039 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r145(){
    if ($this->security) {
        $this->compiler->trigger_template_error (self::ERR2);
    }
    $prefixVar = $this->compiler->getNewPrefixVariable();
    $this->compiler->appendPrefixCode("<?php {$prefixVar} = ".$this->compiler->compileVariable('\''.substr($this->yystack[$this->yyidx + -3]->minor,1).'\'').';?>');
    $this->_retvalue = $prefixVar .'('. implode(',',$this->yystack[$this->yyidx + -1]->minor) .')';
    }
// line 1050 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r146(){
    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array($this->yystack[$this->yyidx + 0]->minor));
    }
// line 1067 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r149(){
    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -2]->minor,array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor)));
    }
// line 1071 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r150(){
    $this->_retvalue = array(array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor));
    }
// line 1079 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r152(){
    $this->_retvalue =  array($this->yystack[$this->yyidx + 0]->minor);
    }
// line 1087 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r153(){
    $this->_retvalue = array_merge($this->yystack[$this->yyidx + -1]->minor,$this->yystack[$this->yyidx + 0]->minor);
    }
// line 1100 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r156(){
    $this->_retvalue = array(trim($this->yystack[$this->yyidx + -1]->minor).$this->yystack[$this->yyidx + 0]->minor);
    }
// line 1109 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r158(){
    $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '', 'method');
    }
// line 1114 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r159(){
    $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'method');
    }
// line 1119 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r160(){
    $this->_retvalue = array($this->yystack[$this->yyidx + 0]->minor, '');
    }
// line 1124 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r161(){
    $this->_retvalue = array($this->yystack[$this->yyidx + -1]->minor, $this->yystack[$this->yyidx + 0]->minor, 'property');
    }
// line 1129 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r162(){
    $this->_retvalue = array($this->yystack[$this->yyidx + -2]->minor, $this->yystack[$this->yyidx + -1]->minor.$this->yystack[$this->yyidx + 0]->minor, 'property');
    }
// line 1135 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r163(){
    $this->_retvalue = ' '. trim($this->yystack[$this->yyidx + 0]->minor) . ' ';
    }
// line 1139 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r164(){
    static $lops = array(
        'eq' => ' == ',
        'ne' => ' != ',
        'neq' => ' != ',
        'gt' => ' > ',
        'ge' => ' >= ',
        'gte' => ' >= ',
        'lt' =>  ' < ',
        'le' =>  ' <= ',
        'lte' => ' <= ',
        'mod' =>  ' % ',
        'and' => ' && ',
        'or' => ' || ',
        'xor' => ' xor ',
         );
    $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
    $this->_retvalue = $lops[$op];
    }
// line 1158 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r165(){
     static $tlops = array(
         'isdivby' => array('op' => ' % ', 'pre' => '!('),
         'isnotdivby' => array('op' => ' % ', 'pre' => '('),
         'isevenby' => array('op' => ' / ', 'pre' => '!(1 & '),
         'isnotevenby' => array('op' => ' / ', 'pre' => '(1 & '),
         'isoddby' => array('op' => ' / ', 'pre' => '(1 & '),
         'isnotoddby' => array('op' => ' / ', 'pre' => '!(1 & '),
         );
     $op = strtolower(preg_replace('/\s*/', '', $this->yystack[$this->yyidx + 0]->minor));
     $this->_retvalue = $tlops[$op];
     }
// line 1171 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r166(){
        static $scond = array (
            'iseven' => '!(1 & ',
            'isnoteven' => '(1 & ',
            'isodd' => '(1 & ',
            'isnotodd' => '!(1 & ',
        );
   $op = strtolower(str_replace(' ', '', $this->yystack[$this->yyidx + 0]->minor));
   $this->_retvalue = $scond[$op];
    }
// line 1185 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r167(){
    $this->_retvalue = 'array('.$this->yystack[$this->yyidx + -1]->minor.')';
    }
// line 1196 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r170(){
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.','.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 1204 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r172(){
    $this->_retvalue = $this->yystack[$this->yyidx + -2]->minor.'=>'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 1208 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r173(){ 
    $this->_retvalue = '\''.$this->yystack[$this->yyidx + -2]->minor.'\'=>'.$this->yystack[$this->yyidx + 0]->minor;
    }
// line 1224 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r176(){
    $this->compiler->leaveDoubleQuote();
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor->to_smarty_php($this);
    }
// line 1230 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r177(){
    $this->yystack[$this->yyidx + -1]->minor->append_subtree($this, $this->yystack[$this->yyidx + 0]->minor);
    $this->_retvalue = $this->yystack[$this->yyidx + -1]->minor;
    }
// line 1235 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r178(){
    $this->_retvalue = new Smarty_Internal_ParseTree_Dq($this, $this->yystack[$this->yyidx + 0]->minor);
    }
// line 1239 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r179(){
    $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)'.$this->yystack[$this->yyidx + -1]->minor);
    }
// line 1243 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r180(){
    $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)('.$this->yystack[$this->yyidx + -1]->minor.')');
    }
// line 1247 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r181(){
    $this->_retvalue = new Smarty_Internal_ParseTree_Code('(string)$_smarty_tpl->tpl_vars[\''. substr($this->yystack[$this->yyidx + 0]->minor,1) .'\']->value');
    }
// line 1259 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r184(){
    $this->_retvalue = new Smarty_Internal_ParseTree_Tag($this, $this->yystack[$this->yyidx + 0]->minor);
    }
// line 1263 "../smarty/lexer/smarty_internal_templateparser.y"
    public function yy_r185(){
    $this->_retvalue = new Smarty_Internal_ParseTree_DqContent($this->yystack[$this->yyidx + 0]->minor);
    }

    private $_retvalue;

    public function yy_reduce($yyruleno)
    {
        if ($this->yyTraceFILE && $yyruleno >= 0
              && $yyruleno < count(self::$yyRuleName)) {
            fprintf($this->yyTraceFILE, "%sReduce (%d) [%s].\n",
                $this->yyTracePrompt, $yyruleno,
                self::$yyRuleName[$yyruleno]);
        }

        $this->_retvalue = $yy_lefthand_side = null;
        if (isset(self::$yyReduceMap[$yyruleno])) {
            // call the action
            $this->_retvalue = null;
            $this->{'yy_r' . self::$yyReduceMap[$yyruleno]}();
            $yy_lefthand_side = $this->_retvalue;
        }
        $yygoto = self::$yyRuleInfo[$yyruleno][0];
        $yysize = self::$yyRuleInfo[$yyruleno][1];
        $this->yyidx -= $yysize;
        for ($i = $yysize; $i; $i--) {
            // pop all of the right-hand side parameters
            array_pop($this->yystack);
        }
        $yyact = $this->yy_find_reduce_action($this->yystack[$this->yyidx]->stateno, $yygoto);
        if ($yyact < self::YYNSTATE) {
            if (!$this->yyTraceFILE && $yysize) {
                $this->yyidx++;
                $x = new TP_yyStackEntry;
                $x->stateno = $yyact;
                $x->major = $yygoto;
                $x->minor = $yy_lefthand_side;
                $this->yystack[$this->yyidx] = $x;
            } else {
                $this->yy_shift($yyact, $yygoto, $yy_lefthand_side);
            }
        } elseif ($yyact === self::YYNSTATE + self::YYNRULE + 1) {
            $this->yy_accept();
        }
    }

    public function yy_parse_failed()
    {
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sFail!\n", $this->yyTracePrompt);
        } while ($this->yyidx >= 0) {
            $this->yy_pop_parser_stack();
        }
    }

    public function yy_syntax_error($yymajor, $TOKEN)
    {
// line 213 "../smarty/lexer/smarty_internal_templateparser.y"

    $this->internalError = true;
    $this->yymajor = $yymajor;
    $this->compiler->trigger_template_error();
    }

    public function yy_accept()
    {
        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sAccept!\n", $this->yyTracePrompt);
        } while ($this->yyidx >= 0) {
            $this->yy_pop_parser_stack();
        }
// line 206 "../smarty/lexer/smarty_internal_templateparser.y"

    $this->successful = !$this->internalError;
    $this->internalError = false;
    $this->retvalue = $this->_retvalue;
    }

    public function doParse($yymajor, $yytokenvalue)
    {
        $yyerrorhit = 0;   /* True if yymajor has invoked an error */

        if ($this->yyidx === null || $this->yyidx < 0) {
            $this->yyidx = 0;
            $this->yyerrcnt = -1;
            $x = new TP_yyStackEntry;
            $x->stateno = 0;
            $x->major = 0;
            $this->yystack = array();
            $this->yystack[] = $x;
        }
        $yyendofinput = ($yymajor==0);

        if ($this->yyTraceFILE) {
            fprintf($this->yyTraceFILE, "%sInput %s\n",
                $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
        }

        do {
            $yyact = $this->yy_find_shift_action($yymajor);
            if ($yymajor < self::YYERRORSYMBOL &&
                  !$this->yy_is_expected_token($yymajor)) {
                // force a syntax error
                $yyact = self::YY_ERROR_ACTION;
            }
            if ($yyact < self::YYNSTATE) {
                $this->yy_shift($yyact, $yymajor, $yytokenvalue);
                $this->yyerrcnt--;
                if ($yyendofinput && $this->yyidx >= 0) {
                    $yymajor = 0;
                } else {
                    $yymajor = self::YYNOCODE;
                }
            } elseif ($yyact < self::YYNSTATE + self::YYNRULE) {
                $this->yy_reduce($yyact - self::YYNSTATE);
            } elseif ($yyact === self::YY_ERROR_ACTION) {
                if ($this->yyTraceFILE) {
                    fprintf($this->yyTraceFILE, "%sSyntax Error!\n",
                        $this->yyTracePrompt);
                }
                if (self::YYERRORSYMBOL) {
                    if ($this->yyerrcnt < 0) {
                        $this->yy_syntax_error($yymajor, $yytokenvalue);
                    }
                    $yymx = $this->yystack[$this->yyidx]->major;
                    if ($yymx === self::YYERRORSYMBOL || $yyerrorhit) {
                        if ($this->yyTraceFILE) {
                            fprintf($this->yyTraceFILE, "%sDiscard input token %s\n",
                                $this->yyTracePrompt, $this->yyTokenName[$yymajor]);
                        }
                        $this->yy_destructor($yymajor, $yytokenvalue);
                        $yymajor = self::YYNOCODE;
                    } else {
                        while ($this->yyidx >= 0 &&
                                 $yymx !== self::YYERRORSYMBOL &&
        ($yyact = $this->yy_find_shift_action(self::YYERRORSYMBOL)) >= self::YYNSTATE
                              ){
                            $this->yy_pop_parser_stack();
                        }
                        if ($this->yyidx < 0 || $yymajor==0) {
                            $this->yy_destructor($yymajor, $yytokenvalue);
                            $this->yy_parse_failed();
                            $yymajor = self::YYNOCODE;
                        } elseif ($yymx !== self::YYERRORSYMBOL) {
                            $u2 = 0;
                            $this->yy_shift($yyact, self::YYERRORSYMBOL, $u2);
                        }
                    }
                    $this->yyerrcnt = 3;
                    $yyerrorhit = 1;
                } else {
                    if ($this->yyerrcnt <= 0) {
                        $this->yy_syntax_error($yymajor, $yytokenvalue);
                    }
                    $this->yyerrcnt = 3;
                    $this->yy_destructor($yymajor, $yytokenvalue);
                    if ($yyendofinput) {
                        $this->yy_parse_failed();
                    }
                    $yymajor = self::YYNOCODE;
                }
            } else {
                $this->yy_accept();
                $yymajor = self::YYNOCODE;
            }
        } while ($yymajor !== self::YYNOCODE && $this->yyidx >= 0);
    }
}

