Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 88

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 218

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 219

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 220
PK!_**"php-parser/grammar/tokens.templatenu[semValue #semval($,%t) $this->semValue #semval(%n) $this->stackPos-(%l-%n) #semval(%n,%t) $this->stackPos-(%l-%n) namespace PhpParser\Parser; #include; /* GENERATED file based on grammar/tokens.y */ final class Tokens { #tokenval const %s = %n; #endtokenval } PK!eՉphp-parser/grammar/README.mdnu[What do all those files mean? ============================= * `php5.y`: PHP 5 grammar written in a pseudo language * `php7.y`: PHP 7 grammar written in a pseudo language * `tokens.y`: Tokens definition shared between PHP 5 and PHP 7 grammars * `parser.template`: A `kmyacc` parser prototype file for PHP * `tokens.template`: A `kmyacc` prototype file for the `Tokens` class * `rebuildParsers.php`: Preprocesses the grammar and builds the parser using `kmyacc` .phpy pseudo language ===================== The `.y` file is a normal grammar in `kmyacc` (`yacc`) style, with some transformations applied to it: * Nodes are created using the syntax `Name[..., ...]`. This is transformed into `new Name(..., ..., attributes())` * Some function-like constructs are resolved (see `rebuildParsers.php` for a list) Building the parser =================== Run `php grammar/rebuildParsers.php` to rebuild the parsers. Additional options: * The `KMYACC` environment variable can be used to specify an alternative `kmyacc` binary. By default the `phpyacc` dev dependency will be used. To use the original `kmyacc`, you need to compile [moriyoshi's fork](https://github.com/moriyoshi/kmyacc-forked). * The `--debug` option enables emission of debug symbols and creates the `y.output` file. * The `--keep-tmp-grammar` option preserves the preprocessed grammar file. PK!eo %php-parser/grammar/rebuildParsers.phpnu[ 'Php5', __DIR__ . '/php7.y' => 'Php7', ]; $tokensFile = __DIR__ . '/tokens.y'; $tokensTemplate = __DIR__ . '/tokens.template'; $skeletonFile = __DIR__ . '/parser.template'; $tmpGrammarFile = __DIR__ . '/tmp_parser.phpy'; $tmpResultFile = __DIR__ . '/tmp_parser.php'; $resultDir = __DIR__ . '/../lib/PhpParser/Parser'; $tokensResultsFile = $resultDir . '/Tokens.php'; $kmyacc = getenv('KMYACC'); if (!$kmyacc) { // Use phpyacc from dev dependencies by default. $kmyacc = PHP_BINARY . ' ' . __DIR__ . '/../vendor/bin/phpyacc'; } $options = array_flip($argv); $optionDebug = isset($options['--debug']); $optionKeepTmpGrammar = isset($options['--keep-tmp-grammar']); /////////////////////////////// /// Utility regex constants /// /////////////////////////////// const LIB = '(?(DEFINE) (?\'[^\\\\\']*+(?:\\\\.[^\\\\\']*+)*+\') (?"[^\\\\"]*+(?:\\\\.[^\\\\"]*+)*+") (?(?&singleQuotedString)|(?&doubleQuotedString)) (?/\*[^*]*+(?:\*(?!/)[^*]*+)*+\*/) (?\{[^\'"/{}]*+(?:(?:(?&string)|(?&comment)|(?&code)|/)[^\'"/{}]*+)*+}) )'; const PARAMS = '\[(?[^[\]]*+(?:\[(?¶ms)\][^[\]]*+)*+)\]'; const ARGS = '\((?[^()]*+(?:\((?&args)\)[^()]*+)*+)\)'; /////////////////// /// Main script /// /////////////////// $tokens = file_get_contents($tokensFile); foreach ($grammarFileToName as $grammarFile => $name) { echo "Building temporary $name grammar file.\n"; $grammarCode = file_get_contents($grammarFile); $grammarCode = str_replace('%tokens', $tokens, $grammarCode); $grammarCode = resolveNodes($grammarCode); $grammarCode = resolveMacros($grammarCode); $grammarCode = resolveStackAccess($grammarCode); file_put_contents($tmpGrammarFile, $grammarCode); $additionalArgs = $optionDebug ? '-t -v' : ''; echo "Building $name parser.\n"; $output = execCmd("$kmyacc $additionalArgs -m $skeletonFile -p $name $tmpGrammarFile"); $resultCode = file_get_contents($tmpResultFile); $resultCode = removeTrailingWhitespace($resultCode); ensureDirExists($resultDir); file_put_contents("$resultDir/$name.php", $resultCode); unlink($tmpResultFile); echo "Building token definition.\n"; $output = execCmd("$kmyacc -m $tokensTemplate $tmpGrammarFile"); rename($tmpResultFile, $tokensResultsFile); if (!$optionKeepTmpGrammar) { unlink($tmpGrammarFile); } } /////////////////////////////// /// Preprocessing functions /// /////////////////////////////// function resolveNodes($code) { return preg_replace_callback( '~\b(?[A-Z][a-zA-Z_\\\\]++)\s*' . PARAMS . '~', function($matches) { // recurse $matches['params'] = resolveNodes($matches['params']); $params = magicSplit( '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,', $matches['params'] ); $paramCode = ''; foreach ($params as $param) { $paramCode .= $param . ', '; } return 'new ' . $matches['name'] . '(' . $paramCode . 'attributes())'; }, $code ); } function resolveMacros($code) { return preg_replace_callback( '~\b(?)(?!array\()(?[a-z][A-Za-z]++)' . ARGS . '~', function($matches) { // recurse $matches['args'] = resolveMacros($matches['args']); $name = $matches['name']; $args = magicSplit( '(?:' . PARAMS . '|' . ARGS . ')(*SKIP)(*FAIL)|,', $matches['args'] ); if ('attributes' == $name) { assertArgs(0, $args, $name); return '$this->startAttributeStack[#1] + $this->endAttributes'; } if ('stackAttributes' == $name) { assertArgs(1, $args, $name); return '$this->startAttributeStack[' . $args[0] . ']' . ' + $this->endAttributeStack[' . $args[0] . ']'; } if ('init' == $name) { return '$$ = array(' . implode(', ', $args) . ')'; } if ('push' == $name) { assertArgs(2, $args, $name); return $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0]; } if ('pushNormalizing' == $name) { assertArgs(2, $args, $name); return 'if (is_array(' . $args[1] . ')) { $$ = array_merge(' . $args[0] . ', ' . $args[1] . '); }' . ' else { ' . $args[0] . '[] = ' . $args[1] . '; $$ = ' . $args[0] . '; }'; } if ('toArray' == $name) { assertArgs(1, $args, $name); return 'is_array(' . $args[0] . ') ? ' . $args[0] . ' : array(' . $args[0] . ')'; } if ('parseVar' == $name) { assertArgs(1, $args, $name); return 'substr(' . $args[0] . ', 1)'; } if ('parseEncapsed' == $name) { assertArgs(3, $args, $name); return 'foreach (' . $args[0] . ' as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) {' . ' $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, ' . $args[1] . ', ' . $args[2] . '); } }'; } if ('makeNop' == $name) { assertArgs(3, $args, $name); return '$startAttributes = ' . $args[1] . ';' . ' if (isset($startAttributes[\'comments\']))' . ' { ' . $args[0] . ' = new Stmt\Nop($startAttributes + ' . $args[2] . '); }' . ' else { ' . $args[0] . ' = null; }'; } if ('makeZeroLengthNop' == $name) { assertArgs(2, $args, $name); return '$startAttributes = ' . $args[1] . ';' . ' if (isset($startAttributes[\'comments\']))' . ' { ' . $args[0] . ' = new Stmt\Nop($this->createZeroLengthAttributes($startAttributes)); }' . ' else { ' . $args[0] . ' = null; }'; } if ('strKind' == $name) { assertArgs(1, $args, $name); return '(' . $args[0] . '[0] === "\'" || (' . $args[0] . '[1] === "\'" && ' . '(' . $args[0] . '[0] === \'b\' || ' . $args[0] . '[0] === \'B\')) ' . '? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED)'; } if ('prependLeadingComments' == $name) { assertArgs(1, $args, $name); return '$attrs = $this->startAttributeStack[#1]; $stmts = ' . $args[0] . '; ' . 'if (!empty($attrs[\'comments\'])) {' . '$stmts[0]->setAttribute(\'comments\', ' . 'array_merge($attrs[\'comments\'], $stmts[0]->getAttribute(\'comments\', []))); }'; } return $matches[0]; }, $code ); } function assertArgs($num, $args, $name) { if ($num != count($args)) { die('Wrong argument count for ' . $name . '().'); } } function resolveStackAccess($code) { $code = preg_replace('/\$\d+/', '$this->semStack[$0]', $code); $code = preg_replace('/#(\d+)/', '$$1', $code); return $code; } function removeTrailingWhitespace($code) { $lines = explode("\n", $code); $lines = array_map('rtrim', $lines); return implode("\n", $lines); } function ensureDirExists($dir) { if (!is_dir($dir)) { mkdir($dir, 0777, true); } } function execCmd($cmd) { $output = trim(shell_exec("$cmd 2>&1")); if ($output !== "") { echo "> " . $cmd . "\n"; echo $output; } return $output; } ////////////////////////////// /// Regex helper functions /// ////////////////////////////// function regex($regex) { return '~' . LIB . '(?:' . str_replace('~', '\~', $regex) . ')~'; } function magicSplit($regex, $string) { $pieces = preg_split(regex('(?:(?&string)|(?&comment)|(?&code))(*SKIP)(*FAIL)|' . $regex), $string); foreach ($pieces as &$piece) { $piece = trim($piece); } if ($pieces === ['']) { return []; } return $pieces; } PK!-ɚQ  "php-parser/grammar/parser.templatenu[semValue #semval($,%t) $this->semValue #semval(%n) $stackPos-(%l-%n) #semval(%n,%t) $stackPos-(%l-%n) namespace PhpParser\Parser; use PhpParser\Error; use PhpParser\Node; use PhpParser\Node\Expr; use PhpParser\Node\Name; use PhpParser\Node\Scalar; use PhpParser\Node\Stmt; #include; /* This is an automatically GENERATED file, which should not be manually edited. * Instead edit one of the following: * * the grammar files grammar/php5.y or grammar/php7.y * * the skeleton file grammar/parser.template * * the preprocessing script grammar/rebuildParsers.php */ class #(-p) extends \PhpParser\ParserAbstract { protected $tokenToSymbolMapSize = #(YYMAXLEX); protected $actionTableSize = #(YYLAST); protected $gotoTableSize = #(YYGLAST); protected $invalidSymbol = #(YYBADCH); protected $errorSymbol = #(YYINTERRTOK); protected $defaultAction = #(YYDEFAULT); protected $unexpectedTokenRule = #(YYUNEXPECTED); protected $YY2TBLSTATE = #(YY2TBLSTATE); protected $numNonLeafStates = #(YYNLSTATES); protected $symbolToName = array( #listvar terminals ); protected $tokenToSymbol = array( #listvar yytranslate ); protected $action = array( #listvar yyaction ); protected $actionCheck = array( #listvar yycheck ); protected $actionBase = array( #listvar yybase ); protected $actionDefault = array( #listvar yydefault ); protected $goto = array( #listvar yygoto ); protected $gotoCheck = array( #listvar yygcheck ); protected $gotoBase = array( #listvar yygbase ); protected $gotoDefault = array( #listvar yygdefault ); protected $ruleToNonTerminal = array( #listvar yylhs ); protected $ruleToLength = array( #listvar yylen ); #if -t protected $productions = array( #production-strings; ); #endif protected function initReduceCallbacks() { $this->reduceCallbacks = [ #reduce %n => function ($stackPos) { %b }, #noact %n => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, #endreduce ]; } } #tailcode; PK! %php-parser/grammar/php7.ynu[%pure_parser %expect 2 %tokens %% start: top_statement_list { $$ = $this->handleNamespaces($1); } ; top_statement_list_ex: top_statement_list_ex top_statement { pushNormalizing($1, $2); } | /* empty */ { init(); } ; top_statement_list: top_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; reserved_non_modifiers: T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN ; semi_reserved: reserved_non_modifiers | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC ; identifier_ex: T_STRING { $$ = Node\Identifier[$1]; } | semi_reserved { $$ = Node\Identifier[$1]; } ; identifier: T_STRING { $$ = Node\Identifier[$1]; } ; reserved_non_modifiers_identifier: reserved_non_modifiers { $$ = Node\Identifier[$1]; } ; namespace_name_parts: T_STRING { init($1); } | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); } ; namespace_name: namespace_name_parts { $$ = Name[$1]; } ; plain_variable: T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; } ; semi: ';' { /* nothing */ } | error { /* nothing */ } ; no_comma: /* empty */ { /* nothing */ } | ',' { $this->emitError(new Error('A trailing comma is not allowed here', attributes())); } ; optional_comma: /* empty */ | ',' top_statement: statement { $$ = $1; } | function_declaration_statement { $$ = $1; } | class_declaration_statement { $$ = $1; } | T_HALT_COMPILER { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; } | T_NAMESPACE namespace_name semi { $$ = Stmt\Namespace_[$2, null]; $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $this->checkNamespace($$); } | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt\Namespace_[$2, $4]; $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($$); } | T_NAMESPACE '{' top_statement_list '}' { $$ = Stmt\Namespace_[null, $3]; $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($$); } | T_USE use_declarations semi { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; } | T_USE use_type use_declarations semi { $$ = Stmt\Use_[$3, $2]; } | group_use_declaration semi { $$ = $1; } | T_CONST constant_declaration_list semi { $$ = Stmt\Const_[$2]; } ; use_type: T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; } | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; } ; /* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */ group_use_declaration: T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; } | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; } | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; } | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; } ; unprefixed_use_declarations: non_empty_unprefixed_use_declarations optional_comma { $$ = $1; } ; non_empty_unprefixed_use_declarations: non_empty_unprefixed_use_declarations ',' unprefixed_use_declaration { push($1, $3); } | unprefixed_use_declaration { init($1); } ; use_declarations: non_empty_use_declarations no_comma { $$ = $1; } ; non_empty_use_declarations: non_empty_use_declarations ',' use_declaration { push($1, $3); } | use_declaration { init($1); } ; inline_use_declarations: non_empty_inline_use_declarations optional_comma { $$ = $1; } ; non_empty_inline_use_declarations: non_empty_inline_use_declarations ',' inline_use_declaration { push($1, $3); } | inline_use_declaration { init($1); } ; unprefixed_use_declaration: namespace_name { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); } | namespace_name T_AS identifier { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); } ; use_declaration: unprefixed_use_declaration { $$ = $1; } | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; } ; inline_use_declaration: unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; } | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; } ; constant_declaration_list: non_empty_constant_declaration_list no_comma { $$ = $1; } ; non_empty_constant_declaration_list: non_empty_constant_declaration_list ',' constant_declaration { push($1, $3); } | constant_declaration { init($1); } ; constant_declaration: identifier '=' expr { $$ = Node\Const_[$1, $3]; } ; class_const_list: non_empty_class_const_list no_comma { $$ = $1; } ; non_empty_class_const_list: non_empty_class_const_list ',' class_const { push($1, $3); } | class_const { init($1); } ; class_const: identifier_ex '=' expr { $$ = Node\Const_[$1, $3]; } ; inner_statement_list_ex: inner_statement_list_ex inner_statement { pushNormalizing($1, $2); } | /* empty */ { init(); } ; inner_statement_list: inner_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; inner_statement: statement { $$ = $1; } | function_declaration_statement { $$ = $1; } | class_declaration_statement { $$ = $1; } | T_HALT_COMPILER { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); } ; non_empty_statement: '{' inner_statement_list '}' { if ($2) { $$ = $2; prependLeadingComments($$); } else { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); if (null === $$) { $$ = array(); } } } | T_IF '(' expr ')' statement elseif_list else_single { $$ = Stmt\If_[$3, ['stmts' => toArray($5), 'elseifs' => $6, 'else' => $7]]; } | T_IF '(' expr ')' ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' { $$ = Stmt\If_[$3, ['stmts' => $6, 'elseifs' => $7, 'else' => $8]]; } | T_WHILE '(' expr ')' while_statement { $$ = Stmt\While_[$3, $5]; } | T_DO statement T_WHILE '(' expr ')' ';' { $$ = Stmt\Do_ [$5, toArray($2)]; } | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; } | T_SWITCH '(' expr ')' switch_case_list { $$ = Stmt\Switch_[$3, $5]; } | T_BREAK optional_expr semi { $$ = Stmt\Break_[$2]; } | T_CONTINUE optional_expr semi { $$ = Stmt\Continue_[$2]; } | T_RETURN optional_expr semi { $$ = Stmt\Return_[$2]; } | T_GLOBAL global_var_list semi { $$ = Stmt\Global_[$2]; } | T_STATIC static_var_list semi { $$ = Stmt\Static_[$2]; } | T_ECHO expr_list semi { $$ = Stmt\Echo_[$2]; } | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; } | expr semi { $$ = Stmt\Expression[$1]; } | T_UNSET '(' variables_list ')' semi { $$ = Stmt\Unset_[$3]; } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; } | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; } | T_FOREACH '(' expr error ')' foreach_statement { $$ = Stmt\Foreach_[$3, new Expr\Error(stackAttributes(#4)), ['stmts' => $6]]; } | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; } | T_TRY '{' inner_statement_list '}' catches optional_finally { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); } | T_THROW expr semi { $$ = Stmt\Throw_[$2]; } | T_GOTO identifier semi { $$ = Stmt\Goto_[$2]; } | identifier ':' { $$ = Stmt\Label[$1]; } | error { $$ = array(); /* means: no statement */ } ; statement: non_empty_statement { $$ = $1; } | ';' { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); if ($$ === null) $$ = array(); /* means: no statement */ } ; catches: /* empty */ { init(); } | catches catch { push($1, $2); } ; name_union: name { init($1); } | name_union '|' name { push($1, $3); } ; catch: T_CATCH '(' name_union plain_variable ')' '{' inner_statement_list '}' { $$ = Stmt\Catch_[$3, $4, $7]; } ; optional_finally: /* empty */ { $$ = null; } | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; } ; variables_list: non_empty_variables_list optional_comma { $$ = $1; } ; non_empty_variables_list: variable { init($1); } | non_empty_variables_list ',' variable { push($1, $3); } ; optional_ref: /* empty */ { $$ = false; } | '&' { $$ = true; } ; optional_ellipsis: /* empty */ { $$ = false; } | T_ELLIPSIS { $$ = true; } ; block_or_error: '{' inner_statement_list '}' { $$ = $2; } | error { $$ = []; } ; function_declaration_statement: T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type block_or_error { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $8]]; } ; class_declaration_statement: class_entry_type identifier extends_from implements_list '{' class_statement_list '}' { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]]; $this->checkClass($$, #2); } | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}' { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]]; $this->checkInterface($$, #2); } | T_TRAIT identifier '{' class_statement_list '}' { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; } ; class_entry_type: T_CLASS { $$ = 0; } | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; } ; extends_from: /* empty */ { $$ = null; } | T_EXTENDS class_name { $$ = $2; } ; interface_extends_list: /* empty */ { $$ = array(); } | T_EXTENDS class_name_list { $$ = $2; } ; implements_list: /* empty */ { $$ = array(); } | T_IMPLEMENTS class_name_list { $$ = $2; } ; class_name_list: non_empty_class_name_list no_comma { $$ = $1; } ; non_empty_class_name_list: class_name { init($1); } | non_empty_class_name_list ',' class_name { push($1, $3); } ; for_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; } ; foreach_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; } ; declare_statement: non_empty_statement { $$ = toArray($1); } | ';' { $$ = null; } | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; } ; declare_list: non_empty_declare_list no_comma { $$ = $1; } ; non_empty_declare_list: declare_list_element { init($1); } | non_empty_declare_list ',' declare_list_element { push($1, $3); } ; declare_list_element: identifier '=' expr { $$ = Stmt\DeclareDeclare[$1, $3]; } ; switch_case_list: '{' case_list '}' { $$ = $2; } | '{' ';' case_list '}' { $$ = $3; } | ':' case_list T_ENDSWITCH ';' { $$ = $2; } | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; } ; case_list: /* empty */ { init(); } | case_list case { push($1, $2); } ; case: T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; } | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; } ; case_separator: ':' | ';' ; while_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; } ; elseif_list: /* empty */ { init(); } | elseif_list elseif { push($1, $2); } ; elseif: T_ELSEIF '(' expr ')' statement { $$ = Stmt\ElseIf_[$3, toArray($5)]; } ; new_elseif_list: /* empty */ { init(); } | new_elseif_list new_elseif { push($1, $2); } ; new_elseif: T_ELSEIF '(' expr ')' ':' inner_statement_list { $$ = Stmt\ElseIf_[$3, $6]; } ; else_single: /* empty */ { $$ = null; } | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; } ; new_else_single: /* empty */ { $$ = null; } | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; } ; foreach_variable: variable { $$ = array($1, false); } | '&' variable { $$ = array($2, true); } | list_expr { $$ = array($1, false); } | array_short_syntax { $$ = array($1, false); } ; parameter_list: non_empty_parameter_list no_comma { $$ = $1; } | /* empty */ { $$ = array(); } ; non_empty_parameter_list: parameter { init($1); } | non_empty_parameter_list ',' parameter { push($1, $3); } ; parameter: optional_type optional_ref optional_ellipsis plain_variable { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); } | optional_type optional_ref optional_ellipsis plain_variable '=' expr { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); } | optional_type optional_ref optional_ellipsis error { $$ = Node\Param[Expr\Error[], null, $1, $2, $3]; } ; type_expr: type { $$ = $1; } | '?' type { $$ = Node\NullableType[$2]; } | union_type { $$ = Node\UnionType[$1]; } ; type: name { $$ = $this->handleBuiltinTypes($1); } | T_ARRAY { $$ = Node\Identifier['array']; } | T_CALLABLE { $$ = Node\Identifier['callable']; } ; union_type: type '|' type { init($1, $3); } | union_type '|' type { push($1, $3); } ; optional_type: /* empty */ { $$ = null; } | type_expr { $$ = $1; } ; optional_return_type: /* empty */ { $$ = null; } | ':' type_expr { $$ = $2; } | ':' error { $$ = null; } ; argument_list: '(' ')' { $$ = array(); } | '(' non_empty_argument_list optional_comma ')' { $$ = $2; } ; non_empty_argument_list: argument { init($1); } | non_empty_argument_list ',' argument { push($1, $3); } ; argument: expr { $$ = Node\Arg[$1, false, false]; } | '&' variable { $$ = Node\Arg[$2, true, false]; } | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; } ; global_var_list: non_empty_global_var_list no_comma { $$ = $1; } ; non_empty_global_var_list: non_empty_global_var_list ',' global_var { push($1, $3); } | global_var { init($1); } ; global_var: simple_variable { $$ = Expr\Variable[$1]; } ; static_var_list: non_empty_static_var_list no_comma { $$ = $1; } ; non_empty_static_var_list: non_empty_static_var_list ',' static_var { push($1, $3); } | static_var { init($1); } ; static_var: plain_variable { $$ = Stmt\StaticVar[$1, null]; } | plain_variable '=' expr { $$ = Stmt\StaticVar[$1, $3]; } ; class_statement_list_ex: class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } | /* empty */ { init(); } ; class_statement_list: class_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; class_statement: variable_modifiers optional_type property_declaration_list ';' { $attrs = attributes(); $$ = new Stmt\Property($1, $3, $attrs, $2); $this->checkProperty($$, #1); } | method_modifiers T_CONST class_const_list ';' { $$ = Stmt\ClassConst[$3, $1]; $this->checkClassConst($$, #1); } | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]]; $this->checkClassMethod($$, #1); } | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; } | error { $$ = null; /* will be skipped */ } ; trait_adaptations: ';' { $$ = array(); } | '{' trait_adaptation_list '}' { $$ = $2; } ; trait_adaptation_list: /* empty */ { init(); } | trait_adaptation_list trait_adaptation { push($1, $2); } ; trait_adaptation: trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';' { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; } | trait_method_reference T_AS member_modifier identifier_ex ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; } | trait_method_reference T_AS member_modifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; } | trait_method_reference T_AS identifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } | trait_method_reference T_AS reserved_non_modifiers_identifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } ; trait_method_reference_fully_qualified: name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); } ; trait_method_reference: trait_method_reference_fully_qualified { $$ = $1; } | identifier_ex { $$ = array(null, $1); } ; method_body: ';' /* abstract method */ { $$ = null; } | block_or_error { $$ = $1; } ; variable_modifiers: non_empty_member_modifiers { $$ = $1; } | T_VAR { $$ = 0; } ; method_modifiers: /* empty */ { $$ = 0; } | non_empty_member_modifiers { $$ = $1; } ; non_empty_member_modifiers: member_modifier { $$ = $1; } | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; } ; member_modifier: T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; } | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; } | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; } | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; } | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; } ; property_declaration_list: non_empty_property_declaration_list no_comma { $$ = $1; } ; non_empty_property_declaration_list: property_declaration { init($1); } | non_empty_property_declaration_list ',' property_declaration { push($1, $3); } ; property_decl_name: T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; } ; property_declaration: property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; } | property_decl_name '=' expr { $$ = Stmt\PropertyProperty[$1, $3]; } ; expr_list: non_empty_expr_list no_comma { $$ = $1; } ; non_empty_expr_list: non_empty_expr_list ',' expr { push($1, $3); } | expr { init($1); } ; for_expr: /* empty */ { $$ = array(); } | expr_list { $$ = $1; } ; expr: variable { $$ = $1; } | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; } | array_short_syntax '=' expr { $$ = Expr\Assign[$1, $3]; } | variable '=' expr { $$ = Expr\Assign[$1, $3]; } | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; } | new_expr { $$ = $1; } | T_CLONE expr { $$ = Expr\Clone_[$2]; } | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; } | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; } | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; } | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; } | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; } | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; } | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; } | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; } | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; } | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; } | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; } | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; } | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; } | variable T_INC { $$ = Expr\PostInc[$1]; } | T_INC variable { $$ = Expr\PreInc [$2]; } | variable T_DEC { $$ = Expr\PostDec[$1]; } | T_DEC variable { $$ = Expr\PreDec [$2]; } | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; } | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; } | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; } | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; } | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; } | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; } | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; } | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; } | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; } | '!' expr { $$ = Expr\BooleanNot[$2]; } | '~' expr { $$ = Expr\BitwiseNot[$2]; } | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; } | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; } | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; } | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; } | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; } | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; } | '(' expr ')' { $$ = $2; } | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; } | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; } | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; } | T_ISSET '(' variables_list ')' { $$ = Expr\Isset_[$3]; } | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; } | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; } | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; } | T_EVAL '(' expr ')' { $$ = Expr\Eval_[$3]; } | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; } | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; } | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; } | T_DOUBLE_CAST expr { $attrs = attributes(); $attrs['kind'] = $this->getFloatCastKind($1); $$ = new Expr\Cast\Double($2, $attrs); } | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; } | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; } | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; } | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; } | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; } | T_EXIT exit_expr { $attrs = attributes(); $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; $$ = new Expr\Exit_($2, $attrs); } | '@' expr { $$ = Expr\ErrorSuppress[$2]; } | scalar { $$ = $1; } | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; } | T_PRINT expr { $$ = Expr\Print_[$2]; } | T_YIELD { $$ = Expr\Yield_[null, null]; } | T_YIELD expr { $$ = Expr\Yield_[$2, null]; } | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; } | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; } | T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr { $$ = Expr\ArrowFunction[['static' => false, 'byRef' => $2, 'params' => $4, 'returnType' => $6, 'expr' => $8]]; } | T_STATIC T_FN optional_ref '(' parameter_list ')' optional_return_type T_DOUBLE_ARROW expr { $$ = Expr\ArrowFunction[['static' => true, 'byRef' => $3, 'params' => $5, 'returnType' => $7, 'expr' => $9]]; } | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $8]]; } | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type block_or_error { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $9]]; } ; anonymous_class: T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}' { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2); $this->checkClass($$[0], -1); } ; new_expr: T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; } | T_NEW anonymous_class { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; } ; lexical_vars: /* empty */ { $$ = array(); } | T_USE '(' lexical_var_list ')' { $$ = $3; } ; lexical_var_list: non_empty_lexical_var_list no_comma { $$ = $1; } ; non_empty_lexical_var_list: lexical_var { init($1); } | non_empty_lexical_var_list ',' lexical_var { push($1, $3); } ; lexical_var: optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; } ; function_call: name argument_list { $$ = Expr\FuncCall[$1, $2]; } | callable_expr argument_list { $$ = Expr\FuncCall[$1, $2]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM member_name argument_list { $$ = Expr\StaticCall[$1, $3, $4]; } ; class_name: T_STATIC { $$ = Name[$1]; } | name { $$ = $1; } ; name: namespace_name_parts { $$ = Name[$1]; } | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; } | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; } ; class_name_reference: class_name { $$ = $1; } | new_variable { $$ = $1; } | error { $$ = Expr\Error[]; $this->errorState = 2; } ; class_name_or_var: class_name { $$ = $1; } | dereferencable { $$ = $1; } ; exit_expr: /* empty */ { $$ = null; } | '(' optional_expr ')' { $$ = $2; } ; backticks_expr: /* empty */ { $$ = array(); } | T_ENCAPSED_AND_WHITESPACE { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`')]); } | encaps_list { parseEncapsed($1, '`', true); $$ = $1; } ; ctor_arguments: /* empty */ { $$ = array(); } | argument_list { $$ = $1; } ; constant: name { $$ = Expr\ConstFetch[$1]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = Expr\ClassConstFetch[$1, $3]; } /* We interpret and isolated FOO:: as an unfinished class constant fetch. It could also be an unfinished static property fetch or unfinished scoped call. */ | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM error { $$ = Expr\ClassConstFetch[$1, new Expr\Error(stackAttributes(#3))]; $this->errorState = 2; } ; array_short_syntax: '[' array_pair_list ']' { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT; $$ = new Expr\Array_($2, $attrs); } ; dereferencable_scalar: T_ARRAY '(' array_pair_list ')' { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG; $$ = new Expr\Array_($3, $attrs); } | array_short_syntax { $$ = $1; } | T_CONSTANT_ENCAPSED_STRING { $attrs = attributes(); $attrs['kind'] = strKind($1); $$ = new Scalar\String_(Scalar\String_::parse($1), $attrs); } ; scalar: T_LNUMBER { $$ = $this->parseLNumber($1, attributes()); } | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; } | T_LINE { $$ = Scalar\MagicConst\Line[]; } | T_FILE { $$ = Scalar\MagicConst\File[]; } | T_DIR { $$ = Scalar\MagicConst\Dir[]; } | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; } | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; } | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; } | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; } | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; } | dereferencable_scalar { $$ = $1; } | constant { $$ = $1; } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } | T_START_HEREDOC T_END_HEREDOC { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), true); } | '"' encaps_list '"' { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); } | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } ; optional_expr: /* empty */ { $$ = null; } | expr { $$ = $1; } ; dereferencable: variable { $$ = $1; } | '(' expr ')' { $$ = $2; } | dereferencable_scalar { $$ = $1; } ; callable_expr: callable_variable { $$ = $1; } | '(' expr ')' { $$ = $2; } | dereferencable_scalar { $$ = $1; } ; callable_variable: simple_variable { $$ = Expr\Variable[$1]; } | dereferencable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | constant '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | dereferencable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } | function_call { $$ = $1; } | dereferencable T_OBJECT_OPERATOR property_name argument_list { $$ = Expr\MethodCall[$1, $3, $4]; } ; variable: callable_variable { $$ = $1; } | static_member { $$ = $1; } | dereferencable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; } ; simple_variable: T_VARIABLE { $$ = parseVar($1); } | '$' '{' expr '}' { $$ = $3; } | '$' simple_variable { $$ = Expr\Variable[$2]; } | '$' error { $$ = Expr\Error[]; $this->errorState = 2; } ; static_member_prop_name: simple_variable { $var = $1; $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; } ; static_member: class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name { $$ = Expr\StaticPropertyFetch[$1, $3]; } ; new_variable: simple_variable { $$ = Expr\Variable[$1]; } | new_variable '[' optional_expr ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | new_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } | new_variable T_OBJECT_OPERATOR property_name { $$ = Expr\PropertyFetch[$1, $3]; } | class_name T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name { $$ = Expr\StaticPropertyFetch[$1, $3]; } | new_variable T_PAAMAYIM_NEKUDOTAYIM static_member_prop_name { $$ = Expr\StaticPropertyFetch[$1, $3]; } ; member_name: identifier_ex { $$ = $1; } | '{' expr '}' { $$ = $2; } | simple_variable { $$ = Expr\Variable[$1]; } ; property_name: identifier { $$ = $1; } | '{' expr '}' { $$ = $2; } | simple_variable { $$ = Expr\Variable[$1]; } | error { $$ = Expr\Error[]; $this->errorState = 2; } ; list_expr: T_LIST '(' list_expr_elements ')' { $$ = Expr\List_[$3]; } ; list_expr_elements: list_expr_elements ',' list_expr_element { push($1, $3); } | list_expr_element { init($1); } ; list_expr_element: variable { $$ = Expr\ArrayItem[$1, null, false]; } | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; } | list_expr { $$ = Expr\ArrayItem[$1, null, false]; } | expr T_DOUBLE_ARROW variable { $$ = Expr\ArrayItem[$3, $1, false]; } | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; } | expr T_DOUBLE_ARROW list_expr { $$ = Expr\ArrayItem[$3, $1, false]; } | /* empty */ { $$ = null; } ; array_pair_list: inner_array_pair_list { $$ = $1; $end = count($$)-1; if ($$[$end] === null) array_pop($$); } ; comma_or_error: ',' | error { /* do nothing -- prevent default action of $$=$1. See #551. */ } ; inner_array_pair_list: inner_array_pair_list comma_or_error array_pair { push($1, $3); } | array_pair { init($1); } ; array_pair: expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; } | expr { $$ = Expr\ArrayItem[$1, null, false]; } | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; } | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; } | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } | /* empty */ { $$ = null; } ; encaps_list: encaps_list encaps_var { push($1, $2); } | encaps_list encaps_string_part { push($1, $2); } | encaps_var { init($1); } | encaps_string_part encaps_var { init($1, $2); } ; encaps_string_part: T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; } ; encaps_str_varname: T_STRING_VARNAME { $$ = Expr\Variable[$1]; } ; encaps_var: plain_variable { $$ = $1; } | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; } | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}' { $$ = Expr\ArrayDimFetch[$2, $4]; } | T_CURLY_OPEN variable '}' { $$ = $2; } ; encaps_var_offset: T_STRING { $$ = Scalar\String_[$1]; } | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); } | '-' T_NUM_STRING { $$ = $this->parseNumString('-' . $2, attributes()); } | plain_variable { $$ = $1; } ; %% PK!B  php-parser/grammar/tokens.ynu[/* We currently rely on the token ID mapping to be the same between PHP 5 and PHP 7 - so the same lexer can be used for * both. This is enforced by sharing this token file. */ %left T_INCLUDE T_INCLUDE_ONCE T_EVAL T_REQUIRE T_REQUIRE_ONCE %left ',' %left T_LOGICAL_OR %left T_LOGICAL_XOR %left T_LOGICAL_AND %right T_PRINT %right T_YIELD %right T_DOUBLE_ARROW %right T_YIELD_FROM %left '=' T_PLUS_EQUAL T_MINUS_EQUAL T_MUL_EQUAL T_DIV_EQUAL T_CONCAT_EQUAL T_MOD_EQUAL T_AND_EQUAL T_OR_EQUAL T_XOR_EQUAL T_SL_EQUAL T_SR_EQUAL T_POW_EQUAL T_COALESCE_EQUAL %left '?' ':' %right T_COALESCE %left T_BOOLEAN_OR %left T_BOOLEAN_AND %left '|' %left '^' %left '&' %nonassoc T_IS_EQUAL T_IS_NOT_EQUAL T_IS_IDENTICAL T_IS_NOT_IDENTICAL T_SPACESHIP %nonassoc '<' T_IS_SMALLER_OR_EQUAL '>' T_IS_GREATER_OR_EQUAL %left T_SL T_SR %left '+' '-' '.' %left '*' '/' '%' %right '!' %nonassoc T_INSTANCEOF %right '~' T_INC T_DEC T_INT_CAST T_DOUBLE_CAST T_STRING_CAST T_ARRAY_CAST T_OBJECT_CAST T_BOOL_CAST T_UNSET_CAST '@' %right T_POW %right '[' %nonassoc T_NEW T_CLONE %token T_EXIT %token T_IF %left T_ELSEIF %left T_ELSE %left T_ENDIF %token T_LNUMBER %token T_DNUMBER %token T_STRING %token T_STRING_VARNAME %token T_VARIABLE %token T_NUM_STRING %token T_INLINE_HTML %token T_CHARACTER %token T_BAD_CHARACTER %token T_ENCAPSED_AND_WHITESPACE %token T_CONSTANT_ENCAPSED_STRING %token T_ECHO %token T_DO %token T_WHILE %token T_ENDWHILE %token T_FOR %token T_ENDFOR %token T_FOREACH %token T_ENDFOREACH %token T_DECLARE %token T_ENDDECLARE %token T_AS %token T_SWITCH %token T_ENDSWITCH %token T_CASE %token T_DEFAULT %token T_BREAK %token T_CONTINUE %token T_GOTO %token T_FUNCTION %token T_FN %token T_CONST %token T_RETURN %token T_TRY %token T_CATCH %token T_FINALLY %token T_THROW %token T_USE %token T_INSTEADOF %token T_GLOBAL %right T_STATIC T_ABSTRACT T_FINAL T_PRIVATE T_PROTECTED T_PUBLIC %token T_VAR %token T_UNSET %token T_ISSET %token T_EMPTY %token T_HALT_COMPILER %token T_CLASS %token T_TRAIT %token T_INTERFACE %token T_EXTENDS %token T_IMPLEMENTS %token T_OBJECT_OPERATOR %token T_DOUBLE_ARROW %token T_LIST %token T_ARRAY %token T_CALLABLE %token T_CLASS_C %token T_TRAIT_C %token T_METHOD_C %token T_FUNC_C %token T_LINE %token T_FILE %token T_COMMENT %token T_DOC_COMMENT %token T_OPEN_TAG %token T_OPEN_TAG_WITH_ECHO %token T_CLOSE_TAG %token T_WHITESPACE %token T_START_HEREDOC %token T_END_HEREDOC %token T_DOLLAR_OPEN_CURLY_BRACES %token T_CURLY_OPEN %token T_PAAMAYIM_NEKUDOTAYIM %token T_NAMESPACE %token T_NS_C %token T_DIR %token T_NS_SEPARATOR %token T_ELLIPSIS PK!84__php-parser/grammar/php5.ynu[%pure_parser %expect 6 %tokens %% start: top_statement_list { $$ = $this->handleNamespaces($1); } ; top_statement_list_ex: top_statement_list_ex top_statement { pushNormalizing($1, $2); } | /* empty */ { init(); } ; top_statement_list: top_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; reserved_non_modifiers: T_INCLUDE | T_INCLUDE_ONCE | T_EVAL | T_REQUIRE | T_REQUIRE_ONCE | T_LOGICAL_OR | T_LOGICAL_XOR | T_LOGICAL_AND | T_INSTANCEOF | T_NEW | T_CLONE | T_EXIT | T_IF | T_ELSEIF | T_ELSE | T_ENDIF | T_ECHO | T_DO | T_WHILE | T_ENDWHILE | T_FOR | T_ENDFOR | T_FOREACH | T_ENDFOREACH | T_DECLARE | T_ENDDECLARE | T_AS | T_TRY | T_CATCH | T_FINALLY | T_THROW | T_USE | T_INSTEADOF | T_GLOBAL | T_VAR | T_UNSET | T_ISSET | T_EMPTY | T_CONTINUE | T_GOTO | T_FUNCTION | T_CONST | T_RETURN | T_PRINT | T_YIELD | T_LIST | T_SWITCH | T_ENDSWITCH | T_CASE | T_DEFAULT | T_BREAK | T_ARRAY | T_CALLABLE | T_EXTENDS | T_IMPLEMENTS | T_NAMESPACE | T_TRAIT | T_INTERFACE | T_CLASS | T_CLASS_C | T_TRAIT_C | T_FUNC_C | T_METHOD_C | T_LINE | T_FILE | T_DIR | T_NS_C | T_HALT_COMPILER | T_FN ; semi_reserved: reserved_non_modifiers | T_STATIC | T_ABSTRACT | T_FINAL | T_PRIVATE | T_PROTECTED | T_PUBLIC ; identifier_ex: T_STRING { $$ = Node\Identifier[$1]; } | semi_reserved { $$ = Node\Identifier[$1]; } ; identifier: T_STRING { $$ = Node\Identifier[$1]; } ; reserved_non_modifiers_identifier: reserved_non_modifiers { $$ = Node\Identifier[$1]; } ; namespace_name_parts: T_STRING { init($1); } | namespace_name_parts T_NS_SEPARATOR T_STRING { push($1, $3); } ; namespace_name: namespace_name_parts { $$ = Name[$1]; } ; plain_variable: T_VARIABLE { $$ = Expr\Variable[parseVar($1)]; } ; top_statement: statement { $$ = $1; } | function_declaration_statement { $$ = $1; } | class_declaration_statement { $$ = $1; } | T_HALT_COMPILER { $$ = Stmt\HaltCompiler[$this->lexer->handleHaltCompiler()]; } | T_NAMESPACE namespace_name ';' { $$ = Stmt\Namespace_[$2, null]; $$->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $this->checkNamespace($$); } | T_NAMESPACE namespace_name '{' top_statement_list '}' { $$ = Stmt\Namespace_[$2, $4]; $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($$); } | T_NAMESPACE '{' top_statement_list '}' { $$ = Stmt\Namespace_[null, $3]; $$->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($$); } | T_USE use_declarations ';' { $$ = Stmt\Use_[$2, Stmt\Use_::TYPE_NORMAL]; } | T_USE use_type use_declarations ';' { $$ = Stmt\Use_[$3, $2]; } | group_use_declaration ';' { $$ = $1; } | T_CONST constant_declaration_list ';' { $$ = Stmt\Const_[$2]; } ; use_type: T_FUNCTION { $$ = Stmt\Use_::TYPE_FUNCTION; } | T_CONST { $$ = Stmt\Use_::TYPE_CONSTANT; } ; /* Using namespace_name_parts here to avoid s/r conflict on T_NS_SEPARATOR */ group_use_declaration: T_USE use_type namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, $2]; } | T_USE use_type T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' unprefixed_use_declarations '}' { $$ = Stmt\GroupUse[new Name($4, stackAttributes(#4)), $7, $2]; } | T_USE namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' { $$ = Stmt\GroupUse[new Name($2, stackAttributes(#2)), $5, Stmt\Use_::TYPE_UNKNOWN]; } | T_USE T_NS_SEPARATOR namespace_name_parts T_NS_SEPARATOR '{' inline_use_declarations '}' { $$ = Stmt\GroupUse[new Name($3, stackAttributes(#3)), $6, Stmt\Use_::TYPE_UNKNOWN]; } ; unprefixed_use_declarations: unprefixed_use_declarations ',' unprefixed_use_declaration { push($1, $3); } | unprefixed_use_declaration { init($1); } ; use_declarations: use_declarations ',' use_declaration { push($1, $3); } | use_declaration { init($1); } ; inline_use_declarations: inline_use_declarations ',' inline_use_declaration { push($1, $3); } | inline_use_declaration { init($1); } ; unprefixed_use_declaration: namespace_name { $$ = Stmt\UseUse[$1, null, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #1); } | namespace_name T_AS identifier { $$ = Stmt\UseUse[$1, $3, Stmt\Use_::TYPE_UNKNOWN]; $this->checkUseUse($$, #3); } ; use_declaration: unprefixed_use_declaration { $$ = $1; } | T_NS_SEPARATOR unprefixed_use_declaration { $$ = $2; } ; inline_use_declaration: unprefixed_use_declaration { $$ = $1; $$->type = Stmt\Use_::TYPE_NORMAL; } | use_type unprefixed_use_declaration { $$ = $2; $$->type = $1; } ; constant_declaration_list: constant_declaration_list ',' constant_declaration { push($1, $3); } | constant_declaration { init($1); } ; constant_declaration: identifier '=' static_scalar { $$ = Node\Const_[$1, $3]; } ; class_const_list: class_const_list ',' class_const { push($1, $3); } | class_const { init($1); } ; class_const: identifier_ex '=' static_scalar { $$ = Node\Const_[$1, $3]; } ; inner_statement_list_ex: inner_statement_list_ex inner_statement { pushNormalizing($1, $2); } | /* empty */ { init(); } ; inner_statement_list: inner_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; inner_statement: statement { $$ = $1; } | function_declaration_statement { $$ = $1; } | class_declaration_statement { $$ = $1; } | T_HALT_COMPILER { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', attributes()); } ; non_empty_statement: '{' inner_statement_list '}' { if ($2) { $$ = $2; prependLeadingComments($$); } else { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); if (null === $$) { $$ = array(); } } } | T_IF parentheses_expr statement elseif_list else_single { $$ = Stmt\If_[$2, ['stmts' => toArray($3), 'elseifs' => $4, 'else' => $5]]; } | T_IF parentheses_expr ':' inner_statement_list new_elseif_list new_else_single T_ENDIF ';' { $$ = Stmt\If_[$2, ['stmts' => $4, 'elseifs' => $5, 'else' => $6]]; } | T_WHILE parentheses_expr while_statement { $$ = Stmt\While_[$2, $3]; } | T_DO statement T_WHILE parentheses_expr ';' { $$ = Stmt\Do_ [$4, toArray($2)]; } | T_FOR '(' for_expr ';' for_expr ';' for_expr ')' for_statement { $$ = Stmt\For_[['init' => $3, 'cond' => $5, 'loop' => $7, 'stmts' => $9]]; } | T_SWITCH parentheses_expr switch_case_list { $$ = Stmt\Switch_[$2, $3]; } | T_BREAK ';' { $$ = Stmt\Break_[null]; } | T_BREAK expr ';' { $$ = Stmt\Break_[$2]; } | T_CONTINUE ';' { $$ = Stmt\Continue_[null]; } | T_CONTINUE expr ';' { $$ = Stmt\Continue_[$2]; } | T_RETURN ';' { $$ = Stmt\Return_[null]; } | T_RETURN expr ';' { $$ = Stmt\Return_[$2]; } | T_GLOBAL global_var_list ';' { $$ = Stmt\Global_[$2]; } | T_STATIC static_var_list ';' { $$ = Stmt\Static_[$2]; } | T_ECHO expr_list ';' { $$ = Stmt\Echo_[$2]; } | T_INLINE_HTML { $$ = Stmt\InlineHTML[$1]; } | yield_expr ';' { $$ = Stmt\Expression[$1]; } | expr ';' { $$ = Stmt\Expression[$1]; } | T_UNSET '(' variables_list ')' ';' { $$ = Stmt\Unset_[$3]; } | T_FOREACH '(' expr T_AS foreach_variable ')' foreach_statement { $$ = Stmt\Foreach_[$3, $5[0], ['keyVar' => null, 'byRef' => $5[1], 'stmts' => $7]]; } | T_FOREACH '(' expr T_AS variable T_DOUBLE_ARROW foreach_variable ')' foreach_statement { $$ = Stmt\Foreach_[$3, $7[0], ['keyVar' => $5, 'byRef' => $7[1], 'stmts' => $9]]; } | T_DECLARE '(' declare_list ')' declare_statement { $$ = Stmt\Declare_[$3, $5]; } | T_TRY '{' inner_statement_list '}' catches optional_finally { $$ = Stmt\TryCatch[$3, $5, $6]; $this->checkTryCatch($$); } | T_THROW expr ';' { $$ = Stmt\Throw_[$2]; } | T_GOTO identifier ';' { $$ = Stmt\Goto_[$2]; } | identifier ':' { $$ = Stmt\Label[$1]; } | expr error { $$ = Stmt\Expression[$1]; } | error { $$ = array(); /* means: no statement */ } ; statement: non_empty_statement { $$ = $1; } | ';' { makeNop($$, $this->startAttributeStack[#1], $this->endAttributes); if ($$ === null) $$ = array(); /* means: no statement */ } ; catches: /* empty */ { init(); } | catches catch { push($1, $2); } ; catch: T_CATCH '(' name plain_variable ')' '{' inner_statement_list '}' { $$ = Stmt\Catch_[array($3), $4, $7]; } ; optional_finally: /* empty */ { $$ = null; } | T_FINALLY '{' inner_statement_list '}' { $$ = Stmt\Finally_[$3]; } ; variables_list: variable { init($1); } | variables_list ',' variable { push($1, $3); } ; optional_ref: /* empty */ { $$ = false; } | '&' { $$ = true; } ; optional_ellipsis: /* empty */ { $$ = false; } | T_ELLIPSIS { $$ = true; } ; function_declaration_statement: T_FUNCTION optional_ref identifier '(' parameter_list ')' optional_return_type '{' inner_statement_list '}' { $$ = Stmt\Function_[$3, ['byRef' => $2, 'params' => $5, 'returnType' => $7, 'stmts' => $9]]; } ; class_declaration_statement: class_entry_type identifier extends_from implements_list '{' class_statement_list '}' { $$ = Stmt\Class_[$2, ['type' => $1, 'extends' => $3, 'implements' => $4, 'stmts' => $6]]; $this->checkClass($$, #2); } | T_INTERFACE identifier interface_extends_list '{' class_statement_list '}' { $$ = Stmt\Interface_[$2, ['extends' => $3, 'stmts' => $5]]; $this->checkInterface($$, #2); } | T_TRAIT identifier '{' class_statement_list '}' { $$ = Stmt\Trait_[$2, ['stmts' => $4]]; } ; class_entry_type: T_CLASS { $$ = 0; } | T_ABSTRACT T_CLASS { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } | T_FINAL T_CLASS { $$ = Stmt\Class_::MODIFIER_FINAL; } ; extends_from: /* empty */ { $$ = null; } | T_EXTENDS class_name { $$ = $2; } ; interface_extends_list: /* empty */ { $$ = array(); } | T_EXTENDS class_name_list { $$ = $2; } ; implements_list: /* empty */ { $$ = array(); } | T_IMPLEMENTS class_name_list { $$ = $2; } ; class_name_list: class_name { init($1); } | class_name_list ',' class_name { push($1, $3); } ; for_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDFOR ';' { $$ = $2; } ; foreach_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDFOREACH ';' { $$ = $2; } ; declare_statement: non_empty_statement { $$ = toArray($1); } | ';' { $$ = null; } | ':' inner_statement_list T_ENDDECLARE ';' { $$ = $2; } ; declare_list: declare_list_element { init($1); } | declare_list ',' declare_list_element { push($1, $3); } ; declare_list_element: identifier '=' static_scalar { $$ = Stmt\DeclareDeclare[$1, $3]; } ; switch_case_list: '{' case_list '}' { $$ = $2; } | '{' ';' case_list '}' { $$ = $3; } | ':' case_list T_ENDSWITCH ';' { $$ = $2; } | ':' ';' case_list T_ENDSWITCH ';' { $$ = $3; } ; case_list: /* empty */ { init(); } | case_list case { push($1, $2); } ; case: T_CASE expr case_separator inner_statement_list_ex { $$ = Stmt\Case_[$2, $4]; } | T_DEFAULT case_separator inner_statement_list_ex { $$ = Stmt\Case_[null, $3]; } ; case_separator: ':' | ';' ; while_statement: statement { $$ = toArray($1); } | ':' inner_statement_list T_ENDWHILE ';' { $$ = $2; } ; elseif_list: /* empty */ { init(); } | elseif_list elseif { push($1, $2); } ; elseif: T_ELSEIF parentheses_expr statement { $$ = Stmt\ElseIf_[$2, toArray($3)]; } ; new_elseif_list: /* empty */ { init(); } | new_elseif_list new_elseif { push($1, $2); } ; new_elseif: T_ELSEIF parentheses_expr ':' inner_statement_list { $$ = Stmt\ElseIf_[$2, $4]; } ; else_single: /* empty */ { $$ = null; } | T_ELSE statement { $$ = Stmt\Else_[toArray($2)]; } ; new_else_single: /* empty */ { $$ = null; } | T_ELSE ':' inner_statement_list { $$ = Stmt\Else_[$3]; } ; foreach_variable: variable { $$ = array($1, false); } | '&' variable { $$ = array($2, true); } | list_expr { $$ = array($1, false); } ; parameter_list: non_empty_parameter_list { $$ = $1; } | /* empty */ { $$ = array(); } ; non_empty_parameter_list: parameter { init($1); } | non_empty_parameter_list ',' parameter { push($1, $3); } ; parameter: optional_param_type optional_ref optional_ellipsis plain_variable { $$ = Node\Param[$4, null, $1, $2, $3]; $this->checkParam($$); } | optional_param_type optional_ref optional_ellipsis plain_variable '=' static_scalar { $$ = Node\Param[$4, $6, $1, $2, $3]; $this->checkParam($$); } ; type: name { $$ = $1; } | T_ARRAY { $$ = Node\Identifier['array']; } | T_CALLABLE { $$ = Node\Identifier['callable']; } ; optional_param_type: /* empty */ { $$ = null; } | type { $$ = $1; } ; optional_return_type: /* empty */ { $$ = null; } | ':' type { $$ = $2; } ; argument_list: '(' ')' { $$ = array(); } | '(' non_empty_argument_list ')' { $$ = $2; } | '(' yield_expr ')' { $$ = array(Node\Arg[$2, false, false]); } ; non_empty_argument_list: argument { init($1); } | non_empty_argument_list ',' argument { push($1, $3); } ; argument: expr { $$ = Node\Arg[$1, false, false]; } | '&' variable { $$ = Node\Arg[$2, true, false]; } | T_ELLIPSIS expr { $$ = Node\Arg[$2, false, true]; } ; global_var_list: global_var_list ',' global_var { push($1, $3); } | global_var { init($1); } ; global_var: plain_variable { $$ = $1; } | '$' variable { $$ = Expr\Variable[$2]; } | '$' '{' expr '}' { $$ = Expr\Variable[$3]; } ; static_var_list: static_var_list ',' static_var { push($1, $3); } | static_var { init($1); } ; static_var: plain_variable { $$ = Stmt\StaticVar[$1, null]; } | plain_variable '=' static_scalar { $$ = Stmt\StaticVar[$1, $3]; } ; class_statement_list_ex: class_statement_list_ex class_statement { if ($2 !== null) { push($1, $2); } } | /* empty */ { init(); } ; class_statement_list: class_statement_list_ex { makeZeroLengthNop($nop, $this->lookaheadStartAttributes); if ($nop !== null) { $1[] = $nop; } $$ = $1; } ; class_statement: variable_modifiers property_declaration_list ';' { $$ = Stmt\Property[$1, $2]; $this->checkProperty($$, #1); } | T_CONST class_const_list ';' { $$ = Stmt\ClassConst[$2, 0]; } | method_modifiers T_FUNCTION optional_ref identifier_ex '(' parameter_list ')' optional_return_type method_body { $$ = Stmt\ClassMethod[$4, ['type' => $1, 'byRef' => $3, 'params' => $6, 'returnType' => $8, 'stmts' => $9]]; $this->checkClassMethod($$, #1); } | T_USE class_name_list trait_adaptations { $$ = Stmt\TraitUse[$2, $3]; } ; trait_adaptations: ';' { $$ = array(); } | '{' trait_adaptation_list '}' { $$ = $2; } ; trait_adaptation_list: /* empty */ { init(); } | trait_adaptation_list trait_adaptation { push($1, $2); } ; trait_adaptation: trait_method_reference_fully_qualified T_INSTEADOF class_name_list ';' { $$ = Stmt\TraitUseAdaptation\Precedence[$1[0], $1[1], $3]; } | trait_method_reference T_AS member_modifier identifier_ex ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, $4]; } | trait_method_reference T_AS member_modifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], $3, null]; } | trait_method_reference T_AS identifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } | trait_method_reference T_AS reserved_non_modifiers_identifier ';' { $$ = Stmt\TraitUseAdaptation\Alias[$1[0], $1[1], null, $3]; } ; trait_method_reference_fully_qualified: name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = array($1, $3); } ; trait_method_reference: trait_method_reference_fully_qualified { $$ = $1; } | identifier_ex { $$ = array(null, $1); } ; method_body: ';' /* abstract method */ { $$ = null; } | '{' inner_statement_list '}' { $$ = $2; } ; variable_modifiers: non_empty_member_modifiers { $$ = $1; } | T_VAR { $$ = 0; } ; method_modifiers: /* empty */ { $$ = 0; } | non_empty_member_modifiers { $$ = $1; } ; non_empty_member_modifiers: member_modifier { $$ = $1; } | non_empty_member_modifiers member_modifier { $this->checkModifier($1, $2, #2); $$ = $1 | $2; } ; member_modifier: T_PUBLIC { $$ = Stmt\Class_::MODIFIER_PUBLIC; } | T_PROTECTED { $$ = Stmt\Class_::MODIFIER_PROTECTED; } | T_PRIVATE { $$ = Stmt\Class_::MODIFIER_PRIVATE; } | T_STATIC { $$ = Stmt\Class_::MODIFIER_STATIC; } | T_ABSTRACT { $$ = Stmt\Class_::MODIFIER_ABSTRACT; } | T_FINAL { $$ = Stmt\Class_::MODIFIER_FINAL; } ; property_declaration_list: property_declaration { init($1); } | property_declaration_list ',' property_declaration { push($1, $3); } ; property_decl_name: T_VARIABLE { $$ = Node\VarLikeIdentifier[parseVar($1)]; } ; property_declaration: property_decl_name { $$ = Stmt\PropertyProperty[$1, null]; } | property_decl_name '=' static_scalar { $$ = Stmt\PropertyProperty[$1, $3]; } ; expr_list: expr_list ',' expr { push($1, $3); } | expr { init($1); } ; for_expr: /* empty */ { $$ = array(); } | expr_list { $$ = $1; } ; expr: variable { $$ = $1; } | list_expr '=' expr { $$ = Expr\Assign[$1, $3]; } | variable '=' expr { $$ = Expr\Assign[$1, $3]; } | variable '=' '&' variable { $$ = Expr\AssignRef[$1, $4]; } | variable '=' '&' new_expr { $$ = Expr\AssignRef[$1, $4]; } | new_expr { $$ = $1; } | T_CLONE expr { $$ = Expr\Clone_[$2]; } | variable T_PLUS_EQUAL expr { $$ = Expr\AssignOp\Plus [$1, $3]; } | variable T_MINUS_EQUAL expr { $$ = Expr\AssignOp\Minus [$1, $3]; } | variable T_MUL_EQUAL expr { $$ = Expr\AssignOp\Mul [$1, $3]; } | variable T_DIV_EQUAL expr { $$ = Expr\AssignOp\Div [$1, $3]; } | variable T_CONCAT_EQUAL expr { $$ = Expr\AssignOp\Concat [$1, $3]; } | variable T_MOD_EQUAL expr { $$ = Expr\AssignOp\Mod [$1, $3]; } | variable T_AND_EQUAL expr { $$ = Expr\AssignOp\BitwiseAnd[$1, $3]; } | variable T_OR_EQUAL expr { $$ = Expr\AssignOp\BitwiseOr [$1, $3]; } | variable T_XOR_EQUAL expr { $$ = Expr\AssignOp\BitwiseXor[$1, $3]; } | variable T_SL_EQUAL expr { $$ = Expr\AssignOp\ShiftLeft [$1, $3]; } | variable T_SR_EQUAL expr { $$ = Expr\AssignOp\ShiftRight[$1, $3]; } | variable T_POW_EQUAL expr { $$ = Expr\AssignOp\Pow [$1, $3]; } | variable T_COALESCE_EQUAL expr { $$ = Expr\AssignOp\Coalesce [$1, $3]; } | variable T_INC { $$ = Expr\PostInc[$1]; } | T_INC variable { $$ = Expr\PreInc [$2]; } | variable T_DEC { $$ = Expr\PostDec[$1]; } | T_DEC variable { $$ = Expr\PreDec [$2]; } | expr T_BOOLEAN_OR expr { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } | expr T_BOOLEAN_AND expr { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } | expr T_LOGICAL_OR expr { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } | expr T_LOGICAL_AND expr { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } | expr T_LOGICAL_XOR expr { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } | expr '|' expr { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } | expr '&' expr { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } | expr '^' expr { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } | expr '.' expr { $$ = Expr\BinaryOp\Concat [$1, $3]; } | expr '+' expr { $$ = Expr\BinaryOp\Plus [$1, $3]; } | expr '-' expr { $$ = Expr\BinaryOp\Minus [$1, $3]; } | expr '*' expr { $$ = Expr\BinaryOp\Mul [$1, $3]; } | expr '/' expr { $$ = Expr\BinaryOp\Div [$1, $3]; } | expr '%' expr { $$ = Expr\BinaryOp\Mod [$1, $3]; } | expr T_SL expr { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } | expr T_SR expr { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } | expr T_POW expr { $$ = Expr\BinaryOp\Pow [$1, $3]; } | '+' expr %prec T_INC { $$ = Expr\UnaryPlus [$2]; } | '-' expr %prec T_INC { $$ = Expr\UnaryMinus[$2]; } | '!' expr { $$ = Expr\BooleanNot[$2]; } | '~' expr { $$ = Expr\BitwiseNot[$2]; } | expr T_IS_IDENTICAL expr { $$ = Expr\BinaryOp\Identical [$1, $3]; } | expr T_IS_NOT_IDENTICAL expr { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } | expr T_IS_EQUAL expr { $$ = Expr\BinaryOp\Equal [$1, $3]; } | expr T_IS_NOT_EQUAL expr { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } | expr T_SPACESHIP expr { $$ = Expr\BinaryOp\Spaceship [$1, $3]; } | expr '<' expr { $$ = Expr\BinaryOp\Smaller [$1, $3]; } | expr T_IS_SMALLER_OR_EQUAL expr { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } | expr '>' expr { $$ = Expr\BinaryOp\Greater [$1, $3]; } | expr T_IS_GREATER_OR_EQUAL expr { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } | expr T_INSTANCEOF class_name_reference { $$ = Expr\Instanceof_[$1, $3]; } | parentheses_expr { $$ = $1; } /* we need a separate '(' new_expr ')' rule to avoid problems caused by a s/r conflict */ | '(' new_expr ')' { $$ = $2; } | expr '?' expr ':' expr { $$ = Expr\Ternary[$1, $3, $5]; } | expr '?' ':' expr { $$ = Expr\Ternary[$1, null, $4]; } | expr T_COALESCE expr { $$ = Expr\BinaryOp\Coalesce[$1, $3]; } | T_ISSET '(' variables_list ')' { $$ = Expr\Isset_[$3]; } | T_EMPTY '(' expr ')' { $$ = Expr\Empty_[$3]; } | T_INCLUDE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE]; } | T_INCLUDE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_INCLUDE_ONCE]; } | T_EVAL parentheses_expr { $$ = Expr\Eval_[$2]; } | T_REQUIRE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE]; } | T_REQUIRE_ONCE expr { $$ = Expr\Include_[$2, Expr\Include_::TYPE_REQUIRE_ONCE]; } | T_INT_CAST expr { $$ = Expr\Cast\Int_ [$2]; } | T_DOUBLE_CAST expr { $attrs = attributes(); $attrs['kind'] = $this->getFloatCastKind($1); $$ = new Expr\Cast\Double($2, $attrs); } | T_STRING_CAST expr { $$ = Expr\Cast\String_ [$2]; } | T_ARRAY_CAST expr { $$ = Expr\Cast\Array_ [$2]; } | T_OBJECT_CAST expr { $$ = Expr\Cast\Object_ [$2]; } | T_BOOL_CAST expr { $$ = Expr\Cast\Bool_ [$2]; } | T_UNSET_CAST expr { $$ = Expr\Cast\Unset_ [$2]; } | T_EXIT exit_expr { $attrs = attributes(); $attrs['kind'] = strtolower($1) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; $$ = new Expr\Exit_($2, $attrs); } | '@' expr { $$ = Expr\ErrorSuppress[$2]; } | scalar { $$ = $1; } | array_expr { $$ = $1; } | scalar_dereference { $$ = $1; } | '`' backticks_expr '`' { $$ = Expr\ShellExec[$2]; } | T_PRINT expr { $$ = Expr\Print_[$2]; } | T_YIELD { $$ = Expr\Yield_[null, null]; } | T_YIELD_FROM expr { $$ = Expr\YieldFrom[$2]; } | T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type '{' inner_statement_list '}' { $$ = Expr\Closure[['static' => false, 'byRef' => $2, 'params' => $4, 'uses' => $6, 'returnType' => $7, 'stmts' => $9]]; } | T_STATIC T_FUNCTION optional_ref '(' parameter_list ')' lexical_vars optional_return_type '{' inner_statement_list '}' { $$ = Expr\Closure[['static' => true, 'byRef' => $3, 'params' => $5, 'uses' => $7, 'returnType' => $8, 'stmts' => $10]]; } ; parentheses_expr: '(' expr ')' { $$ = $2; } | '(' yield_expr ')' { $$ = $2; } ; yield_expr: T_YIELD expr { $$ = Expr\Yield_[$2, null]; } | T_YIELD expr T_DOUBLE_ARROW expr { $$ = Expr\Yield_[$4, $2]; } ; array_expr: T_ARRAY '(' array_pair_list ')' { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_LONG; $$ = new Expr\Array_($3, $attrs); } | '[' array_pair_list ']' { $attrs = attributes(); $attrs['kind'] = Expr\Array_::KIND_SHORT; $$ = new Expr\Array_($2, $attrs); } ; scalar_dereference: array_expr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | T_CONSTANT_ENCAPSED_STRING '[' dim_offset ']' { $attrs = attributes(); $attrs['kind'] = strKind($1); $$ = Expr\ArrayDimFetch[new Scalar\String_(Scalar\String_::parse($1), $attrs), $3]; } | constant '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | scalar_dereference '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } /* alternative array syntax missing intentionally */ ; anonymous_class: T_CLASS ctor_arguments extends_from implements_list '{' class_statement_list '}' { $$ = array(Stmt\Class_[null, ['type' => 0, 'extends' => $3, 'implements' => $4, 'stmts' => $6]], $2); $this->checkClass($$[0], -1); } ; new_expr: T_NEW class_name_reference ctor_arguments { $$ = Expr\New_[$2, $3]; } | T_NEW anonymous_class { list($class, $ctorArgs) = $2; $$ = Expr\New_[$class, $ctorArgs]; } ; lexical_vars: /* empty */ { $$ = array(); } | T_USE '(' lexical_var_list ')' { $$ = $3; } ; lexical_var_list: lexical_var { init($1); } | lexical_var_list ',' lexical_var { push($1, $3); } ; lexical_var: optional_ref plain_variable { $$ = Expr\ClosureUse[$2, $1]; } ; function_call: name argument_list { $$ = Expr\FuncCall[$1, $2]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex argument_list { $$ = Expr\StaticCall[$1, $3, $4]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '{' expr '}' argument_list { $$ = Expr\StaticCall[$1, $4, $6]; } | static_property argument_list { $$ = $this->fixupPhp5StaticPropCall($1, $2, attributes()); } | variable_without_objects argument_list { $$ = Expr\FuncCall[$1, $2]; } | function_call '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } /* alternative array syntax missing intentionally */ ; class_name: T_STATIC { $$ = Name[$1]; } | name { $$ = $1; } ; name: namespace_name_parts { $$ = Name[$1]; } | T_NS_SEPARATOR namespace_name_parts { $$ = Name\FullyQualified[$2]; } | T_NAMESPACE T_NS_SEPARATOR namespace_name_parts { $$ = Name\Relative[$3]; } ; class_name_reference: class_name { $$ = $1; } | dynamic_class_name_reference { $$ = $1; } ; dynamic_class_name_reference: object_access_for_dcnr { $$ = $1; } | base_variable { $$ = $1; } ; class_name_or_var: class_name { $$ = $1; } | reference_variable { $$ = $1; } ; object_access_for_dcnr: base_variable T_OBJECT_OPERATOR object_property { $$ = Expr\PropertyFetch[$1, $3]; } | object_access_for_dcnr T_OBJECT_OPERATOR object_property { $$ = Expr\PropertyFetch[$1, $3]; } | object_access_for_dcnr '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | object_access_for_dcnr '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } ; exit_expr: /* empty */ { $$ = null; } | '(' ')' { $$ = null; } | parentheses_expr { $$ = $1; } ; backticks_expr: /* empty */ { $$ = array(); } | T_ENCAPSED_AND_WHITESPACE { $$ = array(Scalar\EncapsedStringPart[Scalar\String_::parseEscapeSequences($1, '`', false)]); } | encaps_list { parseEncapsed($1, '`', false); $$ = $1; } ; ctor_arguments: /* empty */ { $$ = array(); } | argument_list { $$ = $1; } ; common_scalar: T_LNUMBER { $$ = $this->parseLNumber($1, attributes(), true); } | T_DNUMBER { $$ = Scalar\DNumber[Scalar\DNumber::parse($1)]; } | T_CONSTANT_ENCAPSED_STRING { $attrs = attributes(); $attrs['kind'] = strKind($1); $$ = new Scalar\String_(Scalar\String_::parse($1, false), $attrs); } | T_LINE { $$ = Scalar\MagicConst\Line[]; } | T_FILE { $$ = Scalar\MagicConst\File[]; } | T_DIR { $$ = Scalar\MagicConst\Dir[]; } | T_CLASS_C { $$ = Scalar\MagicConst\Class_[]; } | T_TRAIT_C { $$ = Scalar\MagicConst\Trait_[]; } | T_METHOD_C { $$ = Scalar\MagicConst\Method[]; } | T_FUNC_C { $$ = Scalar\MagicConst\Function_[]; } | T_NS_C { $$ = Scalar\MagicConst\Namespace_[]; } | T_START_HEREDOC T_ENCAPSED_AND_WHITESPACE T_END_HEREDOC { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), false); } | T_START_HEREDOC T_END_HEREDOC { $$ = $this->parseDocString($1, '', $2, attributes(), stackAttributes(#2), false); } ; static_scalar: common_scalar { $$ = $1; } | class_name T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = Expr\ClassConstFetch[$1, $3]; } | name { $$ = Expr\ConstFetch[$1]; } | T_ARRAY '(' static_array_pair_list ')' { $$ = Expr\Array_[$3]; } | '[' static_array_pair_list ']' { $$ = Expr\Array_[$2]; } | static_operation { $$ = $1; } ; static_operation: static_scalar T_BOOLEAN_OR static_scalar { $$ = Expr\BinaryOp\BooleanOr [$1, $3]; } | static_scalar T_BOOLEAN_AND static_scalar { $$ = Expr\BinaryOp\BooleanAnd[$1, $3]; } | static_scalar T_LOGICAL_OR static_scalar { $$ = Expr\BinaryOp\LogicalOr [$1, $3]; } | static_scalar T_LOGICAL_AND static_scalar { $$ = Expr\BinaryOp\LogicalAnd[$1, $3]; } | static_scalar T_LOGICAL_XOR static_scalar { $$ = Expr\BinaryOp\LogicalXor[$1, $3]; } | static_scalar '|' static_scalar { $$ = Expr\BinaryOp\BitwiseOr [$1, $3]; } | static_scalar '&' static_scalar { $$ = Expr\BinaryOp\BitwiseAnd[$1, $3]; } | static_scalar '^' static_scalar { $$ = Expr\BinaryOp\BitwiseXor[$1, $3]; } | static_scalar '.' static_scalar { $$ = Expr\BinaryOp\Concat [$1, $3]; } | static_scalar '+' static_scalar { $$ = Expr\BinaryOp\Plus [$1, $3]; } | static_scalar '-' static_scalar { $$ = Expr\BinaryOp\Minus [$1, $3]; } | static_scalar '*' static_scalar { $$ = Expr\BinaryOp\Mul [$1, $3]; } | static_scalar '/' static_scalar { $$ = Expr\BinaryOp\Div [$1, $3]; } | static_scalar '%' static_scalar { $$ = Expr\BinaryOp\Mod [$1, $3]; } | static_scalar T_SL static_scalar { $$ = Expr\BinaryOp\ShiftLeft [$1, $3]; } | static_scalar T_SR static_scalar { $$ = Expr\BinaryOp\ShiftRight[$1, $3]; } | static_scalar T_POW static_scalar { $$ = Expr\BinaryOp\Pow [$1, $3]; } | '+' static_scalar %prec T_INC { $$ = Expr\UnaryPlus [$2]; } | '-' static_scalar %prec T_INC { $$ = Expr\UnaryMinus[$2]; } | '!' static_scalar { $$ = Expr\BooleanNot[$2]; } | '~' static_scalar { $$ = Expr\BitwiseNot[$2]; } | static_scalar T_IS_IDENTICAL static_scalar { $$ = Expr\BinaryOp\Identical [$1, $3]; } | static_scalar T_IS_NOT_IDENTICAL static_scalar { $$ = Expr\BinaryOp\NotIdentical [$1, $3]; } | static_scalar T_IS_EQUAL static_scalar { $$ = Expr\BinaryOp\Equal [$1, $3]; } | static_scalar T_IS_NOT_EQUAL static_scalar { $$ = Expr\BinaryOp\NotEqual [$1, $3]; } | static_scalar '<' static_scalar { $$ = Expr\BinaryOp\Smaller [$1, $3]; } | static_scalar T_IS_SMALLER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\SmallerOrEqual[$1, $3]; } | static_scalar '>' static_scalar { $$ = Expr\BinaryOp\Greater [$1, $3]; } | static_scalar T_IS_GREATER_OR_EQUAL static_scalar { $$ = Expr\BinaryOp\GreaterOrEqual[$1, $3]; } | static_scalar '?' static_scalar ':' static_scalar { $$ = Expr\Ternary[$1, $3, $5]; } | static_scalar '?' ':' static_scalar { $$ = Expr\Ternary[$1, null, $4]; } | static_scalar '[' static_scalar ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | '(' static_scalar ')' { $$ = $2; } ; constant: name { $$ = Expr\ConstFetch[$1]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM identifier_ex { $$ = Expr\ClassConstFetch[$1, $3]; } ; scalar: common_scalar { $$ = $1; } | constant { $$ = $1; } | '"' encaps_list '"' { $attrs = attributes(); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; parseEncapsed($2, '"', true); $$ = new Scalar\Encapsed($2, $attrs); } | T_START_HEREDOC encaps_list T_END_HEREDOC { $$ = $this->parseDocString($1, $2, $3, attributes(), stackAttributes(#3), true); } ; static_array_pair_list: /* empty */ { $$ = array(); } | non_empty_static_array_pair_list optional_comma { $$ = $1; } ; optional_comma: /* empty */ | ',' ; non_empty_static_array_pair_list: non_empty_static_array_pair_list ',' static_array_pair { push($1, $3); } | static_array_pair { init($1); } ; static_array_pair: static_scalar T_DOUBLE_ARROW static_scalar { $$ = Expr\ArrayItem[$3, $1, false]; } | static_scalar { $$ = Expr\ArrayItem[$1, null, false]; } ; variable: object_access { $$ = $1; } | base_variable { $$ = $1; } | function_call { $$ = $1; } | new_expr_array_deref { $$ = $1; } ; new_expr_array_deref: '(' new_expr ')' '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$2, $5]; } | new_expr_array_deref '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } /* alternative array syntax missing intentionally */ ; object_access: variable_or_new_expr T_OBJECT_OPERATOR object_property { $$ = Expr\PropertyFetch[$1, $3]; } | variable_or_new_expr T_OBJECT_OPERATOR object_property argument_list { $$ = Expr\MethodCall[$1, $3, $4]; } | object_access argument_list { $$ = Expr\FuncCall[$1, $2]; } | object_access '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | object_access '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } ; variable_or_new_expr: variable { $$ = $1; } | '(' new_expr ')' { $$ = $2; } ; variable_without_objects: reference_variable { $$ = $1; } | '$' variable_without_objects { $$ = Expr\Variable[$2]; } ; base_variable: variable_without_objects { $$ = $1; } | static_property { $$ = $1; } ; static_property: class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' reference_variable { $$ = Expr\StaticPropertyFetch[$1, $4]; } | static_property_with_arrays { $$ = $1; } ; static_property_simple_name: T_VARIABLE { $var = parseVar($1); $$ = \is_string($var) ? Node\VarLikeIdentifier[$var] : $var; } ; static_property_with_arrays: class_name_or_var T_PAAMAYIM_NEKUDOTAYIM static_property_simple_name { $$ = Expr\StaticPropertyFetch[$1, $3]; } | class_name_or_var T_PAAMAYIM_NEKUDOTAYIM '$' '{' expr '}' { $$ = Expr\StaticPropertyFetch[$1, $5]; } | static_property_with_arrays '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | static_property_with_arrays '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } ; reference_variable: reference_variable '[' dim_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | reference_variable '{' expr '}' { $$ = Expr\ArrayDimFetch[$1, $3]; } | plain_variable { $$ = $1; } | '$' '{' expr '}' { $$ = Expr\Variable[$3]; } ; dim_offset: /* empty */ { $$ = null; } | expr { $$ = $1; } ; object_property: identifier { $$ = $1; } | '{' expr '}' { $$ = $2; } | variable_without_objects { $$ = $1; } | error { $$ = Expr\Error[]; $this->errorState = 2; } ; list_expr: T_LIST '(' list_expr_elements ')' { $$ = Expr\List_[$3]; } ; list_expr_elements: list_expr_elements ',' list_expr_element { push($1, $3); } | list_expr_element { init($1); } ; list_expr_element: variable { $$ = Expr\ArrayItem[$1, null, false]; } | list_expr { $$ = Expr\ArrayItem[$1, null, false]; } | /* empty */ { $$ = null; } ; array_pair_list: /* empty */ { $$ = array(); } | non_empty_array_pair_list optional_comma { $$ = $1; } ; non_empty_array_pair_list: non_empty_array_pair_list ',' array_pair { push($1, $3); } | array_pair { init($1); } ; array_pair: expr T_DOUBLE_ARROW expr { $$ = Expr\ArrayItem[$3, $1, false]; } | expr { $$ = Expr\ArrayItem[$1, null, false]; } | expr T_DOUBLE_ARROW '&' variable { $$ = Expr\ArrayItem[$4, $1, true]; } | '&' variable { $$ = Expr\ArrayItem[$2, null, true]; } | T_ELLIPSIS expr { $$ = Expr\ArrayItem[$2, null, false, attributes(), true]; } ; encaps_list: encaps_list encaps_var { push($1, $2); } | encaps_list encaps_string_part { push($1, $2); } | encaps_var { init($1); } | encaps_string_part encaps_var { init($1, $2); } ; encaps_string_part: T_ENCAPSED_AND_WHITESPACE { $$ = Scalar\EncapsedStringPart[$1]; } ; encaps_str_varname: T_STRING_VARNAME { $$ = Expr\Variable[$1]; } ; encaps_var: plain_variable { $$ = $1; } | plain_variable '[' encaps_var_offset ']' { $$ = Expr\ArrayDimFetch[$1, $3]; } | plain_variable T_OBJECT_OPERATOR identifier { $$ = Expr\PropertyFetch[$1, $3]; } | T_DOLLAR_OPEN_CURLY_BRACES expr '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES T_STRING_VARNAME '}' { $$ = Expr\Variable[$2]; } | T_DOLLAR_OPEN_CURLY_BRACES encaps_str_varname '[' expr ']' '}' { $$ = Expr\ArrayDimFetch[$2, $4]; } | T_CURLY_OPEN variable '}' { $$ = $2; } ; encaps_var_offset: T_STRING { $$ = Scalar\String_[$1]; } | T_NUM_STRING { $$ = $this->parseNumString($1, attributes()); } | plain_variable { $$ = $1; } ; %% PK!=5php-parser/README.mdnu[PHP Parser ========== [![Coverage Status](https://coveralls.io/repos/github/nikic/PHP-Parser/badge.svg?branch=master)](https://coveralls.io/github/nikic/PHP-Parser?branch=master) This is a PHP 5.2 to PHP 8.2 parser written in PHP. Its purpose is to simplify static code analysis and manipulation. [**Documentation for version 4.x**][doc_4_x] (stable; for running on PHP >= 7.1; for parsing PHP 5.2 to PHP 8.2). [Documentation for version 3.x][doc_3_x] (unsupported; for running on PHP >= 5.5; for parsing PHP 5.2 to PHP 7.2). Features -------- The main features provided by this library are: * Parsing PHP 5, PHP 7, and PHP 8 code into an abstract syntax tree (AST). * Invalid code can be parsed into a partial AST. * The AST contains accurate location information. * Dumping the AST in human-readable form. * Converting an AST back to PHP code. * Experimental: Formatting can be preserved for partially changed ASTs. * Infrastructure to traverse and modify ASTs. * Resolution of namespaced names. * Evaluation of constant expressions. * Builders to simplify AST construction for code generation. * Converting an AST into JSON and back. Quick Start ----------- Install the library using [composer](https://getcomposer.org): php composer.phar require nikic/php-parser Parse some PHP code into an AST and dump the result in human-readable form: ```php create(ParserFactory::PREFER_PHP7); try { $ast = $parser->parse($code); } catch (Error $error) { echo "Parse error: {$error->getMessage()}\n"; return; } $dumper = new NodeDumper; echo $dumper->dump($ast) . "\n"; ``` This dumps an AST looking something like this: ``` array( 0: Stmt_Function( byRef: false name: Identifier( name: test ) params: array( 0: Param( type: null byRef: false variadic: false var: Expr_Variable( name: foo ) default: null ) ) returnType: null stmts: array( 0: Stmt_Expression( expr: Expr_FuncCall( name: Name( parts: array( 0: var_dump ) ) args: array( 0: Arg( value: Expr_Variable( name: foo ) byRef: false unpack: false ) ) ) ) ) ) ) ``` Let's traverse the AST and perform some kind of modification. For example, drop all function bodies: ```php use PhpParser\Node; use PhpParser\Node\Stmt\Function_; use PhpParser\NodeTraverser; use PhpParser\NodeVisitorAbstract; $traverser = new NodeTraverser(); $traverser->addVisitor(new class extends NodeVisitorAbstract { public function enterNode(Node $node) { if ($node instanceof Function_) { // Clean out the function body $node->stmts = []; } } }); $ast = $traverser->traverse($ast); echo $dumper->dump($ast) . "\n"; ``` This gives us an AST where the `Function_::$stmts` are empty: ``` array( 0: Stmt_Function( byRef: false name: Identifier( name: test ) params: array( 0: Param( type: null byRef: false variadic: false var: Expr_Variable( name: foo ) default: null ) ) returnType: null stmts: array( ) ) ) ``` Finally, we can convert the new AST back to PHP code: ```php use PhpParser\PrettyPrinter; $prettyPrinter = new PrettyPrinter\Standard; echo $prettyPrinter->prettyPrintFile($ast); ``` This gives us our original code, minus the `var_dump()` call inside the function: ```php =7.1", "ext-tokenizer": "*" }, "require-dev": { "phpunit\/phpunit": "^7.0 || ^8.0 || ^9.0", "ircmaxell\/php-yacc": "^0.0.7" }, "extra": { "branch-alias": { "dev-master": "4.9-dev" } }, "autoload": { "psr-4": { "PhpParser\\": "lib\/PhpParser" } }, "autoload-dev": { "psr-4": { "PhpParser\\": "test\/PhpParser\/" } }, "bin": [ "bin\/php-parse" ] }PK!yphp-parser/bin/php-parsenuȯ#!/usr/bin/env php ['startLine', 'endLine', 'startFilePos', 'endFilePos', 'comments']]); $parser = (new \PhpParser\ParserFactory())->create(\PhpParser\ParserFactory::PREFER_PHP7, $lexer); $dumper = new \PhpParser\NodeDumper(['dumpComments' => \true, 'dumpPositions' => $attributes['with-positions']]); $prettyPrinter = new \PhpParser\PrettyPrinter\Standard(); $traverser = new \PhpParser\NodeTraverser(); $traverser->addVisitor(new \PhpParser\NodeVisitor\NameResolver()); foreach ($files as $file) { if (\strpos($file, ' Code {$code}\n"); } else { if (!\file_exists($file)) { \fwrite(\STDERR, "File {$file} does not exist.\n"); exit(1); } $code = \file_get_contents($file); \fwrite(\STDERR, "====> File {$file}:\n"); } if ($attributes['with-recovery']) { $errorHandler = new \PhpParser\ErrorHandler\Collecting(); $stmts = $parser->parse($code, $errorHandler); foreach ($errorHandler->getErrors() as $error) { $message = formatErrorMessage($error, $code, $attributes['with-column-info']); \fwrite(\STDERR, $message . "\n"); } if (null === $stmts) { continue; } } else { try { $stmts = $parser->parse($code); } catch (\PhpParser\Error $error) { $message = formatErrorMessage($error, $code, $attributes['with-column-info']); \fwrite(\STDERR, $message . "\n"); exit(1); } } foreach ($operations as $operation) { if ('dump' === $operation) { \fwrite(\STDERR, "==> Node dump:\n"); echo $dumper->dump($stmts, $code), "\n"; } elseif ('pretty-print' === $operation) { \fwrite(\STDERR, "==> Pretty print:\n"); echo $prettyPrinter->prettyPrintFile($stmts), "\n"; } elseif ('json-dump' === $operation) { \fwrite(\STDERR, "==> JSON dump:\n"); echo \json_encode($stmts, \JSON_PRETTY_PRINT), "\n"; } elseif ('var-dump' === $operation) { \fwrite(\STDERR, "==> var_dump():\n"); \var_dump($stmts); } elseif ('resolve-names' === $operation) { \fwrite(\STDERR, "==> Resolved names.\n"); $stmts = $traverser->traverse($stmts); } } } function formatErrorMessage(\PhpParser\Error $e, $code, $withColumnInfo) { if ($withColumnInfo && $e->hasColumnInfo()) { return $e->getMessageWithColumnInfo($code); } else { return $e->getMessage(); } } function showHelp($error = '') { if ($error) { \fwrite(\STDERR, $error . "\n\n"); } \fwrite($error ? \STDERR : \STDOUT, << \false, 'with-positions' => \false, 'with-recovery' => \false]; \array_shift($args); $parseOptions = \true; foreach ($args as $arg) { if (!$parseOptions) { $files[] = $arg; continue; } switch ($arg) { case '--dump': case '-d': $operations[] = 'dump'; break; case '--pretty-print': case '-p': $operations[] = 'pretty-print'; break; case '--json-dump': case '-j': $operations[] = 'json-dump'; break; case '--var-dump': $operations[] = 'var-dump'; break; case '--resolve-names': case '-N': $operations[] = 'resolve-names'; break; case '--with-column-info': case '-c': $attributes['with-column-info'] = \true; break; case '--with-positions': case '-P': $attributes['with-positions'] = \true; break; case '--with-recovery': case '-r': $attributes['with-recovery'] = \true; break; case '--help': case '-h': showHelp(); break; case '--': $parseOptions = \false; break; default: if ($arg[0] === '-') { showHelp("Invalid operation {$arg}."); } else { $files[] = $arg; } } } return [$operations, $files, $attributes]; } PK!php-parser/.gitattributesnu[/test export-ignore /test_old export-ignore /doc export-ignore CHANGELOG.md export-ignore .travis.yml export-ignore phpunit.xml.dist export-ignore UPGRADE-*.md export-ignore .gitignore export-ignore PK!T.  3php-parser/lib/PhpParser/Node/VarLikeIdentifier.phpnu[attributes = $attributes; $this->name = \is_string($name) ? new \PhpParser\Node\Identifier($name) : $name; $this->value = $value; } public function getSubNodeNames() : array { return ['name', 'value']; } public function getType() : string { return 'Const'; } } PK!{.php-parser/lib/PhpParser/Node/NullableType.phpnu[attributes = $attributes; $this->type = \is_string($type) ? new \PhpParser\Node\Identifier($type) : $type; } public function getSubNodeNames() : array { return ['type']; } public function getType() : string { return 'NullableType'; } } PK!uQss(php-parser/lib/PhpParser/Node/Scalar.phpnu[attributes = $attributes; $this->types = $types; } public function getSubNodeNames() : array { return ['types']; } public function getType() : string { return 'UnionType'; } } PK![99%php-parser/lib/PhpParser/Node/Arg.phpnu[attributes = $attributes; $this->name = $name; $this->value = $value; $this->byRef = $byRef; $this->unpack = $unpack; } public function getSubNodeNames() : array { return ['name', 'value', 'byRef', 'unpack']; } public function getType() : string { return 'Arg'; } } PK!m{,php-parser/lib/PhpParser/Node/Identifier.phpnu[ \true, 'parent' => \true, 'static' => \true]; /** * Constructs an identifier node. * * @param string $name Identifier as string * @param array $attributes Additional attributes */ public function __construct(string $name, array $attributes = []) { $this->attributes = $attributes; $this->name = $name; } public function getSubNodeNames() : array { return ['name']; } /** * Get identifier as string. * * @return string Identifier as string. */ public function toString() : string { return $this->name; } /** * Get lowercased identifier as string. * * @return string Lowercased identifier as string */ public function toLowerString() : string { return \strtolower($this->name); } /** * Checks whether the identifier is a special class name (self, parent or static). * * @return bool Whether identifier is a special class name */ public function isSpecialClassName() : bool { return isset(self::$specialClassNames[\strtolower($this->name)]); } /** * Get identifier as string. * * @return string Identifier as string */ public function __toString() : string { return $this->name; } public function getType() : string { return 'Identifier'; } } PK!,O.php-parser/lib/PhpParser/Node/FunctionLike.phpnu[attributes = $attributes; $this->value = $value; } public function getSubNodeNames() : array { return ['value']; } /** * Constructs an LNumber node from a string number literal. * * @param string $str String number literal (decimal, octal, hex or binary) * @param array $attributes Additional attributes * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) * * @return LNumber The constructed LNumber, including kind attribute */ public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = \false) : \PhpParser\Node\Scalar\LNumber { $attributes['rawValue'] = $str; $str = \str_replace('_', '', $str); if ('0' !== $str[0] || '0' === $str) { $attributes['kind'] = \PhpParser\Node\Scalar\LNumber::KIND_DEC; return new \PhpParser\Node\Scalar\LNumber((int) $str, $attributes); } if ('x' === $str[1] || 'X' === $str[1]) { $attributes['kind'] = \PhpParser\Node\Scalar\LNumber::KIND_HEX; return new \PhpParser\Node\Scalar\LNumber(\hexdec($str), $attributes); } if ('b' === $str[1] || 'B' === $str[1]) { $attributes['kind'] = \PhpParser\Node\Scalar\LNumber::KIND_BIN; return new \PhpParser\Node\Scalar\LNumber(\bindec($str), $attributes); } if (!$allowInvalidOctal && \strpbrk($str, '89')) { throw new Error('Invalid numeric literal', $attributes); } // Strip optional explicit octal prefix. if ('o' === $str[1] || 'O' === $str[1]) { $str = \substr($str, 2); } // use intval instead of octdec to get proper cutting behavior with malformed numbers $attributes['kind'] = \PhpParser\Node\Scalar\LNumber::KIND_OCT; return new \PhpParser\Node\Scalar\LNumber(\intval($str, 8), $attributes); } public function getType() : string { return 'Scalar_LNumber'; } } PK!28YY0php-parser/lib/PhpParser/Node/Scalar/String_.phpnu[ '\\', '$' => '$', 'n' => "\n", 'r' => "\r", 't' => "\t", 'f' => "\f", 'v' => "\v", 'e' => "\x1b"]; /** * Constructs a string scalar node. * * @param string $value Value of the string * @param array $attributes Additional attributes */ public function __construct(string $value, array $attributes = []) { $this->attributes = $attributes; $this->value = $value; } public function getSubNodeNames() : array { return ['value']; } /** * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes */ public static function fromString(string $str, array $attributes = [], bool $parseUnicodeEscape = \true) : self { $attributes['kind'] = $str[0] === "'" || $str[1] === "'" && ($str[0] === 'b' || $str[0] === 'B') ? Scalar\String_::KIND_SINGLE_QUOTED : Scalar\String_::KIND_DOUBLE_QUOTED; $attributes['rawValue'] = $str; $string = self::parse($str, $parseUnicodeEscape); return new self($string, $attributes); } /** * @internal * * Parses a string token. * * @param string $str String token content * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes * * @return string The parsed string */ public static function parse(string $str, bool $parseUnicodeEscape = \true) : string { $bLength = 0; if ('b' === $str[0] || 'B' === $str[0]) { $bLength = 1; } if ('\'' === $str[$bLength]) { return \str_replace(['\\\\', '\\\''], ['\\', '\''], \substr($str, $bLength + 1, -1)); } else { return self::parseEscapeSequences(\substr($str, $bLength + 1, -1), '"', $parseUnicodeEscape); } } /** * @internal * * Parses escape sequences in strings (all string types apart from single quoted). * * @param string $str String without quotes * @param null|string $quote Quote type * @param bool $parseUnicodeEscape Whether to parse PHP 7 \u escapes * * @return string String with escape sequences parsed */ public static function parseEscapeSequences(string $str, $quote, bool $parseUnicodeEscape = \true) : string { if (null !== $quote) { $str = \str_replace('\\' . $quote, $quote, $str); } $extra = ''; if ($parseUnicodeEscape) { $extra = '|u\\{([0-9a-fA-F]+)\\}'; } return \preg_replace_callback('~\\\\([\\\\$nrtfve]|[xX][0-9a-fA-F]{1,2}|[0-7]{1,3}' . $extra . ')~', function ($matches) { $str = $matches[1]; if (isset(self::$replacements[$str])) { return self::$replacements[$str]; } elseif ('x' === $str[0] || 'X' === $str[0]) { return \chr(\hexdec(\substr($str, 1))); } elseif ('u' === $str[0]) { return self::codePointToUtf8(\hexdec($matches[2])); } else { return \chr(\octdec($str)); } }, $str); } /** * Converts a Unicode code point to its UTF-8 encoded representation. * * @param int $num Code point * * @return string UTF-8 representation of code point */ private static function codePointToUtf8(int $num) : string { if ($num <= 0x7f) { return \chr($num); } if ($num <= 0x7ff) { return \chr(($num >> 6) + 0xc0) . \chr(($num & 0x3f) + 0x80); } if ($num <= 0xffff) { return \chr(($num >> 12) + 0xe0) . \chr(($num >> 6 & 0x3f) + 0x80) . \chr(($num & 0x3f) + 0x80); } if ($num <= 0x1fffff) { return \chr(($num >> 18) + 0xf0) . \chr(($num >> 12 & 0x3f) + 0x80) . \chr(($num >> 6 & 0x3f) + 0x80) . \chr(($num & 0x3f) + 0x80); } throw new Error('Invalid UTF-8 codepoint escape sequence: Codepoint too large'); } public function getType() : string { return 'Scalar_String'; } } PK!՝;php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpnu[attributes = $attributes; $this->value = $value; } public function getSubNodeNames() : array { return ['value']; } public function getType() : string { return 'Scalar_EncapsedStringPart'; } } PK!^T0php-parser/lib/PhpParser/Node/Scalar/DNumber.phpnu[attributes = $attributes; $this->value = $value; } public function getSubNodeNames() : array { return ['value']; } /** * @param mixed[] $attributes */ public static function fromString(string $str, array $attributes = []) : \PhpParser\Node\Scalar\DNumber { $attributes['rawValue'] = $str; $float = self::parse($str); return new \PhpParser\Node\Scalar\DNumber($float, $attributes); } /** * @internal * * Parses a DNUMBER token like PHP would. * * @param string $str A string number * * @return float The parsed number */ public static function parse(string $str) : float { $str = \str_replace('_', '', $str); // Check whether this is one of the special integer notations. if ('0' === $str[0]) { // hex if ('x' === $str[1] || 'X' === $str[1]) { return \hexdec($str); } // bin if ('b' === $str[1] || 'B' === $str[1]) { return \bindec($str); } // oct, but only if the string does not contain any of '.eE'. if (\false === \strpbrk($str, '.eE')) { // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit // (8 or 9) so that only the digits before that are used. return \octdec(\substr($str, 0, \strcspn($str, '89'))); } } // dec return (float) $str; } public function getType() : string { return 'Scalar_DNumber'; } } PK!&Q&@@8php-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.phpnu[php-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.phpnu[attributes = $attributes; } public function getSubNodeNames() : array { return []; } /** * Get name of magic constant. * * @return string Name of magic constant */ public abstract function getName() : string; } PK!d1php-parser/lib/PhpParser/Node/Scalar/Encapsed.phpnu[attributes = $attributes; $this->parts = $parts; } public function getSubNodeNames() : array { return ['parts']; } public function getType() : string { return 'Scalar_Encapsed'; } } PK!!5php-parser/lib/PhpParser/Node/Name/FullyQualified.phpnu[toString(); } public function getType() : string { return 'Name_FullyQualified'; } } PK!ħJ/php-parser/lib/PhpParser/Node/Name/Relative.phpnu[toString(); } public function getType() : string { return 'Name_Relative'; } } PK!:&php-parser/lib/PhpParser/Node/Expr.phpnu[attributes = $attributes; $this->vars = $vars; } public function getSubNodeNames() : array { return ['vars']; } public function getType() : string { return 'Stmt_Static'; } } PK!F=eL-php-parser/lib/PhpParser/Node/Stmt/Const_.phpnu[attributes = $attributes; $this->consts = $consts; } public function getSubNodeNames() : array { return ['consts']; } public function getType() : string { return 'Stmt_Const'; } } PK!/ /php-parser/lib/PhpParser/Node/Stmt/Property.phpnu[attributes = $attributes; $this->flags = $flags; $this->props = $props; $this->type = \is_string($type) ? new Identifier($type) : $type; $this->attrGroups = $attrGroups; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'type', 'props']; } /** * Whether the property is explicitly or implicitly public. * * @return bool */ public function isPublic() : bool { return ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & \PhpParser\Node\Stmt\Class_::VISIBILITY_MODIFIER_MASK) === 0; } /** * Whether the property is protected. * * @return bool */ public function isProtected() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PROTECTED); } /** * Whether the property is private. * * @return bool */ public function isPrivate() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE); } /** * Whether the property is static. * * @return bool */ public function isStatic() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_STATIC); } /** * Whether the property is readonly. * * @return bool */ public function isReadonly() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_READONLY); } public function getType() : string { return 'Stmt_Property'; } } PK!+[1php-parser/lib/PhpParser/Node/Stmt/Expression.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Stmt_Expression'; } } PK!ץ15php-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.phpnu[value pair node. * * @param string|Node\Identifier $key Key * @param Node\Expr $value Value * @param array $attributes Additional attributes */ public function __construct($key, Node\Expr $value, array $attributes = []) { $this->attributes = $attributes; $this->key = \is_string($key) ? new Node\Identifier($key) : $key; $this->value = $value; } public function getSubNodeNames() : array { return ['key', 'value']; } public function getType() : string { return 'Stmt_DeclareDeclare'; } } PK!,\\+php-parser/lib/PhpParser/Node/Stmt/Use_.phpnu[attributes = $attributes; $this->type = $type; $this->uses = $uses; } public function getSubNodeNames() : array { return ['type', 'uses']; } public function getType() : string { return 'Stmt_Use'; } } PK!:.php-parser/lib/PhpParser/Node/Stmt/Return_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Stmt_Return'; } } PK!,mm+php-parser/lib/PhpParser/Node/Stmt/For_.phpnu[ array(): Init expressions * 'cond' => array(): Loop conditions * 'loop' => array(): Loop expressions * 'stmts' => array(): Statements * @param array $attributes Additional attributes */ public function __construct(array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->init = $subNodes['init'] ?? []; $this->cond = $subNodes['cond'] ?? []; $this->loop = $subNodes['loop'] ?? []; $this->stmts = $subNodes['stmts'] ?? []; } public function getSubNodeNames() : array { return ['init', 'cond', 'loop', 'stmts']; } public function getType() : string { return 'Stmt_For'; } } PK!xR1php-parser/lib/PhpParser/Node/Stmt/Interface_.phpnu[ array(): Name of extended interfaces * 'stmts' => array(): Statements * 'attrGroups' => array(): PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->extends = $subNodes['extends'] ?? []; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'name', 'extends', 'stmts']; } public function getType() : string { return 'Stmt_Interface'; } } PK!Uxx.php-parser/lib/PhpParser/Node/Stmt/ElseIf_.phpnu[attributes = $attributes; $this->cond = $cond; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['cond', 'stmts']; } public function getType() : string { return 'Stmt_ElseIf'; } } PK!/,php-parser/lib/PhpParser/Node/Stmt/Case_.phpnu[attributes = $attributes; $this->cond = $cond; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['cond', 'stmts']; } public function getType() : string { return 'Stmt_Case'; } } PK!ci,php-parser/lib/PhpParser/Node/Stmt/Goto_.phpnu[attributes = $attributes; $this->name = \is_string($name) ? new Identifier($name) : $name; } public function getSubNodeNames() : array { return ['name']; } public function getType() : string { return 'Stmt_Goto'; } } PK!cL 00*php-parser/lib/PhpParser/Node/Stmt/Nop.phpnu[attributes = $attributes; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['stmts']; } public function getType() : string { return 'Stmt_Else'; } } PK! )3php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.phpnu[attributes = $attributes; $this->remaining = $remaining; } public function getSubNodeNames() : array { return ['remaining']; } public function getType() : string { return 'Stmt_HaltCompiler'; } } PK!!<  9php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpnu[attributes = $attributes; $this->name = \is_string($name) ? new Identifier($name) : $name; } public function getSubNodeNames() : array { return ['name']; } public function getType() : string { return 'Stmt_Label'; } } PK!c%-php-parser/lib/PhpParser/Node/Stmt/Unset_.phpnu[attributes = $attributes; $this->vars = $vars; } public function getSubNodeNames() : array { return ['vars']; } public function getType() : string { return 'Stmt_Unset'; } } PK!tqq*php-parser/lib/PhpParser/Node/Stmt/Do_.phpnu[attributes = $attributes; $this->cond = $cond; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['stmts', 'cond']; } public function getType() : string { return 'Stmt_Do'; } } PK!Ҏj-php-parser/lib/PhpParser/Node/Stmt/Catch_.phpnu[attributes = $attributes; $this->types = $types; $this->var = $var; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['types', 'var', 'stmts']; } public function getType() : string { return 'Stmt_Catch'; } } PK!GU 1php-parser/lib/PhpParser/Node/Stmt/ClassConst.phpnu[attributes = $attributes; $this->flags = $flags; $this->consts = $consts; $this->attrGroups = $attrGroups; $this->type = \is_string($type) ? new Node\Identifier($type) : $type; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'type', 'consts']; } /** * Whether constant is explicitly or implicitly public. * * @return bool */ public function isPublic() : bool { return ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & \PhpParser\Node\Stmt\Class_::VISIBILITY_MODIFIER_MASK) === 0; } /** * Whether constant is protected. * * @return bool */ public function isProtected() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PROTECTED); } /** * Whether constant is private. * * @return bool */ public function isPrivate() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE); } /** * Whether constant is final. * * @return bool */ public function isFinal() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_FINAL); } public function getType() : string { return 'Stmt_ClassConst'; } } PK!%1/php-parser/lib/PhpParser/Node/Stmt/TryCatch.phpnu[attributes = $attributes; $this->stmts = $stmts; $this->catches = $catches; $this->finally = $finally; } public function getSubNodeNames() : array { return ['stmts', 'catches', 'finally']; } public function getType() : string { return 'Stmt_TryCatch'; } } PK!p/-php-parser/lib/PhpParser/Node/Stmt/Trait_.phpnu[ array(): Statements * 'attrGroups' => array(): PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'name', 'stmts']; } public function getType() : string { return 'Stmt_Trait'; } } PK!i1php-parser/lib/PhpParser/Node/Stmt/InlineHTML.phpnu[attributes = $attributes; $this->value = $value; } public function getSubNodeNames() : array { return ['value']; } public function getType() : string { return 'Stmt_InlineHTML'; } } PK! ,ww/php-parser/lib/PhpParser/Node/Stmt/Declare_.phpnu[attributes = $attributes; $this->declares = $declares; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['declares', 'stmts']; } public function getType() : string { return 'Stmt_Declare'; } } PK!¨.php-parser/lib/PhpParser/Node/Stmt/Global_.phpnu[attributes = $attributes; $this->vars = $vars; } public function getSubNodeNames() : array { return ['vars']; } public function getType() : string { return 'Stmt_Global'; } } PK!>7  0php-parser/lib/PhpParser/Node/Stmt/ClassLike.phpnu[stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\TraitUse) { $traitUses[] = $stmt; } } return $traitUses; } /** * @return ClassConst[] */ public function getConstants() : array { $constants = []; foreach ($this->stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\ClassConst) { $constants[] = $stmt; } } return $constants; } /** * @return Property[] */ public function getProperties() : array { $properties = []; foreach ($this->stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\Property) { $properties[] = $stmt; } } return $properties; } /** * Gets property with the given name defined directly in this class/interface/trait. * * @param string $name Name of the property * * @return Property|null Property node or null if the property does not exist */ public function getProperty(string $name) { foreach ($this->stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\Property) { foreach ($stmt->props as $prop) { if ($prop instanceof \PhpParser\Node\Stmt\PropertyProperty && $name === $prop->name->toString()) { return $stmt; } } } } return null; } /** * Gets all methods defined directly in this class/interface/trait * * @return ClassMethod[] */ public function getMethods() : array { $methods = []; foreach ($this->stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\ClassMethod) { $methods[] = $stmt; } } return $methods; } /** * Gets method with the given name defined directly in this class/interface/trait. * * @param string $name Name of the method (compared case-insensitively) * * @return ClassMethod|null Method node or null if the method does not exist */ public function getMethod(string $name) { $lowerName = \strtolower($name); foreach ($this->stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\ClassMethod && $lowerName === $stmt->name->toLowerString()) { return $stmt; } } return null; } } PK!߾tt-php-parser/lib/PhpParser/Node/Stmt/While_.phpnu[attributes = $attributes; $this->cond = $cond; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['cond', 'stmts']; } public function getType() : string { return 'Stmt_While'; } } PK!-php-parser/lib/PhpParser/Node/Stmt/Throw_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Stmt_Throw'; } } PK!ɭX2php-parser/lib/PhpParser/Node/Stmt/ClassMethod.phpnu[ \true, '__destruct' => \true, '__call' => \true, '__callstatic' => \true, '__get' => \true, '__set' => \true, '__isset' => \true, '__unset' => \true, '__sleep' => \true, '__wakeup' => \true, '__tostring' => \true, '__set_state' => \true, '__clone' => \true, '__invoke' => \true, '__debuginfo' => \true, '__serialize' => \true, '__unserialize' => \true]; /** * Constructs a class method node. * * @param string|Node\Identifier $name Name * @param array $subNodes Array of the following optional subnodes: * 'flags => MODIFIER_PUBLIC: Flags * 'byRef' => false : Whether to return by reference * 'params' => array() : Parameters * 'returnType' => null : Return type * 'stmts' => array() : Statements * 'attrGroups' => array() : PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; $this->byRef = $subNodes['byRef'] ?? \false; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->params = $subNodes['params'] ?? []; $returnType = $subNodes['returnType'] ?? null; $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; $this->stmts = \array_key_exists('stmts', $subNodes) ? $subNodes['stmts'] : []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'returnType', 'stmts']; } public function returnsByRef() : bool { return $this->byRef; } public function getParams() : array { return $this->params; } public function getReturnType() { return $this->returnType; } public function getStmts() { return $this->stmts; } public function getAttrGroups() : array { return $this->attrGroups; } /** * Whether the method is explicitly or implicitly public. * * @return bool */ public function isPublic() : bool { return ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PUBLIC) !== 0 || ($this->flags & \PhpParser\Node\Stmt\Class_::VISIBILITY_MODIFIER_MASK) === 0; } /** * Whether the method is protected. * * @return bool */ public function isProtected() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PROTECTED); } /** * Whether the method is private. * * @return bool */ public function isPrivate() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_PRIVATE); } /** * Whether the method is abstract. * * @return bool */ public function isAbstract() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_ABSTRACT); } /** * Whether the method is final. * * @return bool */ public function isFinal() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_FINAL); } /** * Whether the method is static. * * @return bool */ public function isStatic() : bool { return (bool) ($this->flags & \PhpParser\Node\Stmt\Class_::MODIFIER_STATIC); } /** * Whether the method is magic. * * @return bool */ public function isMagic() : bool { return isset(self::$magicNames[$this->name->toLowerString()]); } public function getType() : string { return 'Stmt_ClassMethod'; } } PK!yž/php-parser/lib/PhpParser/Node/Stmt/Foreach_.phpnu[ null : Variable to assign key to * 'byRef' => false : Whether to assign value by reference * 'stmts' => array(): Statements * @param array $attributes Additional attributes */ public function __construct(Node\Expr $expr, Node\Expr $valueVar, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->expr = $expr; $this->keyVar = $subNodes['keyVar'] ?? null; $this->byRef = $subNodes['byRef'] ?? \false; $this->valueVar = $valueVar; $this->stmts = $subNodes['stmts'] ?? []; } public function getSubNodeNames() : array { return ['expr', 'keyVar', 'byRef', 'valueVar', 'stmts']; } public function getType() : string { return 'Stmt_Foreach'; } } PK!95aa-php-parser/lib/PhpParser/Node/Stmt/UseUse.phpnu[attributes = $attributes; $this->type = $type; $this->name = $name; $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; } public function getSubNodeNames() : array { return ['type', 'name', 'alias']; } /** * Get alias. If not explicitly given this is the last component of the used name. * * @return Identifier */ public function getAlias() : Identifier { if (null !== $this->alias) { return $this->alias; } return new Identifier($this->name->getLast()); } public function getType() : string { return 'Stmt_UseUse'; } } PK!ʺ]ii*php-parser/lib/PhpParser/Node/Stmt/If_.phpnu[ array(): Statements * 'elseifs' => array(): Elseif clauses * 'else' => null : Else clause * @param array $attributes Additional attributes */ public function __construct(Node\Expr $cond, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->cond = $cond; $this->stmts = $subNodes['stmts'] ?? []; $this->elseifs = $subNodes['elseifs'] ?? []; $this->else = $subNodes['else'] ?? null; } public function getSubNodeNames() : array { return ['cond', 'stmts', 'elseifs', 'else']; } public function getType() : string { return 'Stmt_If'; } } PK!U0php-parser/lib/PhpParser/Node/Stmt/Continue_.phpnu[attributes = $attributes; $this->num = $num; } public function getSubNodeNames() : array { return ['num']; } public function getType() : string { return 'Stmt_Continue'; } } PK!$Uq0php-parser/lib/PhpParser/Node/Stmt/StaticVar.phpnu[attributes = $attributes; $this->var = $var; $this->default = $default; } public function getSubNodeNames() : array { return ['var', 'default']; } public function getType() : string { return 'Stmt_StaticVar'; } } PK!+,php-parser/lib/PhpParser/Node/Stmt/Echo_.phpnu[attributes = $attributes; $this->exprs = $exprs; } public function getSubNodeNames() : array { return ['exprs']; } public function getType() : string { return 'Stmt_Echo'; } } PK!ߩ'%%.php-parser/lib/PhpParser/Node/Stmt/Switch_.phpnu[attributes = $attributes; $this->cond = $cond; $this->cases = $cases; } public function getSubNodeNames() : array { return ['cond', 'cases']; } public function getType() : string { return 'Stmt_Switch'; } } PK!n7php-parser/lib/PhpParser/Node/Stmt/PropertyProperty.phpnu[attributes = $attributes; $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; $this->default = $default; } public function getSubNodeNames() : array { return ['name', 'default']; } public function getType() : string { return 'Stmt_PropertyProperty'; } } PK! -php-parser/lib/PhpParser/Node/Stmt/Break_.phpnu[attributes = $attributes; $this->num = $num; } public function getSubNodeNames() : array { return ['num']; } public function getType() : string { return 'Stmt_Break'; } } PK!Q911?php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpnu[attributes = $attributes; $this->trait = $trait; $this->method = \is_string($method) ? new Node\Identifier($method) : $method; $this->newModifier = $newModifier; $this->newName = \is_string($newName) ? new Node\Identifier($newName) : $newName; } public function getSubNodeNames() : array { return ['trait', 'method', 'newModifier', 'newName']; } public function getType() : string { return 'Stmt_TraitUseAdaptation_Alias'; } } PK!:`JJDphp-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpnu[attributes = $attributes; $this->trait = $trait; $this->method = \is_string($method) ? new Node\Identifier($method) : $method; $this->insteadof = $insteadof; } public function getSubNodeNames() : array { return ['trait', 'method', 'insteadof']; } public function getType() : string { return 'Stmt_TraitUseAdaptation_Precedence'; } } PK!QM/php-parser/lib/PhpParser/Node/Stmt/TraitUse.phpnu[attributes = $attributes; $this->traits = $traits; $this->adaptations = $adaptations; } public function getSubNodeNames() : array { return ['traits', 'adaptations']; } public function getType() : string { return 'Stmt_TraitUse'; } } PK!/php-parser/lib/PhpParser/Node/Stmt/Finally_.phpnu[attributes = $attributes; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['stmts']; } public function getType() : string { return 'Stmt_Finally'; } } PK!}/ώ1php-parser/lib/PhpParser/Node/Stmt/Namespace_.phpnu[attributes = $attributes; $this->name = $name; $this->stmts = $stmts; } public function getSubNodeNames() : array { return ['name', 'stmts']; } public function getType() : string { return 'Stmt_Namespace'; } } PK!Šrr-php-parser/lib/PhpParser/Node/Stmt/Class_.phpnu[ 0 : Flags * 'extends' => null : Name of extended class * 'implements' => array(): Names of implemented interfaces * 'stmts' => array(): Statements * 'attrGroups' => array(): PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->flags = $subNodes['flags'] ?? $subNodes['type'] ?? 0; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->extends = $subNodes['extends'] ?? null; $this->implements = $subNodes['implements'] ?? []; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'name', 'extends', 'implements', 'stmts']; } /** * Whether the class is explicitly abstract. * * @return bool */ public function isAbstract() : bool { return (bool) ($this->flags & self::MODIFIER_ABSTRACT); } /** * Whether the class is final. * * @return bool */ public function isFinal() : bool { return (bool) ($this->flags & self::MODIFIER_FINAL); } public function isReadonly() : bool { return (bool) ($this->flags & self::MODIFIER_READONLY); } /** * Whether the class is anonymous. * * @return bool */ public function isAnonymous() : bool { return null === $this->name; } /** * @internal */ public static function verifyClassModifier($a, $b) { if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) { throw new Error('Multiple abstract modifiers are not allowed'); } if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) { throw new Error('Multiple final modifiers are not allowed'); } if ($a & self::MODIFIER_READONLY && $b & self::MODIFIER_READONLY) { throw new Error('Multiple readonly modifiers are not allowed'); } if ($a & 48 && $b & 48) { throw new Error('Cannot use the final modifier on an abstract class'); } } /** * @internal */ public static function verifyModifier($a, $b) { if ($a & self::VISIBILITY_MODIFIER_MASK && $b & self::VISIBILITY_MODIFIER_MASK) { throw new Error('Multiple access type modifiers are not allowed'); } if ($a & self::MODIFIER_ABSTRACT && $b & self::MODIFIER_ABSTRACT) { throw new Error('Multiple abstract modifiers are not allowed'); } if ($a & self::MODIFIER_STATIC && $b & self::MODIFIER_STATIC) { throw new Error('Multiple static modifiers are not allowed'); } if ($a & self::MODIFIER_FINAL && $b & self::MODIFIER_FINAL) { throw new Error('Multiple final modifiers are not allowed'); } if ($a & self::MODIFIER_READONLY && $b & self::MODIFIER_READONLY) { throw new Error('Multiple readonly modifiers are not allowed'); } if ($a & 48 && $b & 48) { throw new Error('Cannot use the final modifier on an abstract class member'); } } public function getType() : string { return 'Stmt_Class'; } } PK!!/php-parser/lib/PhpParser/Node/Stmt/GroupUse.phpnu[attributes = $attributes; $this->type = $type; $this->prefix = $prefix; $this->uses = $uses; } public function getSubNodeNames() : array { return ['type', 'prefix', 'uses']; } public function getType() : string { return 'Stmt_GroupUse'; } } PK!,=a a 0php-parser/lib/PhpParser/Node/Stmt/Function_.phpnu[ false : Whether to return by reference * 'params' => array(): Parameters * 'returnType' => null : Return type * 'stmts' => array(): Statements * 'attrGroups' => array(): PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->byRef = $subNodes['byRef'] ?? \false; $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->params = $subNodes['params'] ?? []; $returnType = $subNodes['returnType'] ?? null; $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'byRef', 'name', 'params', 'returnType', 'stmts']; } public function returnsByRef() : bool { return $this->byRef; } public function getParams() : array { return $this->params; } public function getReturnType() { return $this->returnType; } public function getAttrGroups() : array { return $this->attrGroups; } /** @return Node\Stmt[] */ public function getStmts() : array { return $this->stmts; } public function getType() : string { return 'Stmt_Function'; } } PK!V5&php-parser/lib/PhpParser/Node/Name.phpnu[ \true, 'parent' => \true, 'static' => \true]; /** * Constructs a name node. * * @param string|string[]|self $name Name as string, part array or Name instance (copy ctor) * @param array $attributes Additional attributes */ public function __construct($name, array $attributes = []) { $this->attributes = $attributes; $this->parts = self::prepareName($name); } public function getSubNodeNames() : array { return ['parts']; } /** * Get parts of name (split by the namespace separator). * * @return string[] Parts of name */ public function getParts() : array { return $this->parts; } /** * Gets the first part of the name, i.e. everything before the first namespace separator. * * @return string First part of the name */ public function getFirst() : string { return $this->parts[0]; } /** * Gets the last part of the name, i.e. everything after the last namespace separator. * * @return string Last part of the name */ public function getLast() : string { return $this->parts[\count($this->parts) - 1]; } /** * Checks whether the name is unqualified. (E.g. Name) * * @return bool Whether the name is unqualified */ public function isUnqualified() : bool { return 1 === \count($this->parts); } /** * Checks whether the name is qualified. (E.g. Name\Name) * * @return bool Whether the name is qualified */ public function isQualified() : bool { return 1 < \count($this->parts); } /** * Checks whether the name is fully qualified. (E.g. \Name) * * @return bool Whether the name is fully qualified */ public function isFullyQualified() : bool { return \false; } /** * Checks whether the name is explicitly relative to the current namespace. (E.g. namespace\Name) * * @return bool Whether the name is relative */ public function isRelative() : bool { return \false; } /** * Returns a string representation of the name itself, without taking the name type into * account (e.g., not including a leading backslash for fully qualified names). * * @return string String representation */ public function toString() : string { return \implode('\\', $this->parts); } /** * Returns a string representation of the name as it would occur in code (e.g., including * leading backslash for fully qualified names. * * @return string String representation */ public function toCodeString() : string { return $this->toString(); } /** * Returns lowercased string representation of the name, without taking the name type into * account (e.g., no leading backslash for fully qualified names). * * @return string Lowercased string representation */ public function toLowerString() : string { return \strtolower(\implode('\\', $this->parts)); } /** * Checks whether the identifier is a special class name (self, parent or static). * * @return bool Whether identifier is a special class name */ public function isSpecialClassName() : bool { return \count($this->parts) === 1 && isset(self::$specialClassNames[\strtolower($this->parts[0])]); } /** * Returns a string representation of the name by imploding the namespace parts with the * namespace separator. * * @return string String representation */ public function __toString() : string { return \implode('\\', $this->parts); } /** * Gets a slice of a name (similar to array_slice). * * This method returns a new instance of the same type as the original and with the same * attributes. * * If the slice is empty, null is returned. The null value will be correctly handled in * concatenations using concat(). * * Offset and length have the same meaning as in array_slice(). * * @param int $offset Offset to start the slice at (may be negative) * @param int|null $length Length of the slice (may be negative) * * @return static|null Sliced name */ public function slice(int $offset, ?int $length = null) { $numParts = \count($this->parts); $realOffset = $offset < 0 ? $offset + $numParts : $offset; if ($realOffset < 0 || $realOffset > $numParts) { throw new \OutOfBoundsException(\sprintf('Offset %d is out of bounds', $offset)); } if (null === $length) { $realLength = $numParts - $realOffset; } else { $realLength = $length < 0 ? $length + $numParts - $realOffset : $length; if ($realLength < 0 || $realLength > $numParts - $realOffset) { throw new \OutOfBoundsException(\sprintf('Length %d is out of bounds', $length)); } } if ($realLength === 0) { // Empty slice is represented as null return null; } return new static(\array_slice($this->parts, $realOffset, $realLength), $this->attributes); } /** * Concatenate two names, yielding a new Name instance. * * The type of the generated instance depends on which class this method is called on, for * example Name\FullyQualified::concat() will yield a Name\FullyQualified instance. * * If one of the arguments is null, a new instance of the other name will be returned. If both * arguments are null, null will be returned. As such, writing * Name::concat($namespace, $shortName) * where $namespace is a Name node or null will work as expected. * * @param string|string[]|self|null $name1 The first name * @param string|string[]|self|null $name2 The second name * @param array $attributes Attributes to assign to concatenated name * * @return static|null Concatenated name */ public static function concat($name1, $name2, array $attributes = []) { if (null === $name1 && null === $name2) { return null; } elseif (null === $name1) { return new static(self::prepareName($name2), $attributes); } elseif (null === $name2) { return new static(self::prepareName($name1), $attributes); } else { return new static(\array_merge(self::prepareName($name1), self::prepareName($name2)), $attributes); } } /** * Prepares a (string, array or Name node) name for use in name changing methods by converting * it to an array. * * @param string|string[]|self $name Name to prepare * * @return string[] Prepared name */ private static function prepareName($name) : array { if (\is_string($name)) { if ('' === $name) { throw new \InvalidArgumentException('Name cannot be empty'); } return \explode('\\', $name); } elseif (\is_array($name)) { if (empty($name)) { throw new \InvalidArgumentException('Name cannot be empty'); } return $name; } elseif ($name instanceof self) { return $name->parts; } throw new \InvalidArgumentException('Expected string, array of parts or Name instance'); } public function getType() : string { return 'Name'; } } PK!bNss'php-parser/lib/PhpParser/Node/Param.phpnu[attributes = $attributes; $this->type = \is_string($type) ? new \PhpParser\Node\Identifier($type) : $type; $this->byRef = $byRef; $this->variadic = $variadic; $this->var = $var; $this->default = $default; $this->flags = $flags; $this->attrGroups = $attrGroups; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'type', 'byRef', 'variadic', 'var', 'default']; } public function getType() : string { return 'Param'; } } PK!J~~.php-parser/lib/PhpParser/Node/Expr/PostDec.phpnu[attributes = $attributes; $this->var = $var; } public function getSubNodeNames() : array { return ['var']; } public function getType() : string { return 'Expr_PostDec'; } } PK!?w .php-parser/lib/PhpParser/Node/Expr/Closure.phpnu[ false : Whether the closure is static * 'byRef' => false : Whether to return by reference * 'params' => array(): Parameters * 'uses' => array(): use()s * 'returnType' => null : Return type * 'stmts' => array(): Statements * 'attrGroups' => array(): PHP attributes groups * @param array $attributes Additional attributes */ public function __construct(array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->static = $subNodes['static'] ?? \false; $this->byRef = $subNodes['byRef'] ?? \false; $this->params = $subNodes['params'] ?? []; $this->uses = $subNodes['uses'] ?? []; $returnType = $subNodes['returnType'] ?? null; $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'static', 'byRef', 'params', 'uses', 'returnType', 'stmts']; } public function returnsByRef() : bool { return $this->byRef; } public function getParams() : array { return $this->params; } public function getReturnType() { return $this->returnType; } /** @return Node\Stmt[] */ public function getStmts() : array { return $this->stmts; } public function getAttrGroups() : array { return $this->attrGroups; } public function getType() : string { return 'Expr_Closure'; } } PK!Ly0{{-php-parser/lib/PhpParser/Node/Expr/PreDec.phpnu[attributes = $attributes; $this->var = $var; } public function getSubNodeNames() : array { return ['var']; } public function getType() : string { return 'Expr_PreDec'; } } PK!JJ1php-parser/lib/PhpParser/Node/Expr/StaticCall.phpnu[ Arguments */ public $args; /** * Constructs a static method call node. * * @param Node\Name|Expr $class Class name * @param string|Identifier|Expr $name Method name * @param array $args Arguments * @param array $attributes Additional attributes */ public function __construct($class, $name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->class = $class; $this->name = \is_string($name) ? new Identifier($name) : $name; $this->args = $args; } public function getSubNodeNames() : array { return ['class', 'name', 'args']; } public function getType() : string { return 'Expr_StaticCall'; } public function getRawArgs() : array { return $this->args; } } PK!,php-parser/lib/PhpParser/Node/Expr/Exit_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Exit'; } } PK!OJ/php-parser/lib/PhpParser/Node/Expr/Include_.phpnu[attributes = $attributes; $this->expr = $expr; $this->type = $type; } public function getSubNodeNames() : array { return ['expr', 'type']; } public function getType() : string { return 'Expr_Include'; } } PK!g0php-parser/lib/PhpParser/Node/Expr/ShellExec.phpnu[attributes = $attributes; $this->parts = $parts; } public function getSubNodeNames() : array { return ['parts']; } public function getType() : string { return 'Expr_ShellExec'; } } PK!4A__/php-parser/lib/PhpParser/Node/Expr/BinaryOp.phpnu[attributes = $attributes; $this->left = $left; $this->right = $right; } public function getSubNodeNames() : array { return ['left', 'right']; } /** * Get the operator sigil for this binary operation. * * In the case there are multiple possible sigils for an operator, this method does not * necessarily return the one used in the parsed code. * * @return string */ public abstract function getOperatorSigil() : string; } PK!,fS00/php-parser/lib/PhpParser/Node/Expr/FuncCall.phpnu[ Arguments */ public $args; /** * Constructs a function call node. * * @param Node\Name|Expr $name Function name * @param array $args Arguments * @param array $attributes Additional attributes */ public function __construct($name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->name = $name; $this->args = $args; } public function getSubNodeNames() : array { return ['name', 'args']; } public function getType() : string { return 'Expr_FuncCall'; } public function getRawArgs() : array { return $this->args; } } PK!i$0php-parser/lib/PhpParser/Node/Expr/YieldFrom.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_YieldFrom'; } } PK!ix-php-parser/lib/PhpParser/Node/Expr/Isset_.phpnu[attributes = $attributes; $this->vars = $vars; } public function getSubNodeNames() : array { return ['vars']; } public function getType() : string { return 'Expr_Isset'; } } PK!~{{,php-parser/lib/PhpParser/Node/Expr/Eval_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Eval'; } } PK!Ll^h h 4php-parser/lib/PhpParser/Node/Expr/ArrowFunction.phpnu[ false : Whether the closure is static * 'byRef' => false : Whether to return by reference * 'params' => array() : Parameters * 'returnType' => null : Return type * 'expr' => Expr : Expression body * 'attrGroups' => array() : PHP attribute groups * @param array $attributes Additional attributes */ public function __construct(array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->static = $subNodes['static'] ?? \false; $this->byRef = $subNodes['byRef'] ?? \false; $this->params = $subNodes['params'] ?? []; $returnType = $subNodes['returnType'] ?? null; $this->returnType = \is_string($returnType) ? new Node\Identifier($returnType) : $returnType; $this->expr = $subNodes['expr']; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function getSubNodeNames() : array { return ['attrGroups', 'static', 'byRef', 'params', 'returnType', 'expr']; } public function returnsByRef() : bool { return $this->byRef; } public function getParams() : array { return $this->params; } public function getReturnType() { return $this->returnType; } public function getAttrGroups() : array { return $this->attrGroups; } /** * @return Node\Stmt\Return_[] */ public function getStmts() : array { return [new Node\Stmt\Return_($this->expr)]; } public function getType() : string { return 'Expr_ArrowFunction'; } } PK!93'((-php-parser/lib/PhpParser/Node/Expr/Array_.phpnu[attributes = $attributes; $this->items = $items; } public function getSubNodeNames() : array { return ['items']; } public function getType() : string { return 'Expr_Array'; } } PK!'(0php-parser/lib/PhpParser/Node/Expr/UnaryPlus.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_UnaryPlus'; } } PK!4Q~~.php-parser/lib/PhpParser/Node/Expr/PostInc.phpnu[attributes = $attributes; $this->var = $var; } public function getSubNodeNames() : array { return ['var']; } public function getType() : string { return 'Expr_PostInc'; } } PK!@/php-parser/lib/PhpParser/Node/Expr/AssignOp.phpnu[attributes = $attributes; $this->var = $var; $this->expr = $expr; } public function getSubNodeNames() : array { return ['var', 'expr']; } } PK!+281php-parser/lib/PhpParser/Node/Expr/BitwiseNot.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_BitwiseNot'; } } PK!2,php-parser/lib/PhpParser/Node/Expr/Error.phpnu[attributes = $attributes; } public function getSubNodeNames() : array { return []; } public function getType() : string { return 'Expr_Error'; } } PK!>lII2php-parser/lib/PhpParser/Node/Expr/Instanceof_.phpnu[attributes = $attributes; $this->expr = $expr; $this->class = $class; } public function getSubNodeNames() : array { return ['expr', 'class']; } public function getType() : string { return 'Expr_Instanceof'; } } PK!{{-php-parser/lib/PhpParser/Node/Expr/PreInc.phpnu[attributes = $attributes; $this->var = $var; } public function getSubNodeNames() : array { return ['var']; } public function getType() : string { return 'Expr_PreInc'; } } PK!DG4php-parser/lib/PhpParser/Node/Expr/PropertyFetch.phpnu[attributes = $attributes; $this->var = $var; $this->name = \is_string($name) ? new Identifier($name) : $name; } public function getSubNodeNames() : array { return ['var', 'name']; } public function getType() : string { return 'Expr_PropertyFetch'; } } PK!"ɼ886php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpnu[php-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpnu[='; } public function getType() : string { return 'Expr_BinaryOp_GreaterOrEqual'; } } PK!э??9php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpnu[>'; } public function getType() : string { return 'Expr_BinaryOp_ShiftRight'; } } PK!ia223php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpnu['; } public function getType() : string { return 'Expr_BinaryOp_Greater'; } } PK!K::7php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpnu[>9php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpnu['; } public function getType() : string { return 'Expr_BinaryOp_Spaceship'; } } PK!9V333php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpnu[php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Print'; } } PK!H.php-parser/lib/PhpParser/Node/Expr/Ternary.phpnu[attributes = $attributes; $this->cond = $cond; $this->if = $if; $this->else = $else; } public function getSubNodeNames() : array { return ['cond', 'if', 'else']; } public function getType() : string { return 'Expr_Ternary'; } } PK!pww1php-parser/lib/PhpParser/Node/Expr/ClosureUse.phpnu[attributes = $attributes; $this->var = $var; $this->byRef = $byRef; } public function getSubNodeNames() : array { return ['var', 'byRef']; } public function getType() : string { return 'Expr_ClosureUse'; } } PK!*I,php-parser/lib/PhpParser/Node/Expr/List_.phpnu[attributes = $attributes; $this->items = $items; } public function getSubNodeNames() : array { return ['items']; } public function getType() : string { return 'Expr_List'; } } PK!91php-parser/lib/PhpParser/Node/Expr/UnaryMinus.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_UnaryMinus'; } } PK! =-php-parser/lib/PhpParser/Node/Expr/Assign.phpnu[attributes = $attributes; $this->var = $var; $this->expr = $expr; } public function getSubNodeNames() : array { return ['var', 'expr']; } public function getType() : string { return 'Expr_Assign'; } } PK!%6`/php-parser/lib/PhpParser/Node/Expr/Variable.phpnu[attributes = $attributes; $this->name = $name; } public function getSubNodeNames() : array { return ['name']; } public function getType() : string { return 'Expr_Variable'; } } PK!)880php-parser/lib/PhpParser/Node/Expr/AssignRef.phpnu[attributes = $attributes; $this->var = $var; $this->expr = $expr; } public function getSubNodeNames() : array { return ['var', 'expr']; } public function getType() : string { return 'Expr_AssignRef'; } } PK!$1php-parser/lib/PhpParser/Node/Expr/BooleanNot.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_BooleanNot'; } } PK!oPNN-php-parser/lib/PhpParser/Node/Expr/Yield_.phpnu[attributes = $attributes; $this->key = $key; $this->value = $value; } public function getSubNodeNames() : array { return ['key', 'value']; } public function getType() : string { return 'Expr_Yield'; } } PK!8<<1php-parser/lib/PhpParser/Node/Expr/MethodCall.phpnu[ Arguments */ public $args; /** * Constructs a function call node. * * @param Expr $var Variable holding object * @param string|Identifier|Expr $name Method name * @param array $args Arguments * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->var = $var; $this->name = \is_string($name) ? new Identifier($name) : $name; $this->args = $args; } public function getSubNodeNames() : array { return ['var', 'name', 'args']; } public function getType() : string { return 'Expr_MethodCall'; } public function getRawArgs() : array { return $this->args; } } PK!Pxx+php-parser/lib/PhpParser/Node/Expr/New_.phpnu[ Arguments */ public $args; /** * Constructs a function call node. * * @param Node\Name|Expr|Node\Stmt\Class_ $class Class name (or class node for anonymous classes) * @param array $args Arguments * @param array $attributes Additional attributes */ public function __construct($class, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->class = $class; $this->args = $args; } public function getSubNodeNames() : array { return ['class', 'args']; } public function getType() : string { return 'Expr_New'; } public function getRawArgs() : array { return $this->args; } } PK! l 1php-parser/lib/PhpParser/Node/Expr/ConstFetch.phpnu[attributes = $attributes; $this->name = $name; } public function getSubNodeNames() : array { return ['name']; } public function getType() : string { return 'Expr_ConstFetch'; } } PK!۵~~-php-parser/lib/PhpParser/Node/Expr/Empty_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Empty'; } } PK!8)J]2php-parser/lib/PhpParser/Node/Expr/Cast/Array_.phpnu[attributes = $attributes; $this->key = $key; $this->value = $value; $this->byRef = $byRef; $this->unpack = $unpack; } public function getSubNodeNames() : array { return ['key', 'value', 'byRef', 'unpack']; } public function getType() : string { return 'Expr_ArrayItem'; } } PK!k11+php-parser/lib/PhpParser/Node/Expr/Cast.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } } PK!j774php-parser/lib/PhpParser/Node/Expr/ErrorSuppress.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_ErrorSuppress'; } } PK!M :php-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.phpnu[attributes = $attributes; $this->class = $class; $this->name = \is_string($name) ? new VarLikeIdentifier($name) : $name; } public function getSubNodeNames() : array { return ['class', 'name']; } public function getType() : string { return 'Expr_StaticPropertyFetch'; } } PK!Y{{-php-parser/lib/PhpParser/Node/Expr/Clone_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Clone'; } } PK!A6php-parser/lib/PhpParser/Node/Expr/ClassConstFetch.phpnu[attributes = $attributes; $this->class = $class; $this->name = \is_string($name) ? new Identifier($name) : $name; } public function getSubNodeNames() : array { return ['class', 'name']; } public function getType() : string { return 'Expr_ClassConstFetch'; } } PK!0>>4php-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.phpnu[attributes = $attributes; $this->var = $var; $this->dim = $dim; } public function getSubNodeNames() : array { return ['var', 'dim']; } public function getType() : string { return 'Expr_ArrayDimFetch'; } } PK!6php-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.phpnu[getNode(); } if ($node instanceof \PhpParser\Node) { return $node; } throw new \LogicException('Expected node or builder object'); } /** * Normalizes a node to a statement. * * Expressions are wrapped in a Stmt\Expression node. * * @param Node|Builder $node The node to normalize * * @return Stmt The normalized statement node */ public static function normalizeStmt($node) : Stmt { $node = self::normalizeNode($node); if ($node instanceof Stmt) { return $node; } if ($node instanceof Expr) { return new Stmt\Expression($node); } throw new \LogicException('Expected statement or expression node'); } /** * Normalizes strings to Identifier. * * @param string|Identifier $name The identifier to normalize * * @return Identifier The normalized identifier */ public static function normalizeIdentifier($name) : Identifier { if ($name instanceof Identifier) { return $name; } if (\is_string($name)) { return new Identifier($name); } throw new \LogicException('Expected string or instance of Node\\Identifier'); } /** * Normalizes strings to Identifier, also allowing expressions. * * @param string|Identifier|Expr $name The identifier to normalize * * @return Identifier|Expr The normalized identifier or expression */ public static function normalizeIdentifierOrExpr($name) { if ($name instanceof Identifier || $name instanceof Expr) { return $name; } if (\is_string($name)) { return new Identifier($name); } throw new \LogicException('Expected string or instance of Node\\Identifier or Node\\Expr'); } /** * Normalizes a name: Converts string names to Name nodes. * * @param Name|string $name The name to normalize * * @return Name The normalized name */ public static function normalizeName($name) : Name { if ($name instanceof Name) { return $name; } if (\is_string($name)) { if (!$name) { throw new \LogicException('Name cannot be empty'); } if ($name[0] === '\\') { return new Name\FullyQualified(\substr($name, 1)); } if (0 === \strpos($name, 'namespace\\')) { return new Name\Relative(\substr($name, \strlen('namespace\\'))); } return new Name($name); } throw new \LogicException('Name must be a string or an instance of Node\\Name'); } /** * Normalizes a name: Converts string names to Name nodes, while also allowing expressions. * * @param Expr|Name|string $name The name to normalize * * @return Name|Expr The normalized name or expression */ public static function normalizeNameOrExpr($name) { if ($name instanceof Expr) { return $name; } if (!\is_string($name) && !$name instanceof Name) { throw new \LogicException('Name must be a string or an instance of Node\\Name or Node\\Expr'); } return self::normalizeName($name); } /** * Normalizes a type: Converts plain-text type names into proper AST representation. * * In particular, builtin types become Identifiers, custom types become Names and nullables * are wrapped in NullableType nodes. * * @param string|Name|Identifier|ComplexType $type The type to normalize * * @return Name|Identifier|ComplexType The normalized type */ public static function normalizeType($type) { if (!\is_string($type)) { if (!$type instanceof Name && !$type instanceof Identifier && !$type instanceof ComplexType) { throw new \LogicException('Type must be a string, or an instance of Name, Identifier or ComplexType'); } return $type; } $nullable = \false; if (\strlen($type) > 0 && $type[0] === '?') { $nullable = \true; $type = \substr($type, 1); } $builtinTypes = ['array', 'callable', 'bool', 'int', 'float', 'string', 'iterable', 'void', 'object', 'null', 'false', 'mixed', 'never', 'true']; $lowerType = \strtolower($type); if (\in_array($lowerType, $builtinTypes)) { $type = new Identifier($lowerType); } else { $type = self::normalizeName($type); } $notNullableTypes = ['void', 'mixed', 'never']; if ($nullable && \in_array((string) $type, $notNullableTypes)) { throw new \LogicException(\sprintf('%s type cannot be nullable', $type)); } return $nullable ? new NullableType($type) : $type; } /** * Normalizes a value: Converts nulls, booleans, integers, * floats, strings and arrays into their respective nodes * * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value The value to normalize * * @return Expr The normalized value */ public static function normalizeValue($value) : Expr { if ($value instanceof \PhpParser\Node\Expr) { return $value; } if (\is_null($value)) { return new Expr\ConstFetch(new Name('null')); } if (\is_bool($value)) { return new Expr\ConstFetch(new Name($value ? 'true' : 'false')); } if (\is_int($value)) { return new Scalar\LNumber($value); } if (\is_float($value)) { return new Scalar\DNumber($value); } if (\is_string($value)) { return new Scalar\String_($value); } if (\is_array($value)) { $items = []; $lastKey = -1; foreach ($value as $itemKey => $itemValue) { // for consecutive, numeric keys don't generate keys if (null !== $lastKey && ++$lastKey === $itemKey) { $items[] = new Expr\ArrayItem(self::normalizeValue($itemValue)); } else { $lastKey = null; $items[] = new Expr\ArrayItem(self::normalizeValue($itemValue), self::normalizeValue($itemKey)); } } return new Expr\Array_($items); } if ($value instanceof \UnitEnum) { return new Expr\ClassConstFetch(new FullyQualified(\get_class($value)), new Identifier($value->name)); } throw new \LogicException('Invalid value'); } /** * Normalizes a doc comment: Converts plain strings to PhpParser\Comment\Doc. * * @param Comment\Doc|string $docComment The doc comment to normalize * * @return Comment\Doc The normalized doc comment */ public static function normalizeDocComment($docComment) : \PhpParser\Comment\Doc { if ($docComment instanceof \PhpParser\Comment\Doc) { return $docComment; } if (\is_string($docComment)) { return new \PhpParser\Comment\Doc($docComment); } throw new \LogicException('Doc comment must be a string or an instance of PhpParser\\Comment\\Doc'); } /** * Normalizes a attribute: Converts attribute to the Attribute Group if needed. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return Node\AttributeGroup The Attribute Group */ public static function normalizeAttribute($attribute) : \PhpParser\Node\AttributeGroup { if ($attribute instanceof \PhpParser\Node\AttributeGroup) { return $attribute; } if (!$attribute instanceof \PhpParser\Node\Attribute) { throw new \LogicException('Attribute must be an instance of PhpParser\\Node\\Attribute or PhpParser\\Node\\AttributeGroup'); } return new \PhpParser\Node\AttributeGroup([$attribute]); } /** * Adds a modifier and returns new modifier bitmask. * * @param int $modifiers Existing modifiers * @param int $modifier Modifier to set * * @return int New modifiers */ public static function addModifier(int $modifiers, int $modifier) : int { Stmt\Class_::verifyModifier($modifiers, $modifier); return $modifiers | $modifier; } /** * Adds a modifier and returns new modifier bitmask. * @return int New modifiers */ public static function addClassModifier(int $existingModifiers, int $modifierToSet) : int { Stmt\Class_::verifyClassModifier($existingModifiers, $modifierToSet); return $existingModifiers | $modifierToSet; } } PK!Y(php-parser/lib/PhpParser/NodeVisitor.phpnu[ $node stays as-is * * NodeTraverser::DONT_TRAVERSE_CHILDREN * => Children of $node are not traversed. $node stays as-is * * NodeTraverser::STOP_TRAVERSAL * => Traversal is aborted. $node stays as-is * * otherwise * => $node is set to the return value * * @param Node $node Node * * @return null|int|Node Replacement node (or special return value) */ public function enterNode(\PhpParser\Node $node); /** * Called when leaving a node. * * Return value semantics: * * null * => $node stays as-is * * NodeTraverser::REMOVE_NODE * => $node is removed from the parent array * * NodeTraverser::STOP_TRAVERSAL * => Traversal is aborted. $node stays as-is * * array (of Nodes) * => The return value is merged into the parent array (at the position of the $node) * * otherwise * => $node is set to the return value * * @param Node $node Node * * @return null|int|Node|Node[] Replacement node (or special return value) */ public function leaveNode(\PhpParser\Node $node); /** * Called once after traversal. * * Return value semantics: * * null: $nodes stays as-is * * otherwise: $nodes is set to the return value * * @param Node[] $nodes Array of nodes * * @return null|Node[] Array of nodes */ public function afterTraverse(array $nodes); } PK! 2php-parser/lib/PhpParser/PrettyPrinterAbstract.phpnu[ [0, 1], Expr\BitwiseNot::class => [10, 1], Expr\PreInc::class => [10, 1], Expr\PreDec::class => [10, 1], Expr\PostInc::class => [10, -1], Expr\PostDec::class => [10, -1], Expr\UnaryPlus::class => [10, 1], Expr\UnaryMinus::class => [10, 1], Cast\Int_::class => [10, 1], Cast\Double::class => [10, 1], Cast\String_::class => [10, 1], Cast\Array_::class => [10, 1], Cast\Object_::class => [10, 1], Cast\Bool_::class => [10, 1], Cast\Unset_::class => [10, 1], Expr\ErrorSuppress::class => [10, 1], Expr\Instanceof_::class => [20, 0], Expr\BooleanNot::class => [30, 1], BinaryOp\Mul::class => [40, -1], BinaryOp\Div::class => [40, -1], BinaryOp\Mod::class => [40, -1], BinaryOp\Plus::class => [50, -1], BinaryOp\Minus::class => [50, -1], BinaryOp\Concat::class => [50, -1], BinaryOp\ShiftLeft::class => [60, -1], BinaryOp\ShiftRight::class => [60, -1], BinaryOp\Smaller::class => [70, 0], BinaryOp\SmallerOrEqual::class => [70, 0], BinaryOp\Greater::class => [70, 0], BinaryOp\GreaterOrEqual::class => [70, 0], BinaryOp\Equal::class => [80, 0], BinaryOp\NotEqual::class => [80, 0], BinaryOp\Identical::class => [80, 0], BinaryOp\NotIdentical::class => [80, 0], BinaryOp\Spaceship::class => [80, 0], BinaryOp\BitwiseAnd::class => [90, -1], BinaryOp\BitwiseXor::class => [100, -1], BinaryOp\BitwiseOr::class => [110, -1], BinaryOp\BooleanAnd::class => [120, -1], BinaryOp\BooleanOr::class => [130, -1], BinaryOp\Coalesce::class => [140, 1], Expr\Ternary::class => [150, 0], // parser uses %left for assignments, but they really behave as %right Expr\Assign::class => [160, 1], Expr\AssignRef::class => [160, 1], AssignOp\Plus::class => [160, 1], AssignOp\Minus::class => [160, 1], AssignOp\Mul::class => [160, 1], AssignOp\Div::class => [160, 1], AssignOp\Concat::class => [160, 1], AssignOp\Mod::class => [160, 1], AssignOp\BitwiseAnd::class => [160, 1], AssignOp\BitwiseOr::class => [160, 1], AssignOp\BitwiseXor::class => [160, 1], AssignOp\ShiftLeft::class => [160, 1], AssignOp\ShiftRight::class => [160, 1], AssignOp\Pow::class => [160, 1], AssignOp\Coalesce::class => [160, 1], Expr\YieldFrom::class => [165, 1], Expr\Print_::class => [168, 1], BinaryOp\LogicalAnd::class => [170, -1], BinaryOp\LogicalXor::class => [180, -1], BinaryOp\LogicalOr::class => [190, -1], Expr\Include_::class => [200, -1], ]; /** @var int Current indentation level. */ protected $indentLevel; /** @var string Newline including current indentation. */ protected $nl; /** @var string Token placed at end of doc string to ensure it is followed by a newline. */ protected $docStringEndToken; /** @var bool Whether semicolon namespaces can be used (i.e. no global namespace is used) */ protected $canUseSemicolonNamespaces; /** @var array Pretty printer options */ protected $options; /** @var TokenStream Original tokens for use in format-preserving pretty print */ protected $origTokens; /** @var Internal\Differ Differ for node lists */ protected $nodeListDiffer; /** @var bool[] Map determining whether a certain character is a label character */ protected $labelCharMap; /** * @var int[][] Map from token classes and subnode names to FIXUP_* constants. This is used * during format-preserving prints to place additional parens/braces if necessary. */ protected $fixupMap; /** * @var int[][] Map from "{$node->getType()}->{$subNode}" to ['left' => $l, 'right' => $r], * where $l and $r specify the token type that needs to be stripped when removing * this node. */ protected $removalMap; /** * @var mixed[] Map from "{$node->getType()}->{$subNode}" to [$find, $beforeToken, $extraLeft, $extraRight]. * $find is an optional token after which the insertion occurs. $extraLeft/Right * are optionally added before/after the main insertions. */ protected $insertionMap; /** * @var string[] Map From "{$node->getType()}->{$subNode}" to string that should be inserted * between elements of this list subnode. */ protected $listInsertionMap; protected $emptyListInsertionMap; /** @var int[] Map from "{$node->getType()}->{$subNode}" to token before which the modifiers * should be reprinted. */ protected $modifierChangeMap; /** * Creates a pretty printer instance using the given options. * * Supported options: * * bool $shortArraySyntax = false: Whether to use [] instead of array() as the default array * syntax, if the node does not specify a format. * * @param array $options Dictionary of formatting options */ public function __construct(array $options = []) { $this->docStringEndToken = '_DOC_STRING_END_' . \mt_rand(); $defaultOptions = ['shortArraySyntax' => \false]; $this->options = $options + $defaultOptions; } /** * Reset pretty printing state. */ protected function resetState() { $this->indentLevel = 0; $this->nl = "\n"; $this->origTokens = null; } /** * Set indentation level * * @param int $level Level in number of spaces */ protected function setIndentLevel(int $level) { $this->indentLevel = $level; $this->nl = "\n" . \str_repeat(' ', $level); } /** * Increase indentation level. */ protected function indent() { $this->indentLevel += 4; $this->nl .= ' '; } /** * Decrease indentation level. */ protected function outdent() { \assert($this->indentLevel >= 4); $this->indentLevel -= 4; $this->nl = "\n" . \str_repeat(' ', $this->indentLevel); } /** * Pretty prints an array of statements. * * @param Node[] $stmts Array of statements * * @return string Pretty printed statements */ public function prettyPrint(array $stmts) : string { $this->resetState(); $this->preprocessNodes($stmts); return \ltrim($this->handleMagicTokens($this->pStmts($stmts, \false))); } /** * Pretty prints an expression. * * @param Expr $node Expression node * * @return string Pretty printed node */ public function prettyPrintExpr(Expr $node) : string { $this->resetState(); return $this->handleMagicTokens($this->p($node)); } /** * Pretty prints a file of statements (includes the opening prettyPrint($stmts); if ($stmts[0] instanceof Stmt\InlineHTML) { $p = \preg_replace('/^<\\?php\\s+\\?>\\n?/', '', $p); } if ($stmts[\count($stmts) - 1] instanceof Stmt\InlineHTML) { $p = \preg_replace('/<\\?php$/', '', \rtrim($p)); } return $p; } /** * Preprocesses the top-level nodes to initialize pretty printer state. * * @param Node[] $nodes Array of nodes */ protected function preprocessNodes(array $nodes) { /* We can use semicolon-namespaces unless there is a global namespace declaration */ $this->canUseSemicolonNamespaces = \true; foreach ($nodes as $node) { if ($node instanceof Stmt\Namespace_ && null === $node->name) { $this->canUseSemicolonNamespaces = \false; break; } } } /** * Handles (and removes) no-indent and doc-string-end tokens. * * @param string $str * @return string */ protected function handleMagicTokens(string $str) : string { // Replace doc-string-end tokens with nothing or a newline $str = \str_replace($this->docStringEndToken . ";\n", ";\n", $str); $str = \str_replace($this->docStringEndToken, "\n", $str); return $str; } /** * Pretty prints an array of nodes (statements) and indents them optionally. * * @param Node[] $nodes Array of nodes * @param bool $indent Whether to indent the printed nodes * * @return string Pretty printed statements */ protected function pStmts(array $nodes, bool $indent = \true) : string { if ($indent) { $this->indent(); } $result = ''; foreach ($nodes as $node) { $comments = $node->getComments(); if ($comments) { $result .= $this->nl . $this->pComments($comments); if ($node instanceof Stmt\Nop) { continue; } } $result .= $this->nl . $this->p($node); } if ($indent) { $this->outdent(); } return $result; } /** * Pretty-print an infix operation while taking precedence into account. * * @param string $class Node class of operator * @param Node $leftNode Left-hand side node * @param string $operatorString String representation of the operator * @param Node $rightNode Right-hand side node * * @return string Pretty printed infix operation */ protected function pInfixOp(string $class, \PhpParser\Node $leftNode, string $operatorString, \PhpParser\Node $rightNode) : string { list($precedence, $associativity) = $this->precedenceMap[$class]; return $this->pPrec($leftNode, $precedence, $associativity, -1) . $operatorString . $this->pPrec($rightNode, $precedence, $associativity, 1); } /** * Pretty-print a prefix operation while taking precedence into account. * * @param string $class Node class of operator * @param string $operatorString String representation of the operator * @param Node $node Node * * @return string Pretty printed prefix operation */ protected function pPrefixOp(string $class, string $operatorString, \PhpParser\Node $node) : string { list($precedence, $associativity) = $this->precedenceMap[$class]; return $operatorString . $this->pPrec($node, $precedence, $associativity, 1); } /** * Pretty-print a postfix operation while taking precedence into account. * * @param string $class Node class of operator * @param string $operatorString String representation of the operator * @param Node $node Node * * @return string Pretty printed postfix operation */ protected function pPostfixOp(string $class, \PhpParser\Node $node, string $operatorString) : string { list($precedence, $associativity) = $this->precedenceMap[$class]; return $this->pPrec($node, $precedence, $associativity, -1) . $operatorString; } /** * Prints an expression node with the least amount of parentheses necessary to preserve the meaning. * * @param Node $node Node to pretty print * @param int $parentPrecedence Precedence of the parent operator * @param int $parentAssociativity Associativity of parent operator * (-1 is left, 0 is nonassoc, 1 is right) * @param int $childPosition Position of the node relative to the operator * (-1 is left, 1 is right) * * @return string The pretty printed node */ protected function pPrec(\PhpParser\Node $node, int $parentPrecedence, int $parentAssociativity, int $childPosition) : string { $class = \get_class($node); if (isset($this->precedenceMap[$class])) { $childPrecedence = $this->precedenceMap[$class][0]; if ($childPrecedence > $parentPrecedence || $parentPrecedence === $childPrecedence && $parentAssociativity !== $childPosition) { return '(' . $this->p($node) . ')'; } } return $this->p($node); } /** * Pretty prints an array of nodes and implodes the printed values. * * @param Node[] $nodes Array of Nodes to be printed * @param string $glue Character to implode with * * @return string Imploded pretty printed nodes */ protected function pImplode(array $nodes, string $glue = '') : string { $pNodes = []; foreach ($nodes as $node) { if (null === $node) { $pNodes[] = ''; } else { $pNodes[] = $this->p($node); } } return \implode($glue, $pNodes); } /** * Pretty prints an array of nodes and implodes the printed values with commas. * * @param Node[] $nodes Array of Nodes to be printed * * @return string Comma separated pretty printed nodes */ protected function pCommaSeparated(array $nodes) : string { return $this->pImplode($nodes, ', '); } /** * Pretty prints a comma-separated list of nodes in multiline style, including comments. * * The result includes a leading newline and one level of indentation (same as pStmts). * * @param Node[] $nodes Array of Nodes to be printed * @param bool $trailingComma Whether to use a trailing comma * * @return string Comma separated pretty printed nodes in multiline style */ protected function pCommaSeparatedMultiline(array $nodes, bool $trailingComma) : string { $this->indent(); $result = ''; $lastIdx = \count($nodes) - 1; foreach ($nodes as $idx => $node) { if ($node !== null) { $comments = $node->getComments(); if ($comments) { $result .= $this->nl . $this->pComments($comments); } $result .= $this->nl . $this->p($node); } else { $result .= $this->nl; } if ($trailingComma || $idx !== $lastIdx) { $result .= ','; } } $this->outdent(); return $result; } /** * Prints reformatted text of the passed comments. * * @param Comment[] $comments List of comments * * @return string Reformatted text of comments */ protected function pComments(array $comments) : string { $formattedComments = []; foreach ($comments as $comment) { $formattedComments[] = \str_replace("\n", $this->nl, $comment->getReformattedText()); } return \implode($this->nl, $formattedComments); } /** * Perform a format-preserving pretty print of an AST. * * The format preservation is best effort. For some changes to the AST the formatting will not * be preserved (at least not locally). * * In order to use this method a number of prerequisites must be satisfied: * * The startTokenPos and endTokenPos attributes in the lexer must be enabled. * * The CloningVisitor must be run on the AST prior to modification. * * The original tokens must be provided, using the getTokens() method on the lexer. * * @param Node[] $stmts Modified AST with links to original AST * @param Node[] $origStmts Original AST with token offset information * @param array $origTokens Tokens of the original code * * @return string */ public function printFormatPreserving(array $stmts, array $origStmts, array $origTokens) : string { $this->initializeNodeListDiffer(); $this->initializeLabelCharMap(); $this->initializeFixupMap(); $this->initializeRemovalMap(); $this->initializeInsertionMap(); $this->initializeListInsertionMap(); $this->initializeEmptyListInsertionMap(); $this->initializeModifierChangeMap(); $this->resetState(); $this->origTokens = new TokenStream($origTokens); $this->preprocessNodes($stmts); $pos = 0; $result = $this->pArray($stmts, $origStmts, $pos, 0, 'File', 'stmts', null); if (null !== $result) { $result .= $this->origTokens->getTokenCode($pos, \count($origTokens), 0); } else { // Fallback // TODO Add pStmts($stmts, \false); } return \ltrim($this->handleMagicTokens($result)); } protected function pFallback(\PhpParser\Node $node) { return $this->{'p' . $node->getType()}($node); } /** * Pretty prints a node. * * This method also handles formatting preservation for nodes. * * @param Node $node Node to be pretty printed * @param bool $parentFormatPreserved Whether parent node has preserved formatting * * @return string Pretty printed node */ protected function p(\PhpParser\Node $node, $parentFormatPreserved = \false) : string { // No orig tokens means this is a normal pretty print without preservation of formatting if (!$this->origTokens) { return $this->{'p' . $node->getType()}($node); } /** @var Node $origNode */ $origNode = $node->getAttribute('origNode'); if (null === $origNode) { return $this->pFallback($node); } $class = \get_class($node); \assert($class === \get_class($origNode)); $startPos = $origNode->getStartTokenPos(); $endPos = $origNode->getEndTokenPos(); \assert($startPos >= 0 && $endPos >= 0); $fallbackNode = $node; if ($node instanceof Expr\New_ && $node->class instanceof Stmt\Class_) { // Normalize node structure of anonymous classes $node = PrintableNewAnonClassNode::fromNewNode($node); $origNode = PrintableNewAnonClassNode::fromNewNode($origNode); } // InlineHTML node does not contain closing and opening PHP tags. If the parent formatting // is not preserved, then we need to use the fallback code to make sure the tags are // printed. if ($node instanceof Stmt\InlineHTML && !$parentFormatPreserved) { return $this->pFallback($fallbackNode); } $indentAdjustment = $this->indentLevel - $this->origTokens->getIndentationBefore($startPos); $type = $node->getType(); $fixupInfo = $this->fixupMap[$class] ?? null; $result = ''; $pos = $startPos; foreach ($node->getSubNodeNames() as $subNodeName) { $subNode = $node->{$subNodeName}; $origSubNode = $origNode->{$subNodeName}; if (!$subNode instanceof \PhpParser\Node && $subNode !== null || !$origSubNode instanceof \PhpParser\Node && $origSubNode !== null) { if ($subNode === $origSubNode) { // Unchanged, can reuse old code continue; } if (\is_array($subNode) && \is_array($origSubNode)) { // Array subnode changed, we might be able to reconstruct it $listResult = $this->pArray($subNode, $origSubNode, $pos, $indentAdjustment, $type, $subNodeName, $fixupInfo[$subNodeName] ?? null); if (null === $listResult) { return $this->pFallback($fallbackNode); } $result .= $listResult; continue; } if (\is_int($subNode) && \is_int($origSubNode)) { // Check if this is a modifier change $key = $type . '->' . $subNodeName; if (!isset($this->modifierChangeMap[$key])) { return $this->pFallback($fallbackNode); } $findToken = $this->modifierChangeMap[$key]; $result .= $this->pModifiers($subNode); $pos = $this->origTokens->findRight($pos, $findToken); continue; } // If a non-node, non-array subnode changed, we don't be able to do a partial // reconstructions, as we don't have enough offset information. Pretty print the // whole node instead. return $this->pFallback($fallbackNode); } $extraLeft = ''; $extraRight = ''; if ($origSubNode !== null) { $subStartPos = $origSubNode->getStartTokenPos(); $subEndPos = $origSubNode->getEndTokenPos(); \assert($subStartPos >= 0 && $subEndPos >= 0); } else { if ($subNode === null) { // Both null, nothing to do continue; } // A node has been inserted, check if we have insertion information for it $key = $type . '->' . $subNodeName; if (!isset($this->insertionMap[$key])) { return $this->pFallback($fallbackNode); } list($findToken, $beforeToken, $extraLeft, $extraRight) = $this->insertionMap[$key]; if (null !== $findToken) { $subStartPos = $this->origTokens->findRight($pos, $findToken) + (int) (!$beforeToken); } else { $subStartPos = $pos; } if (null === $extraLeft && null !== $extraRight) { // If inserting on the right only, skipping whitespace looks better $subStartPos = $this->origTokens->skipRightWhitespace($subStartPos); } $subEndPos = $subStartPos - 1; } if (null === $subNode) { // A node has been removed, check if we have removal information for it $key = $type . '->' . $subNodeName; if (!isset($this->removalMap[$key])) { return $this->pFallback($fallbackNode); } // Adjust positions to account for additional tokens that must be skipped $removalInfo = $this->removalMap[$key]; if (isset($removalInfo['left'])) { $subStartPos = $this->origTokens->skipLeft($subStartPos - 1, $removalInfo['left']) + 1; } if (isset($removalInfo['right'])) { $subEndPos = $this->origTokens->skipRight($subEndPos + 1, $removalInfo['right']) - 1; } } $result .= $this->origTokens->getTokenCode($pos, $subStartPos, $indentAdjustment); if (null !== $subNode) { $result .= $extraLeft; $origIndentLevel = $this->indentLevel; $this->setIndentLevel(\max($this->origTokens->getIndentationBefore($subStartPos) + $indentAdjustment, 0)); // If it's the same node that was previously in this position, it certainly doesn't // need fixup. It's important to check this here, because our fixup checks are more // conservative than strictly necessary. if (isset($fixupInfo[$subNodeName]) && $subNode->getAttribute('origNode') !== $origSubNode) { $fixup = $fixupInfo[$subNodeName]; $res = $this->pFixup($fixup, $subNode, $class, $subStartPos, $subEndPos); } else { $res = $this->p($subNode, \true); } $this->safeAppend($result, $res); $this->setIndentLevel($origIndentLevel); $result .= $extraRight; } $pos = $subEndPos + 1; } $result .= $this->origTokens->getTokenCode($pos, $endPos + 1, $indentAdjustment); return $result; } /** * Perform a format-preserving pretty print of an array. * * @param array $nodes New nodes * @param array $origNodes Original nodes * @param int $pos Current token position (updated by reference) * @param int $indentAdjustment Adjustment for indentation * @param string $parentNodeType Type of the containing node. * @param string $subNodeName Name of array subnode. * @param null|int $fixup Fixup information for array item nodes * * @return null|string Result of pretty print or null if cannot preserve formatting */ protected function pArray(array $nodes, array $origNodes, int &$pos, int $indentAdjustment, string $parentNodeType, string $subNodeName, $fixup) { $diff = $this->nodeListDiffer->diffWithReplacements($origNodes, $nodes); $mapKey = $parentNodeType . '->' . $subNodeName; $insertStr = $this->listInsertionMap[$mapKey] ?? null; $isStmtList = $subNodeName === 'stmts'; $beforeFirstKeepOrReplace = \true; $skipRemovedNode = \false; $delayedAdd = []; $lastElemIndentLevel = $this->indentLevel; $insertNewline = \false; if ($insertStr === "\n") { $insertStr = ''; $insertNewline = \true; } if ($isStmtList && \count($origNodes) === 1 && \count($nodes) !== 1) { $startPos = $origNodes[0]->getStartTokenPos(); $endPos = $origNodes[0]->getEndTokenPos(); \assert($startPos >= 0 && $endPos >= 0); if (!$this->origTokens->haveBraces($startPos, $endPos)) { // This was a single statement without braces, but either additional statements // have been added, or the single statement has been removed. This requires the // addition of braces. For now fall back. // TODO: Try to preserve formatting return null; } } $result = ''; foreach ($diff as $i => $diffElem) { $diffType = $diffElem->type; /** @var Node|null $arrItem */ $arrItem = $diffElem->new; /** @var Node|null $origArrItem */ $origArrItem = $diffElem->old; if ($diffType === DiffElem::TYPE_KEEP || $diffType === DiffElem::TYPE_REPLACE) { $beforeFirstKeepOrReplace = \false; if ($origArrItem === null || $arrItem === null) { // We can only handle the case where both are null if ($origArrItem === $arrItem) { continue; } return null; } if (!$arrItem instanceof \PhpParser\Node || !$origArrItem instanceof \PhpParser\Node) { // We can only deal with nodes. This can occur for Names, which use string arrays. return null; } $itemStartPos = $origArrItem->getStartTokenPos(); $itemEndPos = $origArrItem->getEndTokenPos(); \assert($itemStartPos >= 0 && $itemEndPos >= 0 && $itemStartPos >= $pos); $origIndentLevel = $this->indentLevel; $lastElemIndentLevel = \max($this->origTokens->getIndentationBefore($itemStartPos) + $indentAdjustment, 0); $this->setIndentLevel($lastElemIndentLevel); $comments = $arrItem->getComments(); $origComments = $origArrItem->getComments(); $commentStartPos = $origComments ? $origComments[0]->getStartTokenPos() : $itemStartPos; \assert($commentStartPos >= 0); if ($commentStartPos < $pos) { // Comments may be assigned to multiple nodes if they start at the same position. // Make sure we don't try to print them multiple times. $commentStartPos = $itemStartPos; } if ($skipRemovedNode) { if ($isStmtList && ($this->origTokens->haveBracesInRange($pos, $itemStartPos) || $this->origTokens->haveTagInRange($pos, $itemStartPos))) { // We'd remove the brace of a code block. // TODO: Preserve formatting. $this->setIndentLevel($origIndentLevel); return null; } } else { $result .= $this->origTokens->getTokenCode($pos, $commentStartPos, $indentAdjustment); } if (!empty($delayedAdd)) { /** @var Node $delayedAddNode */ foreach ($delayedAdd as $delayedAddNode) { if ($insertNewline) { $delayedAddComments = $delayedAddNode->getComments(); if ($delayedAddComments) { $result .= $this->pComments($delayedAddComments) . $this->nl; } } $this->safeAppend($result, $this->p($delayedAddNode, \true)); if ($insertNewline) { $result .= $insertStr . $this->nl; } else { $result .= $insertStr; } } $delayedAdd = []; } if ($comments !== $origComments) { if ($comments) { $result .= $this->pComments($comments) . $this->nl; } } else { $result .= $this->origTokens->getTokenCode($commentStartPos, $itemStartPos, $indentAdjustment); } // If we had to remove anything, we have done so now. $skipRemovedNode = \false; } elseif ($diffType === DiffElem::TYPE_ADD) { if (null === $insertStr) { // We don't have insertion information for this list type return null; } // We go multiline if the original code was multiline, // or if it's an array item with a comment above it. if ($insertStr === ', ' && ($this->isMultiline($origNodes) || $arrItem->getComments())) { $insertStr = ','; $insertNewline = \true; } if ($beforeFirstKeepOrReplace) { // Will be inserted at the next "replace" or "keep" element $delayedAdd[] = $arrItem; continue; } $itemStartPos = $pos; $itemEndPos = $pos - 1; $origIndentLevel = $this->indentLevel; $this->setIndentLevel($lastElemIndentLevel); if ($insertNewline) { $result .= $insertStr . $this->nl; $comments = $arrItem->getComments(); if ($comments) { $result .= $this->pComments($comments) . $this->nl; } } else { $result .= $insertStr; } } elseif ($diffType === DiffElem::TYPE_REMOVE) { if (!$origArrItem instanceof \PhpParser\Node) { // We only support removal for nodes return null; } $itemStartPos = $origArrItem->getStartTokenPos(); $itemEndPos = $origArrItem->getEndTokenPos(); \assert($itemStartPos >= 0 && $itemEndPos >= 0); // Consider comments part of the node. $origComments = $origArrItem->getComments(); if ($origComments) { $itemStartPos = $origComments[0]->getStartTokenPos(); } if ($i === 0) { // If we're removing from the start, keep the tokens before the node and drop those after it, // instead of the other way around. $result .= $this->origTokens->getTokenCode($pos, $itemStartPos, $indentAdjustment); $skipRemovedNode = \true; } else { if ($isStmtList && ($this->origTokens->haveBracesInRange($pos, $itemStartPos) || $this->origTokens->haveTagInRange($pos, $itemStartPos))) { // We'd remove the brace of a code block. // TODO: Preserve formatting. return null; } } $pos = $itemEndPos + 1; continue; } else { throw new \Exception("Shouldn't happen"); } if (null !== $fixup && $arrItem->getAttribute('origNode') !== $origArrItem) { $res = $this->pFixup($fixup, $arrItem, null, $itemStartPos, $itemEndPos); } else { $res = $this->p($arrItem, \true); } $this->safeAppend($result, $res); $this->setIndentLevel($origIndentLevel); $pos = $itemEndPos + 1; } if ($skipRemovedNode) { // TODO: Support removing single node. return null; } if (!empty($delayedAdd)) { if (!isset($this->emptyListInsertionMap[$mapKey])) { return null; } list($findToken, $extraLeft, $extraRight) = $this->emptyListInsertionMap[$mapKey]; if (null !== $findToken) { $insertPos = $this->origTokens->findRight($pos, $findToken) + 1; $result .= $this->origTokens->getTokenCode($pos, $insertPos, $indentAdjustment); $pos = $insertPos; } $first = \true; $result .= $extraLeft; foreach ($delayedAdd as $delayedAddNode) { if (!$first) { $result .= $insertStr; if ($insertNewline) { $result .= $this->nl; } } $result .= $this->p($delayedAddNode, \true); $first = \false; } $result .= $extraRight === "\n" ? $this->nl : $extraRight; } return $result; } /** * Print node with fixups. * * Fixups here refer to the addition of extra parentheses, braces or other characters, that * are required to preserve program semantics in a certain context (e.g. to maintain precedence * or because only certain expressions are allowed in certain places). * * @param int $fixup Fixup type * @param Node $subNode Subnode to print * @param string|null $parentClass Class of parent node * @param int $subStartPos Original start pos of subnode * @param int $subEndPos Original end pos of subnode * * @return string Result of fixed-up print of subnode */ protected function pFixup(int $fixup, \PhpParser\Node $subNode, $parentClass, int $subStartPos, int $subEndPos) : string { switch ($fixup) { case self::FIXUP_PREC_LEFT: case self::FIXUP_PREC_RIGHT: if (!$this->origTokens->haveParens($subStartPos, $subEndPos)) { list($precedence, $associativity) = $this->precedenceMap[$parentClass]; return $this->pPrec($subNode, $precedence, $associativity, $fixup === self::FIXUP_PREC_LEFT ? -1 : 1); } break; case self::FIXUP_CALL_LHS: if ($this->callLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { return '(' . $this->p($subNode) . ')'; } break; case self::FIXUP_DEREF_LHS: if ($this->dereferenceLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { return '(' . $this->p($subNode) . ')'; } break; case self::FIXUP_STATIC_DEREF_LHS: if ($this->staticDereferenceLhsRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { return '(' . $this->p($subNode) . ')'; } break; case self::FIXUP_NEW: if ($this->newOperandRequiresParens($subNode) && !$this->origTokens->haveParens($subStartPos, $subEndPos)) { return '(' . $this->p($subNode) . ')'; } break; case self::FIXUP_BRACED_NAME: case self::FIXUP_VAR_BRACED_NAME: if ($subNode instanceof Expr && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { return ($fixup === self::FIXUP_VAR_BRACED_NAME ? '$' : '') . '{' . $this->p($subNode) . '}'; } break; case self::FIXUP_ENCAPSED: if (!$subNode instanceof Scalar\EncapsedStringPart && !$this->origTokens->haveBraces($subStartPos, $subEndPos)) { return '{' . $this->p($subNode) . '}'; } break; default: throw new \Exception('Cannot happen'); } // Nothing special to do return $this->p($subNode); } /** * Appends to a string, ensuring whitespace between label characters. * * Example: "echo" and "$x" result in "echo$x", but "echo" and "x" result in "echo x". * Without safeAppend the result would be "echox", which does not preserve semantics. * * @param string $str * @param string $append */ protected function safeAppend(string &$str, string $append) { if ($str === "") { $str = $append; return; } if ($append === "") { return; } if (!$this->labelCharMap[$append[0]] || !$this->labelCharMap[$str[\strlen($str) - 1]]) { $str .= $append; } else { $str .= " " . $append; } } /** * Determines whether the LHS of a call must be wrapped in parenthesis. * * @param Node $node LHS of a call * * @return bool Whether parentheses are required */ protected function callLhsRequiresParens(\PhpParser\Node $node) : bool { return !($node instanceof \PhpParser\Node\Name || $node instanceof Expr\Variable || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_); } /** * Determines whether the LHS of an array/object operation must be wrapped in parentheses. * * @param Node $node LHS of dereferencing operation * * @return bool Whether parentheses are required */ protected function dereferenceLhsRequiresParens(\PhpParser\Node $node) : bool { // A constant can occur on the LHS of an array/object deref, but not a static deref. return $this->staticDereferenceLhsRequiresParens($node) && !$node instanceof Expr\ConstFetch; } /** * Determines whether the LHS of a static operation must be wrapped in parentheses. * * @param Node $node LHS of dereferencing operation * * @return bool Whether parentheses are required */ protected function staticDereferenceLhsRequiresParens(\PhpParser\Node $node) : bool { return !($node instanceof Expr\Variable || $node instanceof \PhpParser\Node\Name || $node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\FuncCall || $node instanceof Expr\MethodCall || $node instanceof Expr\NullsafeMethodCall || $node instanceof Expr\StaticCall || $node instanceof Expr\Array_ || $node instanceof Scalar\String_ || $node instanceof Expr\ClassConstFetch); } /** * Determines whether an expression used in "new" or "instanceof" requires parentheses. * * @param Node $node New or instanceof operand * * @return bool Whether parentheses are required */ protected function newOperandRequiresParens(\PhpParser\Node $node) : bool { if ($node instanceof \PhpParser\Node\Name || $node instanceof Expr\Variable) { return \false; } if ($node instanceof Expr\ArrayDimFetch || $node instanceof Expr\PropertyFetch || $node instanceof Expr\NullsafePropertyFetch) { return $this->newOperandRequiresParens($node->var); } if ($node instanceof Expr\StaticPropertyFetch) { return $this->newOperandRequiresParens($node->class); } return \true; } /** * Print modifiers, including trailing whitespace. * * @param int $modifiers Modifier mask to print * * @return string Printed modifiers */ protected function pModifiers(int $modifiers) { return ($modifiers & Stmt\Class_::MODIFIER_PUBLIC ? 'public ' : '') . ($modifiers & Stmt\Class_::MODIFIER_PROTECTED ? 'protected ' : '') . ($modifiers & Stmt\Class_::MODIFIER_PRIVATE ? 'private ' : '') . ($modifiers & Stmt\Class_::MODIFIER_STATIC ? 'static ' : '') . ($modifiers & Stmt\Class_::MODIFIER_ABSTRACT ? 'abstract ' : '') . ($modifiers & Stmt\Class_::MODIFIER_FINAL ? 'final ' : '') . ($modifiers & Stmt\Class_::MODIFIER_READONLY ? 'readonly ' : ''); } /** * Determine whether a list of nodes uses multiline formatting. * * @param (Node|null)[] $nodes Node list * * @return bool Whether multiline formatting is used */ protected function isMultiline(array $nodes) : bool { if (\count($nodes) < 2) { return \false; } $pos = -1; foreach ($nodes as $node) { if (null === $node) { continue; } $endPos = $node->getEndTokenPos() + 1; if ($pos >= 0) { $text = $this->origTokens->getTokenCode($pos, $endPos, 0); if (\false === \strpos($text, "\n")) { // We require that a newline is present between *every* item. If the formatting // is inconsistent, with only some items having newlines, we don't consider it // as multiline return \false; } } $pos = $endPos; } return \true; } /** * Lazily initializes label char map. * * The label char map determines whether a certain character may occur in a label. */ protected function initializeLabelCharMap() { if ($this->labelCharMap) { return; } $this->labelCharMap = []; for ($i = 0; $i < 256; $i++) { // Since PHP 7.1 The lower range is 0x80. However, we also want to support code for // older versions. $chr = \chr($i); $this->labelCharMap[$chr] = $i >= 0x7f || \ctype_alnum($chr); } } /** * Lazily initializes node list differ. * * The node list differ is used to determine differences between two array subnodes. */ protected function initializeNodeListDiffer() { if ($this->nodeListDiffer) { return; } $this->nodeListDiffer = new \PhpParser\Internal\Differ(function ($a, $b) { if ($a instanceof \PhpParser\Node && $b instanceof \PhpParser\Node) { return $a === $b->getAttribute('origNode'); } // Can happen for array destructuring return $a === null && $b === null; }); } /** * Lazily initializes fixup map. * * The fixup map is used to determine whether a certain subnode of a certain node may require * some kind of "fixup" operation, e.g. the addition of parenthesis or braces. */ protected function initializeFixupMap() { if ($this->fixupMap) { return; } $this->fixupMap = [Expr\PreInc::class => ['var' => self::FIXUP_PREC_RIGHT], Expr\PreDec::class => ['var' => self::FIXUP_PREC_RIGHT], Expr\PostInc::class => ['var' => self::FIXUP_PREC_LEFT], Expr\PostDec::class => ['var' => self::FIXUP_PREC_LEFT], Expr\Instanceof_::class => ['expr' => self::FIXUP_PREC_LEFT, 'class' => self::FIXUP_NEW], Expr\Ternary::class => ['cond' => self::FIXUP_PREC_LEFT, 'else' => self::FIXUP_PREC_RIGHT], Expr\FuncCall::class => ['name' => self::FIXUP_CALL_LHS], Expr\StaticCall::class => ['class' => self::FIXUP_STATIC_DEREF_LHS], Expr\ArrayDimFetch::class => ['var' => self::FIXUP_DEREF_LHS], Expr\ClassConstFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\New_::class => ['class' => self::FIXUP_NEW], Expr\MethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafeMethodCall::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\StaticPropertyFetch::class => ['class' => self::FIXUP_STATIC_DEREF_LHS, 'name' => self::FIXUP_VAR_BRACED_NAME], Expr\PropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Expr\NullsafePropertyFetch::class => ['var' => self::FIXUP_DEREF_LHS, 'name' => self::FIXUP_BRACED_NAME], Scalar\Encapsed::class => ['parts' => self::FIXUP_ENCAPSED]]; $binaryOps = [BinaryOp\Pow::class, BinaryOp\Mul::class, BinaryOp\Div::class, BinaryOp\Mod::class, BinaryOp\Plus::class, BinaryOp\Minus::class, BinaryOp\Concat::class, BinaryOp\ShiftLeft::class, BinaryOp\ShiftRight::class, BinaryOp\Smaller::class, BinaryOp\SmallerOrEqual::class, BinaryOp\Greater::class, BinaryOp\GreaterOrEqual::class, BinaryOp\Equal::class, BinaryOp\NotEqual::class, BinaryOp\Identical::class, BinaryOp\NotIdentical::class, BinaryOp\Spaceship::class, BinaryOp\BitwiseAnd::class, BinaryOp\BitwiseXor::class, BinaryOp\BitwiseOr::class, BinaryOp\BooleanAnd::class, BinaryOp\BooleanOr::class, BinaryOp\Coalesce::class, BinaryOp\LogicalAnd::class, BinaryOp\LogicalXor::class, BinaryOp\LogicalOr::class]; foreach ($binaryOps as $binaryOp) { $this->fixupMap[$binaryOp] = ['left' => self::FIXUP_PREC_LEFT, 'right' => self::FIXUP_PREC_RIGHT]; } $assignOps = [Expr\Assign::class, Expr\AssignRef::class, AssignOp\Plus::class, AssignOp\Minus::class, AssignOp\Mul::class, AssignOp\Div::class, AssignOp\Concat::class, AssignOp\Mod::class, AssignOp\BitwiseAnd::class, AssignOp\BitwiseOr::class, AssignOp\BitwiseXor::class, AssignOp\ShiftLeft::class, AssignOp\ShiftRight::class, AssignOp\Pow::class, AssignOp\Coalesce::class]; foreach ($assignOps as $assignOp) { $this->fixupMap[$assignOp] = ['var' => self::FIXUP_PREC_LEFT, 'expr' => self::FIXUP_PREC_RIGHT]; } $prefixOps = [Expr\BitwiseNot::class, Expr\BooleanNot::class, Expr\UnaryPlus::class, Expr\UnaryMinus::class, Cast\Int_::class, Cast\Double::class, Cast\String_::class, Cast\Array_::class, Cast\Object_::class, Cast\Bool_::class, Cast\Unset_::class, Expr\ErrorSuppress::class, Expr\YieldFrom::class, Expr\Print_::class, Expr\Include_::class]; foreach ($prefixOps as $prefixOp) { $this->fixupMap[$prefixOp] = ['expr' => self::FIXUP_PREC_RIGHT]; } } /** * Lazily initializes the removal map. * * The removal map is used to determine which additional tokens should be removed when a * certain node is replaced by null. */ protected function initializeRemovalMap() { if ($this->removalMap) { return; } $stripBoth = ['left' => \T_WHITESPACE, 'right' => \T_WHITESPACE]; $stripLeft = ['left' => \T_WHITESPACE]; $stripRight = ['right' => \T_WHITESPACE]; $stripDoubleArrow = ['right' => \T_DOUBLE_ARROW]; $stripColon = ['left' => ':']; $stripEquals = ['left' => '=']; $this->removalMap = ['Expr_ArrayDimFetch->dim' => $stripBoth, 'Expr_ArrayItem->key' => $stripDoubleArrow, 'Expr_ArrowFunction->returnType' => $stripColon, 'Expr_Closure->returnType' => $stripColon, 'Expr_Exit->expr' => $stripBoth, 'Expr_Ternary->if' => $stripBoth, 'Expr_Yield->key' => $stripDoubleArrow, 'Expr_Yield->value' => $stripBoth, 'Param->type' => $stripRight, 'Param->default' => $stripEquals, 'Stmt_Break->num' => $stripBoth, 'Stmt_Catch->var' => $stripLeft, 'Stmt_ClassConst->type' => $stripRight, 'Stmt_ClassMethod->returnType' => $stripColon, 'Stmt_Class->extends' => ['left' => \T_EXTENDS], 'Stmt_Enum->scalarType' => $stripColon, 'Stmt_EnumCase->expr' => $stripEquals, 'Expr_PrintableNewAnonClass->extends' => ['left' => \T_EXTENDS], 'Stmt_Continue->num' => $stripBoth, 'Stmt_Foreach->keyVar' => $stripDoubleArrow, 'Stmt_Function->returnType' => $stripColon, 'Stmt_If->else' => $stripLeft, 'Stmt_Namespace->name' => $stripLeft, 'Stmt_Property->type' => $stripRight, 'Stmt_PropertyProperty->default' => $stripEquals, 'Stmt_Return->expr' => $stripBoth, 'Stmt_StaticVar->default' => $stripEquals, 'Stmt_TraitUseAdaptation_Alias->newName' => $stripLeft, 'Stmt_TryCatch->finally' => $stripLeft]; } protected function initializeInsertionMap() { if ($this->insertionMap) { return; } // TODO: "yield" where both key and value are inserted doesn't work // [$find, $beforeToken, $extraLeft, $extraRight] $this->insertionMap = [ 'Expr_ArrayDimFetch->dim' => ['[', \false, null, null], 'Expr_ArrayItem->key' => [null, \false, null, ' => '], 'Expr_ArrowFunction->returnType' => [')', \false, ' : ', null], 'Expr_Closure->returnType' => [')', \false, ' : ', null], 'Expr_Ternary->if' => ['?', \false, ' ', ' '], 'Expr_Yield->key' => [\T_YIELD, \false, null, ' => '], 'Expr_Yield->value' => [\T_YIELD, \false, ' ', null], 'Param->type' => [null, \false, null, ' '], 'Param->default' => [null, \false, ' = ', null], 'Stmt_Break->num' => [\T_BREAK, \false, ' ', null], 'Stmt_Catch->var' => [null, \false, ' ', null], 'Stmt_ClassMethod->returnType' => [')', \false, ' : ', null], 'Stmt_ClassConst->type' => [\T_CONST, \false, ' ', null], 'Stmt_Class->extends' => [null, \false, ' extends ', null], 'Stmt_Enum->scalarType' => [null, \false, ' : ', null], 'Stmt_EnumCase->expr' => [null, \false, ' = ', null], 'Expr_PrintableNewAnonClass->extends' => [null, ' extends ', null], 'Stmt_Continue->num' => [\T_CONTINUE, \false, ' ', null], 'Stmt_Foreach->keyVar' => [\T_AS, \false, null, ' => '], 'Stmt_Function->returnType' => [')', \false, ' : ', null], 'Stmt_If->else' => [null, \false, ' ', null], 'Stmt_Namespace->name' => [\T_NAMESPACE, \false, ' ', null], 'Stmt_Property->type' => [\T_VARIABLE, \true, null, ' '], 'Stmt_PropertyProperty->default' => [null, \false, ' = ', null], 'Stmt_Return->expr' => [\T_RETURN, \false, ' ', null], 'Stmt_StaticVar->default' => [null, \false, ' = ', null], //'Stmt_TraitUseAdaptation_Alias->newName' => [T_AS, false, ' ', null], // TODO 'Stmt_TryCatch->finally' => [null, \false, ' ', null], ]; } protected function initializeListInsertionMap() { if ($this->listInsertionMap) { return; } $this->listInsertionMap = [ // special //'Expr_ShellExec->parts' => '', // TODO These need to be treated more carefully //'Scalar_Encapsed->parts' => '', 'Stmt_Catch->types' => '|', 'UnionType->types' => '|', 'IntersectionType->types' => '&', 'Stmt_If->elseifs' => ' ', 'Stmt_TryCatch->catches' => ' ', // comma-separated lists 'Expr_Array->items' => ', ', 'Expr_ArrowFunction->params' => ', ', 'Expr_Closure->params' => ', ', 'Expr_Closure->uses' => ', ', 'Expr_FuncCall->args' => ', ', 'Expr_Isset->vars' => ', ', 'Expr_List->items' => ', ', 'Expr_MethodCall->args' => ', ', 'Expr_NullsafeMethodCall->args' => ', ', 'Expr_New->args' => ', ', 'Expr_PrintableNewAnonClass->args' => ', ', 'Expr_StaticCall->args' => ', ', 'Stmt_ClassConst->consts' => ', ', 'Stmt_ClassMethod->params' => ', ', 'Stmt_Class->implements' => ', ', 'Stmt_Enum->implements' => ', ', 'Expr_PrintableNewAnonClass->implements' => ', ', 'Stmt_Const->consts' => ', ', 'Stmt_Declare->declares' => ', ', 'Stmt_Echo->exprs' => ', ', 'Stmt_For->init' => ', ', 'Stmt_For->cond' => ', ', 'Stmt_For->loop' => ', ', 'Stmt_Function->params' => ', ', 'Stmt_Global->vars' => ', ', 'Stmt_GroupUse->uses' => ', ', 'Stmt_Interface->extends' => ', ', 'Stmt_Match->arms' => ', ', 'Stmt_Property->props' => ', ', 'Stmt_StaticVar->vars' => ', ', 'Stmt_TraitUse->traits' => ', ', 'Stmt_TraitUseAdaptation_Precedence->insteadof' => ', ', 'Stmt_Unset->vars' => ', ', 'Stmt_Use->uses' => ', ', 'MatchArm->conds' => ', ', 'AttributeGroup->attrs' => ', ', // statement lists 'Expr_Closure->stmts' => "\n", 'Stmt_Case->stmts' => "\n", 'Stmt_Catch->stmts' => "\n", 'Stmt_Class->stmts' => "\n", 'Stmt_Enum->stmts' => "\n", 'Expr_PrintableNewAnonClass->stmts' => "\n", 'Stmt_Interface->stmts' => "\n", 'Stmt_Trait->stmts' => "\n", 'Stmt_ClassMethod->stmts' => "\n", 'Stmt_Declare->stmts' => "\n", 'Stmt_Do->stmts' => "\n", 'Stmt_ElseIf->stmts' => "\n", 'Stmt_Else->stmts' => "\n", 'Stmt_Finally->stmts' => "\n", 'Stmt_Foreach->stmts' => "\n", 'Stmt_For->stmts' => "\n", 'Stmt_Function->stmts' => "\n", 'Stmt_If->stmts' => "\n", 'Stmt_Namespace->stmts' => "\n", 'Stmt_Class->attrGroups' => "\n", 'Stmt_Enum->attrGroups' => "\n", 'Stmt_EnumCase->attrGroups' => "\n", 'Stmt_Interface->attrGroups' => "\n", 'Stmt_Trait->attrGroups' => "\n", 'Stmt_Function->attrGroups' => "\n", 'Stmt_ClassMethod->attrGroups' => "\n", 'Stmt_ClassConst->attrGroups' => "\n", 'Stmt_Property->attrGroups' => "\n", 'Expr_PrintableNewAnonClass->attrGroups' => ' ', 'Expr_Closure->attrGroups' => ' ', 'Expr_ArrowFunction->attrGroups' => ' ', 'Param->attrGroups' => ' ', 'Stmt_Switch->cases' => "\n", 'Stmt_TraitUse->adaptations' => "\n", 'Stmt_TryCatch->stmts' => "\n", 'Stmt_While->stmts' => "\n", // dummy for top-level context 'File->stmts' => "\n", ]; } protected function initializeEmptyListInsertionMap() { if ($this->emptyListInsertionMap) { return; } // TODO Insertion into empty statement lists. // [$find, $extraLeft, $extraRight] $this->emptyListInsertionMap = ['Expr_ArrowFunction->params' => ['(', '', ''], 'Expr_Closure->uses' => [')', ' use(', ')'], 'Expr_Closure->params' => ['(', '', ''], 'Expr_FuncCall->args' => ['(', '', ''], 'Expr_MethodCall->args' => ['(', '', ''], 'Expr_NullsafeMethodCall->args' => ['(', '', ''], 'Expr_New->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->args' => ['(', '', ''], 'Expr_PrintableNewAnonClass->implements' => [null, ' implements ', ''], 'Expr_StaticCall->args' => ['(', '', ''], 'Stmt_Class->implements' => [null, ' implements ', ''], 'Stmt_Enum->implements' => [null, ' implements ', ''], 'Stmt_ClassMethod->params' => ['(', '', ''], 'Stmt_Interface->extends' => [null, ' extends ', ''], 'Stmt_Function->params' => ['(', '', ''], 'Stmt_Interface->attrGroups' => [null, '', "\n"], 'Stmt_Class->attrGroups' => [null, '', "\n"], 'Stmt_ClassConst->attrGroups' => [null, '', "\n"], 'Stmt_ClassMethod->attrGroups' => [null, '', "\n"], 'Stmt_Function->attrGroups' => [null, '', "\n"], 'Stmt_Property->attrGroups' => [null, '', "\n"], 'Stmt_Trait->attrGroups' => [null, '', "\n"], 'Expr_ArrowFunction->attrGroups' => [null, '', ' '], 'Expr_Closure->attrGroups' => [null, '', ' '], 'Expr_PrintableNewAnonClass->attrGroups' => [\T_NEW, ' ', '']]; } protected function initializeModifierChangeMap() { if ($this->modifierChangeMap) { return; } $this->modifierChangeMap = ['Stmt_ClassConst->flags' => \T_CONST, 'Stmt_ClassMethod->flags' => \T_FUNCTION, 'Stmt_Class->flags' => \T_CLASS, 'Stmt_Property->flags' => \T_VARIABLE, 'Expr_PrintableNewAnonClass->flags' => \T_CLASS, 'Param->flags' => \T_VARIABLE]; // List of integer subnodes that are not modifiers: // Expr_Include->type // Stmt_GroupUse->type // Stmt_Use->type // Stmt_UseUse->type } } PK!eȊԃ!php-parser/lib/PhpParser/Node.phpnu['", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "';'", "'{'", "'}'", "'('", "')'", "'\$'", "'`'", "']'", "'\"'", "T_ENUM", "T_NULLSAFE_OBJECT_OPERATOR", "T_ATTRIBUTE"); protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 164, 168, 161, 55, 168, 168, 159, 160, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 156, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 163, 36, 168, 162, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 157, 35, 158, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 165, 131, 132, 133, 166, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 167); protected $action = array(701, 671, 672, 673, 674, 675, 286, 676, 677, 678, 714, 715, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 0, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 245, 246, 242, 243, 244, -32766, -32766, 679, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 1230, 245, 246, 1231, 680, 681, 682, 683, 684, 685, 686, 900, 901, 748, -32766, -32766, -32766, -32766, -32766, -32766, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 717, 740, 718, 719, 720, 721, 709, 710, 711, 739, 712, 713, 698, 699, 700, 702, 703, 704, 742, 743, 744, 745, 746, 747, 876, 705, 706, 707, 708, 738, 729, 727, 728, 724, 725, 1047, 716, 722, 723, 730, 731, 733, 732, 734, 735, 55, 56, 425, 57, 58, 726, 737, 736, 756, 59, 60, -226, 61, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 337, -32767, -32767, -32767, -32767, 29, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 621, -32766, -32766, -32766, -32766, 62, 63, 1047, -32766, -32766, -32766, 64, 419, 65, 294, 295, 66, 67, 68, 69, 70, 71, 72, 73, 824, 25, 302, 74, 418, 985, 987, 670, 669, 1101, 1102, 1079, 756, 756, 768, 1221, 769, 470, -32766, -32766, -32766, 341, 750, 825, 54, -32767, -32767, -32767, -32767, 98, 99, 100, 101, 102, 220, 221, 222, 362, 877, -32766, 27, -32766, -32766, -32766, -32766, -32766, 1047, 492, 126, 1081, 1080, 1082, 370, 1069, 931, 207, 478, 479, 953, 954, 955, 952, 951, 950, 128, 480, 481, 804, 1107, 1108, 1109, 1110, 1104, 1105, 319, 32, 297, 10, 211, -515, 1111, 1106, 670, 669, 1081, 1080, 1082, 220, 221, 222, 41, 364, 341, 334, 421, 336, 426, -128, -128, -128, 313, 1047, 469, -4, 825, 54, 813, 597, 207, 40, 21, 427, -128, 471, -128, 472, -128, 473, -128, 1047, 428, 220, 221, 222, -32766, 33, 34, 429, 361, 327, 52, 35, 474, -32766, -32766, -32766, 342, 357, 358, 475, 476, 48, 207, 249, 670, 669, 477, 443, 300, 796, 847, 430, 431, 28, -32766, 815, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 953, 954, 955, 952, 951, 950, 422, 756, 424, 426, 827, 635, -128, -32766, -32766, 469, 825, 54, 288, 813, 1152, 756, 40, 21, 427, 317, 471, 345, 472, 129, 473, 9, 1187, 428, 612, 360, 324, 906, 33, 34, 429, 361, 1047, 415, 35, 474, 945, 1069, 315, 125, 357, 358, 475, 476, -32766, -32766, -32766, 927, 302, 477, 121, 1069, 760, 847, 430, 431, 670, 669, 423, 756, 1153, 810, 1047, 480, 767, -32766, 806, -32766, -32766, -32766, -32766, -261, 127, 347, 436, 842, 341, 1079, 1201, 426, 446, 827, 635, -4, 808, 469, 825, 54, 436, 813, 341, 756, 40, 21, 427, 444, 471, 130, 472, 1069, 473, 346, 768, 428, 769, -211, -211, -211, 33, 34, 429, 361, 308, 1077, 35, 474, -32766, -32766, -32766, 1047, 357, 358, 475, 476, -32766, -32766, -32766, 907, 120, 477, 538, 1069, 796, 847, 430, 431, 436, -32766, 341, -32766, -32766, -32766, 1047, 480, 811, -32766, 926, -32766, -32766, 755, 1081, 1080, 1082, 49, -32766, -32766, -32766, 750, 752, 426, 1202, 827, 635, -211, 30, 469, 670, 669, 436, 813, 341, 75, 40, 21, 427, -32766, 471, 1065, 472, 124, 473, 670, 669, 428, 212, -210, -210, -210, 33, 34, 429, 361, 51, 1187, 35, 474, 756, -32766, -32766, -32766, 357, 358, 475, 476, 213, 825, 54, 221, 222, 477, 20, 580, 796, 847, 430, 431, 220, 221, 222, 756, 222, 247, 78, 79, 80, 81, 341, 207, 516, 103, 104, 105, 753, 307, 131, 638, 1069, 207, 341, 207, 122, 827, 635, -210, 36, 106, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 1113, 307, 346, 436, 214, 341, 825, 54, 426, 123, 250, 129, 134, 106, 469, -32766, 571, 1113, 813, 245, 246, 40, 21, 427, 251, 471, 252, 472, 341, 473, 453, 22, 428, 207, 900, 901, 639, 33, 34, 429, 825, 54, -86, 35, 474, 220, 221, 222, 314, 357, 358, 100, 101, 102, 239, 240, 241, 646, 477, -230, 458, 588, 135, 374, 595, 596, 207, 761, 641, 649, 643, 942, 655, 930, 663, 823, 133, 307, 838, 426, -32766, 106, 750, 43, 44, 469, 45, 442, 46, 813, 827, 635, 40, 21, 427, 47, 471, 50, 472, 53, 473, 132, 608, 428, 302, 604, -280, -32766, 33, 34, 429, 825, 54, 426, 35, 474, 756, 958, -84, 469, 357, 358, 520, 813, 629, 363, 40, 21, 427, 477, 471, 574, 472, -515, 473, 848, 617, 428, -423, -32766, 11, 647, 33, 34, 429, 825, 54, 445, 35, 474, 462, 285, 577, 1112, 357, 358, 592, 369, 849, 593, 290, 827, 635, 477, 0, 0, 531, 0, 0, 325, 0, 0, 0, 0, 0, 652, 0, 0, 0, 322, 326, 0, 0, 0, 426, 0, 0, 0, 0, 323, 469, 316, 318, -516, 813, 863, 635, 40, 21, 427, 0, 471, 0, 472, 0, 473, 1159, 0, 428, 0, -414, 6, 7, 33, 34, 429, 825, 54, 426, 35, 474, 12, 14, 373, 469, 357, 358, -424, 813, 562, 755, 40, 21, 427, 477, 471, 248, 472, 840, 473, 38, 39, 428, 658, 659, 814, 822, 33, 34, 429, 801, 816, 879, 35, 474, 215, 216, 870, 871, 357, 358, 217, 771, 218, 799, 864, 827, 635, 477, 770, 861, 859, 937, 938, 935, 209, 821, 805, 807, 809, 812, 934, 764, 1101, 1102, 765, 936, 24, 78, 426, 335, 1103, 359, 636, 640, 469, 642, 644, 645, 813, 827, 635, 40, 21, 427, 648, 471, 650, 472, 651, 473, 653, 654, 428, 637, 26, 660, 797, 33, 34, 429, 215, 216, 1227, 35, 474, 1229, 217, 763, 218, 357, 358, 846, 762, 845, 1228, 844, 1061, 832, 477, 558, 209, 1107, 1108, 1109, 1110, 1104, 1105, 398, 1101, 1102, 1049, 843, 1050, 1111, 1106, 830, 1103, 943, 868, 869, 457, 1226, 1158, 219, 1195, 1193, 1178, 1191, 1092, 918, 827, 635, 31, 1199, 1189, 1056, 37, 42, 76, 77, 210, 287, 292, 293, 308, 309, 310, 311, 339, 356, 416, 0, -227, -226, 16, 17, 18, 393, 454, 461, 463, 467, 552, 626, 1052, 558, 1055, 1107, 1108, 1109, 1110, 1104, 1105, 398, 908, 1117, 1051, 1027, 563, 1111, 1106, 1026, 1094, 1058, 0, -433, 1045, 0, 1057, 219, 1060, 1059, 1076, 0, 1192, 1177, 1173, 1190, 1091, 1224, 1118, 1172, 600); protected $actionCheck = array(2, 3, 4, 5, 6, 7, 14, 9, 10, 11, 12, 13, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 0, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 9, 10, 11, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 69, 70, 53, 54, 55, 9, 10, 57, 30, 116, 32, 33, 34, 35, 36, 37, 38, 80, 69, 70, 83, 71, 72, 73, 74, 75, 76, 77, 135, 136, 80, 33, 34, 35, 36, 37, 38, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 31, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 13, 134, 135, 136, 137, 138, 139, 140, 141, 142, 3, 4, 5, 6, 7, 148, 149, 150, 82, 12, 13, 160, 15, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 8, 44, 45, 46, 47, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 80, 33, 34, 35, 36, 50, 51, 13, 9, 10, 11, 56, 128, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 59, 60, 37, 38, 78, 79, 80, 82, 82, 106, 85, 108, 86, 9, 10, 11, 161, 80, 1, 2, 44, 45, 46, 47, 48, 49, 50, 51, 52, 9, 10, 11, 106, 156, 30, 8, 32, 33, 34, 35, 36, 13, 116, 8, 153, 154, 155, 8, 122, 158, 30, 125, 126, 116, 117, 118, 119, 120, 121, 31, 134, 135, 156, 137, 138, 139, 140, 141, 142, 143, 145, 146, 8, 8, 133, 149, 150, 37, 38, 153, 154, 155, 9, 10, 11, 159, 8, 161, 162, 8, 164, 74, 75, 76, 77, 8, 13, 80, 0, 1, 2, 84, 158, 30, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 13, 98, 9, 10, 11, 9, 103, 104, 105, 106, 8, 70, 109, 110, 9, 10, 11, 8, 115, 116, 117, 118, 70, 30, 31, 37, 38, 124, 31, 8, 127, 128, 129, 130, 8, 30, 156, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 116, 117, 118, 119, 120, 121, 8, 82, 8, 74, 156, 157, 158, 33, 34, 80, 1, 2, 8, 84, 163, 82, 87, 88, 89, 133, 91, 70, 93, 152, 95, 108, 82, 98, 158, 8, 113, 160, 103, 104, 105, 106, 13, 108, 109, 110, 123, 122, 113, 157, 115, 116, 117, 118, 9, 10, 11, 156, 71, 124, 157, 122, 127, 128, 129, 130, 37, 38, 8, 82, 160, 156, 13, 134, 156, 30, 156, 32, 33, 34, 35, 158, 157, 148, 159, 122, 161, 80, 1, 74, 133, 156, 157, 158, 156, 80, 1, 2, 159, 84, 161, 82, 87, 88, 89, 157, 91, 157, 93, 122, 95, 161, 106, 98, 108, 100, 101, 102, 103, 104, 105, 106, 159, 116, 109, 110, 9, 10, 11, 13, 115, 116, 117, 118, 9, 10, 11, 160, 16, 124, 81, 122, 127, 128, 129, 130, 159, 30, 161, 32, 33, 34, 13, 134, 156, 30, 156, 32, 33, 153, 153, 154, 155, 70, 9, 10, 11, 80, 80, 74, 160, 156, 157, 158, 14, 80, 37, 38, 159, 84, 161, 152, 87, 88, 89, 30, 91, 160, 93, 14, 95, 37, 38, 98, 16, 100, 101, 102, 103, 104, 105, 106, 70, 82, 109, 110, 82, 33, 34, 35, 115, 116, 117, 118, 16, 1, 2, 10, 11, 124, 160, 85, 127, 128, 129, 130, 9, 10, 11, 82, 11, 14, 157, 9, 10, 11, 161, 30, 85, 53, 54, 55, 154, 57, 157, 31, 122, 30, 161, 30, 157, 156, 157, 158, 30, 69, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 144, 57, 161, 159, 16, 161, 1, 2, 74, 157, 16, 152, 157, 69, 80, 116, 161, 144, 84, 69, 70, 87, 88, 89, 16, 91, 16, 93, 161, 95, 75, 76, 98, 30, 135, 136, 31, 103, 104, 105, 1, 2, 31, 109, 110, 9, 10, 11, 31, 115, 116, 50, 51, 52, 50, 51, 52, 31, 124, 160, 75, 76, 101, 102, 111, 112, 30, 156, 157, 31, 31, 156, 157, 156, 157, 31, 31, 57, 38, 74, 33, 69, 80, 70, 70, 80, 70, 89, 70, 84, 156, 157, 87, 88, 89, 70, 91, 70, 93, 70, 95, 70, 96, 98, 71, 77, 82, 85, 103, 104, 105, 1, 2, 74, 109, 110, 82, 82, 97, 80, 115, 116, 85, 84, 92, 106, 87, 88, 89, 124, 91, 90, 93, 133, 95, 128, 94, 98, 147, 116, 97, 31, 103, 104, 105, 1, 2, 97, 109, 110, 97, 97, 100, 144, 115, 116, 100, 106, 128, 113, 161, 156, 157, 124, -1, -1, 151, -1, -1, 114, -1, -1, -1, -1, -1, 31, -1, -1, -1, 131, 131, -1, -1, -1, 74, -1, -1, -1, -1, 132, 80, 133, 133, 133, 84, 156, 157, 87, 88, 89, -1, 91, -1, 93, -1, 95, 144, -1, 98, -1, 147, 147, 147, 103, 104, 105, 1, 2, 74, 109, 110, 147, 147, 147, 80, 115, 116, 147, 84, 151, 153, 87, 88, 89, 124, 91, 31, 93, 152, 95, 156, 156, 98, 156, 156, 156, 156, 103, 104, 105, 156, 156, 156, 109, 110, 50, 51, 156, 156, 115, 116, 56, 156, 58, 156, 156, 156, 157, 124, 156, 156, 156, 156, 156, 156, 70, 156, 156, 156, 156, 156, 156, 156, 78, 79, 156, 156, 159, 157, 74, 157, 86, 157, 157, 157, 80, 157, 157, 157, 84, 156, 157, 87, 88, 89, 157, 91, 157, 93, 157, 95, 157, 157, 98, 157, 159, 158, 158, 103, 104, 105, 50, 51, 158, 109, 110, 158, 56, 158, 58, 115, 116, 158, 158, 158, 158, 158, 158, 158, 124, 135, 70, 137, 138, 139, 140, 141, 142, 143, 78, 79, 158, 158, 158, 149, 150, 158, 86, 158, 158, 158, 158, 158, 164, 159, 158, 158, 158, 158, 158, 158, 156, 157, 159, 158, 158, 163, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, 159, -1, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 160, 135, 160, 137, 138, 139, 140, 141, 142, 143, 160, 160, 160, 160, 160, 149, 150, 160, 160, 163, -1, 162, 162, -1, 163, 159, 163, 163, 163, -1, 163, 163, 163, 163, 163, 163, 163, 163, 163); protected $actionBase = array(0, 229, 310, 390, 470, 103, 325, 325, 785, -2, -2, 149, -2, -2, -2, 660, 765, 799, 765, 589, 694, 870, 870, 870, 252, 404, 404, 404, 514, 177, 177, 918, 434, 118, 295, 313, 240, 491, 491, 491, 491, 138, 138, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 491, 89, 206, 775, 550, 535, 776, 777, 778, 912, 709, 913, 859, 862, 700, 863, 864, 865, 866, 867, 858, 871, 935, 872, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 322, 592, 285, 319, 232, 44, 691, 691, 691, 691, 691, 691, 691, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 582, 530, 530, 530, 594, 860, 658, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 926, 500, -21, -21, 492, 702, 420, 355, 216, 549, 151, 26, 26, 331, 331, 331, 331, 331, 46, 46, 5, 5, 5, 5, 153, 188, 188, 188, 188, 121, 121, 121, 121, 314, 314, 394, 394, 362, 300, 298, 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, 67, 656, 656, 659, 659, 522, 554, 554, 554, 554, 679, -59, -59, 381, 462, 462, 462, 528, 717, 854, 382, 382, 382, 382, 382, 382, 561, 561, 561, -3, -3, -3, 692, 115, 137, 115, 137, 678, 732, 450, 732, 338, 677, -15, 510, 812, 468, 707, 856, 711, 857, 572, 735, 267, 529, 654, 674, 463, 529, 529, 529, 529, 654, 610, 640, 608, 463, 529, 463, 718, 323, 496, 89, 570, 507, 675, 779, 293, 670, 781, 290, 373, 332, 566, 278, 435, 733, 784, 914, 917, 385, 715, 675, 675, 675, 352, 511, 278, -8, 605, 605, 605, 605, 156, 605, 605, 605, 605, 251, 276, 375, 402, 780, 657, 657, 690, 869, 783, 783, 657, 689, 657, 690, 874, 874, 874, 874, 657, 657, 657, 657, 783, 783, 783, 688, 783, 239, 703, 704, 704, 874, 742, 743, 657, 657, 712, 783, 783, 783, 712, 695, 874, 701, 741, 277, 783, 874, 672, 689, 672, 657, 701, 672, 689, 689, 672, 22, 666, 668, 873, 875, 887, 791, 662, 685, 879, 880, 876, 878, 811, 699, 744, 497, 669, 671, 673, 680, 719, 682, 713, 674, 667, 667, 667, 655, 720, 655, 667, 667, 667, 667, 667, 667, 667, 667, 868, 646, 731, 714, 653, 745, 553, 573, 792, 664, 814, 900, 893, 919, 920, 881, 898, 655, 916, 739, 247, 643, 882, 813, 788, 655, 883, 655, 794, 655, 902, 820, 686, 823, 825, 667, 910, 921, 923, 924, 925, 927, 928, 929, 930, 684, 931, 749, 696, 894, 299, 877, 718, 729, 705, 790, 750, 829, 328, 932, 830, 655, 655, 795, 786, 655, 796, 751, 740, 890, 756, 895, 933, 664, 708, 896, 655, 706, 831, 934, 328, 681, 683, 888, 661, 757, 886, 911, 885, 803, 761, 649, 663, 832, 833, 834, 693, 763, 891, 892, 889, 764, 805, 665, 807, 768, 697, 835, 809, 884, 769, 848, 849, 899, 676, 730, 710, 698, 687, 810, 850, 897, 770, 771, 772, 853, 773, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 138, 138, 138, -2, -2, -2, -2, 0, 0, -2, 0, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 0, 0, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 138, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 599, -21, -21, -21, -21, 599, -21, -21, -21, -21, -21, -21, -21, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, 599, -21, 599, 599, 599, -21, 382, -21, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 599, 0, 0, 599, -21, 599, -21, 599, -21, -21, 599, 599, 599, 599, 599, 599, 599, -21, -21, -21, -21, -21, -21, 0, 561, 561, 561, 561, -21, -21, -21, -21, 382, 382, 382, 382, 382, 382, 259, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 382, 561, 561, -3, -3, 382, 382, 382, 382, 382, 259, 382, 382, 463, 689, 689, 689, 137, 137, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 137, 463, 0, 463, 0, 382, 463, 689, 463, 657, 137, 689, 689, 463, 783, 616, 616, 616, 616, 328, 278, 0, 0, 689, 689, 0, 0, 0, 0, 0, 689, 0, 0, 0, 0, 0, 0, 783, 0, 0, 0, 0, 0, 667, 247, 0, 705, 335, 0, 0, 0, 0, 0, 0, 705, 335, 347, 347, 0, 684, 667, 667, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 328); protected $actionDefault = array(3, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 544, 544, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 299, 299, 299, 32767, 32767, 32767, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 532, 32767, 32767, 32767, 32767, 32767, 32767, 383, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 389, 549, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 364, 365, 367, 368, 298, 552, 533, 247, 390, 548, 297, 249, 327, 503, 32767, 32767, 32767, 329, 122, 258, 203, 502, 125, 296, 234, 382, 384, 328, 303, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 302, 458, 361, 360, 359, 460, 32767, 459, 496, 496, 499, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 325, 487, 486, 326, 456, 330, 457, 333, 461, 464, 331, 332, 349, 350, 347, 348, 351, 462, 463, 480, 481, 478, 479, 301, 352, 353, 354, 355, 482, 483, 484, 485, 32767, 32767, 543, 543, 32767, 32767, 282, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 340, 341, 471, 472, 32767, 238, 238, 238, 238, 283, 238, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 335, 336, 334, 466, 467, 465, 432, 32767, 32767, 32767, 434, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 504, 32767, 32767, 32767, 32767, 32767, 517, 421, 171, 32767, 413, 32767, 171, 171, 171, 171, 32767, 222, 224, 167, 32767, 171, 32767, 490, 32767, 32767, 32767, 32767, 522, 345, 32767, 32767, 116, 32767, 32767, 32767, 559, 32767, 517, 32767, 116, 32767, 32767, 32767, 32767, 358, 337, 338, 339, 32767, 32767, 521, 515, 474, 475, 476, 477, 32767, 468, 469, 470, 473, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 429, 435, 435, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 520, 519, 32767, 414, 498, 188, 186, 186, 32767, 208, 208, 32767, 32767, 190, 491, 510, 32767, 190, 173, 32767, 400, 175, 498, 32767, 32767, 240, 32767, 240, 32767, 400, 240, 32767, 32767, 240, 32767, 415, 439, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 379, 380, 493, 506, 32767, 507, 32767, 413, 343, 344, 346, 322, 32767, 324, 369, 370, 371, 372, 373, 374, 375, 377, 32767, 419, 32767, 422, 32767, 32767, 32767, 257, 32767, 557, 32767, 32767, 306, 557, 32767, 32767, 32767, 551, 32767, 32767, 300, 32767, 32767, 32767, 32767, 253, 32767, 169, 32767, 541, 32767, 558, 32767, 515, 32767, 342, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 516, 32767, 32767, 32767, 32767, 229, 32767, 452, 32767, 116, 32767, 32767, 32767, 189, 32767, 32767, 304, 248, 32767, 32767, 550, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 114, 32767, 170, 32767, 32767, 32767, 191, 32767, 32767, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 295, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 515, 32767, 32767, 233, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 415, 32767, 276, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 127, 127, 3, 127, 127, 260, 3, 260, 127, 260, 260, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 216, 219, 208, 208, 164, 127, 127, 268); protected $goto = array(166, 140, 140, 140, 166, 187, 168, 144, 147, 141, 142, 143, 149, 163, 163, 163, 163, 144, 144, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 165, 138, 159, 160, 161, 162, 184, 139, 185, 493, 494, 377, 495, 499, 500, 501, 502, 503, 504, 505, 506, 971, 164, 145, 146, 148, 171, 176, 186, 203, 253, 256, 258, 260, 263, 264, 265, 266, 267, 268, 269, 277, 278, 279, 280, 303, 304, 328, 329, 330, 394, 395, 396, 542, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 150, 151, 152, 167, 153, 169, 154, 204, 170, 155, 156, 157, 205, 158, 136, 622, 560, 758, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 560, 1114, 630, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 1114, 759, 519, 530, 508, 657, 555, 1184, 350, 508, 591, 787, 1184, 889, 613, 614, 885, 618, 619, 625, 627, 632, 634, 751, 856, 856, 856, 856, 851, 857, 174, 892, 892, 1206, 1206, 177, 178, 179, 401, 402, 403, 404, 173, 202, 206, 208, 257, 259, 261, 262, 270, 271, 272, 273, 274, 275, 281, 282, 283, 284, 305, 306, 331, 332, 333, 406, 407, 408, 409, 175, 180, 254, 255, 181, 182, 183, 497, 497, 497, 497, 497, 497, 818, 497, 497, 497, 497, 497, 497, 497, 497, 497, 497, 509, 585, 862, 601, 602, 509, 544, 545, 546, 547, 548, 549, 550, 551, 553, 586, 338, 559, 321, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 559, 400, 607, 536, 536, 568, 532, 537, 534, 534, 496, 498, 524, 540, 569, 572, 583, 590, 298, 296, 296, 296, 298, 289, 299, 611, 1210, 510, 615, 910, 948, 375, 510, 437, 437, 437, 437, 437, 437, 594, 437, 437, 437, 437, 437, 437, 437, 437, 437, 437, 1078, 949, 388, 1176, 561, 1078, 899, 899, 899, 899, 378, 899, 899, 1218, 1218, 1164, 754, 351, 352, 757, 1078, 1078, 1078, 1078, 1078, 1078, 1070, 384, 384, 384, 606, 1218, 878, 860, 858, 860, 656, 466, 511, 887, 882, 754, 384, 754, 384, 969, 384, 391, 385, 587, 353, 414, 384, 1232, 1203, 541, 1198, 1198, 1198, 567, 1095, 386, 386, 386, 1020, 916, 514, 1030, 19, 15, 372, 776, 916, 941, 448, 450, 633, 896, 1217, 1217, 1115, 616, 939, 841, 554, 905, 386, 340, 1071, 1074, 1075, 399, 1070, 1183, 914, 23, 1217, 774, 1183, 543, 603, 389, 1220, 1072, 1175, 1072, 518, 1200, 1200, 1200, 575, 605, 1073, 343, 522, 533, 518, 518, 773, 1090, 1089, 13, 578, 582, 628, 3, 4, 783, 1067, 772, 514, 1062, 1182, 784, 661, 919, 451, 866, 573, 957, 1161, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 528, 0, 0, 0, 0, 513, 0, 528, 0, 0, 0, 0, 610, 512, 515, 439, 440, 1068, 620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 781, 1225, 0, 0, 0, 0, 0, 523, 0, 0, 0, 0, 0, 0, 0, 0, 0, 779, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 301, 301); protected $gotoCheck = array(43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 57, 69, 15, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 69, 128, 9, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 16, 102, 32, 69, 32, 32, 120, 72, 69, 32, 29, 120, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 6, 69, 69, 69, 69, 69, 69, 27, 77, 77, 77, 77, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 119, 119, 119, 119, 119, 119, 50, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 119, 67, 33, 67, 67, 119, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 127, 57, 127, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 51, 51, 51, 51, 51, 51, 110, 51, 51, 51, 51, 51, 51, 51, 51, 51, 51, 5, 5, 5, 5, 5, 5, 5, 63, 142, 124, 63, 84, 98, 63, 124, 57, 57, 57, 57, 57, 57, 129, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 57, 98, 12, 82, 12, 57, 57, 57, 57, 57, 46, 57, 57, 144, 144, 133, 11, 72, 72, 14, 57, 57, 57, 57, 57, 57, 82, 13, 13, 13, 49, 144, 14, 14, 14, 14, 14, 57, 14, 14, 14, 11, 13, 11, 13, 102, 13, 48, 11, 70, 70, 70, 13, 13, 140, 2, 9, 9, 9, 2, 34, 125, 125, 125, 103, 13, 13, 34, 34, 34, 34, 25, 13, 8, 8, 8, 8, 79, 143, 143, 8, 8, 8, 9, 34, 81, 125, 18, 82, 82, 82, 125, 82, 121, 85, 34, 143, 24, 121, 47, 34, 17, 143, 82, 82, 82, 47, 121, 121, 121, 40, 40, 82, 58, 58, 58, 47, 47, 23, 126, 126, 58, 62, 62, 62, 30, 30, 23, 116, 23, 13, 114, 121, 26, 74, 86, 65, 71, 66, 100, 132, 109, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, 9, -1, 9, -1, -1, -1, -1, 13, 9, 9, 9, 9, 13, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, 9, -1, -1, -1, -1, -1, 102, -1, -1, -1, -1, -1, -1, -1, -1, -1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); protected $gotoBase = array(0, 0, -173, 0, 0, 353, 216, 0, 477, 149, 0, 110, 71, 117, 426, 112, 203, 170, 181, 0, 0, 0, 0, 168, 164, 143, 121, 27, 0, 205, -127, 0, -429, 279, 51, 0, 0, 0, 0, 0, 481, 0, 0, -24, 0, 0, 379, 484, 163, 153, 268, 75, 0, 0, 0, 0, 0, 107, 161, 0, 0, 0, 222, -77, 0, 104, 96, -344, 0, -94, 135, 123, -232, 0, 169, 0, 0, -50, 0, 173, 0, 180, 64, 0, 360, 139, 122, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 98, 0, 124, 0, 165, 166, 0, 0, 0, 0, 0, 87, 340, 259, 0, 0, 120, 0, 177, 0, 0, -5, -91, 200, 0, 0, 84, 154, 211, -21, -48, 188, 0, 0, 93, 213, 0, 0, 0, 0, 0, 0, 175, 0, 358, 167, 102, 0, 0); protected $gotoDefault = array(-32768, 468, 665, 2, 666, 836, 741, 749, 598, 482, 631, 581, 380, 1194, 793, 794, 795, 381, 368, 766, 379, 410, 405, 782, 775, 777, 785, 172, 411, 788, 1, 790, 517, 826, 1021, 365, 798, 366, 589, 800, 526, 802, 803, 137, 382, 383, 527, 483, 390, 576, 817, 276, 387, 819, 367, 820, 829, 371, 465, 455, 460, 529, 556, 609, 432, 447, 570, 564, 535, 1087, 565, 865, 349, 873, 662, 881, 884, 484, 557, 895, 452, 903, 1100, 397, 909, 915, 920, 291, 923, 417, 412, 584, 928, 929, 5, 933, 623, 624, 8, 312, 956, 599, 970, 420, 1040, 1042, 485, 486, 521, 459, 507, 525, 487, 1063, 441, 413, 1066, 433, 488, 489, 434, 435, 1084, 355, 1169, 354, 449, 320, 1156, 579, 1119, 456, 1209, 1165, 348, 490, 491, 376, 1188, 392, 1204, 438, 1211, 1219, 344, 539, 566); protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 12, 12, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 18, 18, 19, 19, 21, 21, 17, 17, 22, 22, 23, 23, 24, 24, 25, 25, 20, 20, 26, 28, 28, 29, 30, 30, 32, 31, 31, 31, 31, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 33, 14, 14, 54, 54, 56, 55, 55, 48, 48, 58, 58, 59, 59, 60, 60, 61, 61, 15, 16, 16, 16, 64, 64, 64, 65, 65, 68, 68, 66, 66, 70, 70, 41, 41, 50, 50, 53, 53, 53, 52, 52, 71, 42, 42, 42, 42, 72, 72, 73, 73, 74, 74, 39, 39, 35, 35, 75, 37, 37, 76, 36, 36, 38, 38, 49, 49, 49, 62, 62, 78, 78, 79, 79, 81, 81, 81, 80, 80, 63, 63, 82, 82, 82, 83, 83, 84, 84, 84, 44, 44, 85, 85, 85, 45, 45, 86, 86, 87, 87, 67, 88, 88, 88, 88, 93, 93, 94, 94, 95, 95, 95, 95, 95, 96, 97, 97, 92, 92, 89, 89, 91, 91, 99, 99, 98, 98, 98, 98, 98, 98, 90, 90, 101, 100, 100, 46, 46, 40, 40, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 43, 34, 34, 47, 47, 106, 106, 107, 107, 107, 107, 113, 102, 102, 109, 109, 115, 115, 116, 117, 118, 118, 118, 118, 118, 118, 118, 69, 69, 57, 57, 57, 57, 103, 103, 122, 122, 119, 119, 123, 123, 123, 123, 104, 104, 104, 108, 108, 108, 114, 114, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 27, 27, 27, 27, 27, 27, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, 112, 112, 105, 105, 105, 105, 129, 129, 132, 132, 131, 131, 133, 133, 51, 51, 51, 51, 135, 135, 134, 134, 134, 134, 134, 136, 136, 121, 121, 124, 124, 120, 120, 138, 137, 137, 137, 137, 125, 125, 125, 125, 111, 111, 126, 126, 126, 126, 77, 139, 139, 140, 140, 140, 110, 110, 141, 141, 142, 142, 142, 142, 142, 127, 127, 127, 127, 144, 145, 143, 143, 143, 143, 143, 143, 143, 146, 146, 146); protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 3, 1, 3, 1, 3, 1, 1, 3, 1, 3, 1, 2, 3, 1, 3, 3, 1, 3, 2, 0, 1, 1, 1, 1, 1, 3, 5, 8, 3, 5, 9, 3, 2, 3, 2, 3, 2, 3, 3, 3, 3, 1, 2, 2, 5, 7, 9, 5, 6, 3, 3, 2, 2, 1, 1, 1, 0, 2, 8, 0, 4, 1, 3, 0, 1, 0, 1, 0, 1, 1, 1, 10, 7, 6, 5, 1, 2, 2, 0, 2, 0, 2, 0, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 1, 4, 0, 2, 3, 0, 2, 4, 0, 2, 0, 3, 1, 2, 1, 1, 0, 1, 3, 4, 6, 1, 1, 1, 0, 1, 0, 2, 2, 3, 3, 1, 3, 1, 2, 2, 3, 1, 1, 2, 4, 3, 1, 1, 3, 2, 0, 1, 3, 3, 9, 3, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 3, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 3, 3, 1, 0, 1, 1, 3, 3, 4, 4, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 5, 4, 3, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 3, 2, 1, 2, 10, 11, 3, 3, 2, 4, 4, 3, 4, 4, 4, 4, 7, 3, 2, 0, 4, 1, 3, 2, 1, 2, 2, 4, 6, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 4, 4, 0, 2, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 1, 3, 1, 4, 3, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 3, 1, 3, 1, 1, 3, 3, 0, 2, 0, 1, 3, 1, 3, 1, 1, 1, 1, 1, 6, 4, 3, 4, 2, 4, 4, 1, 3, 1, 2, 1, 1, 4, 1, 1, 3, 6, 4, 4, 4, 4, 1, 4, 0, 1, 1, 3, 1, 1, 4, 3, 1, 1, 1, 0, 0, 2, 3, 1, 3, 1, 4, 2, 2, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 6, 3, 1, 1, 1); protected function initReduceCallbacks() { $this->reduceCallbacks = [0 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 1 => function ($stackPos) { $this->semValue = $this->handleNamespaces($this->semStack[$stackPos - (1 - 1)]); }, 2 => function ($stackPos) { if (\is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 3 => function ($stackPos) { $this->semValue = array(); }, 4 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 5 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 6 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 7 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 8 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 9 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 10 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 11 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 12 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 13 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 14 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 15 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 16 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 17 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 18 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 19 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 20 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 21 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 22 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 23 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 24 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 25 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 26 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 27 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 28 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 29 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 30 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 31 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 32 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 33 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 34 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 35 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 36 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 37 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 38 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 39 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 40 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 41 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 42 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 43 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 44 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 45 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 46 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 47 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 48 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 49 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 50 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 51 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 52 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 53 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 54 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 55 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 56 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 57 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 58 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 59 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 60 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 61 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 62 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 63 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 64 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 65 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 66 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 67 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 68 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 69 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 70 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 71 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 72 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 73 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 74 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 75 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 76 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 77 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 78 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 79 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 80 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 81 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 82 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 83 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 84 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 85 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 86 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 87 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 88 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 89 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 90 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 91 => function ($stackPos) { $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 92 => function ($stackPos) { $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 93 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 94 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 95 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 96 => function ($stackPos) { $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 97 => function ($stackPos) { $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $this->checkNamespace($this->semValue); }, 98 => function ($stackPos) { $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); }, 99 => function ($stackPos) { $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); }, 100 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 101 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 102 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 103 => function ($stackPos) { $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 104 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_FUNCTION; }, 105 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_CONSTANT; }, 106 => function ($stackPos) { $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 2)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 107 => function ($stackPos) { $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 2)], $this->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 108 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 109 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 110 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 111 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 112 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 113 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 114 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); }, 115 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); }, 116 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); }, 117 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); }, 118 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; }, 119 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; $this->semValue->type = $this->semStack[$stackPos - (2 - 1)]; }, 120 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 121 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 122 => function ($stackPos) { $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 123 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 124 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 125 => function ($stackPos) { $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 126 => function ($stackPos) { if (\is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 127 => function ($stackPos) { $this->semValue = array(); }, 128 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 129 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 130 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 131 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 132 => function ($stackPos) { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 133 => function ($stackPos) { if ($this->semStack[$stackPos - (3 - 2)]) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; $attrs = $this->startAttributeStack[$stackPos - (3 - 1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) { $stmts[0]->setAttribute('comments', \array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); } } else { $startAttributes = $this->startAttributeStack[$stackPos - (3 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; } if (null === $this->semValue) { $this->semValue = array(); } } }, 134 => function ($stackPos) { $this->semValue = new Stmt\If_($this->semStack[$stackPos - (5 - 2)], ['stmts' => \is_array($this->semStack[$stackPos - (5 - 3)]) ? $this->semStack[$stackPos - (5 - 3)] : array($this->semStack[$stackPos - (5 - 3)]), 'elseifs' => $this->semStack[$stackPos - (5 - 4)], 'else' => $this->semStack[$stackPos - (5 - 5)]], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 135 => function ($stackPos) { $this->semValue = new Stmt\If_($this->semStack[$stackPos - (8 - 2)], ['stmts' => $this->semStack[$stackPos - (8 - 4)], 'elseifs' => $this->semStack[$stackPos - (8 - 5)], 'else' => $this->semStack[$stackPos - (8 - 6)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 136 => function ($stackPos) { $this->semValue = new Stmt\While_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 137 => function ($stackPos) { $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (5 - 4)], \is_array($this->semStack[$stackPos - (5 - 2)]) ? $this->semStack[$stackPos - (5 - 2)] : array($this->semStack[$stackPos - (5 - 2)]), $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 138 => function ($stackPos) { $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 139 => function ($stackPos) { $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 140 => function ($stackPos) { $this->semValue = new Stmt\Break_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 141 => function ($stackPos) { $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 142 => function ($stackPos) { $this->semValue = new Stmt\Continue_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 143 => function ($stackPos) { $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 144 => function ($stackPos) { $this->semValue = new Stmt\Return_(null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 145 => function ($stackPos) { $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 146 => function ($stackPos) { $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 147 => function ($stackPos) { $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 148 => function ($stackPos) { $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 149 => function ($stackPos) { $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 150 => function ($stackPos) { $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 151 => function ($stackPos) { $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 152 => function ($stackPos) { $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 153 => function ($stackPos) { $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 154 => function ($stackPos) { $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 155 => function ($stackPos) { $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 156 => function ($stackPos) { $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->checkTryCatch($this->semValue); }, 157 => function ($stackPos) { $this->semValue = new Stmt\Throw_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 158 => function ($stackPos) { $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 159 => function ($stackPos) { $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 160 => function ($stackPos) { $this->semValue = new Stmt\Expression($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 161 => function ($stackPos) { $this->semValue = array(); /* means: no statement */ }, 162 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 163 => function ($stackPos) { $startAttributes = $this->startAttributeStack[$stackPos - (1 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; } if ($this->semValue === null) { $this->semValue = array(); } /* means: no statement */ }, 164 => function ($stackPos) { $this->semValue = array(); }, 165 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 166 => function ($stackPos) { $this->semValue = new Stmt\Catch_(array($this->semStack[$stackPos - (8 - 3)]), $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 167 => function ($stackPos) { $this->semValue = null; }, 168 => function ($stackPos) { $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 169 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 170 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 171 => function ($stackPos) { $this->semValue = \false; }, 172 => function ($stackPos) { $this->semValue = \true; }, 173 => function ($stackPos) { $this->semValue = \false; }, 174 => function ($stackPos) { $this->semValue = \true; }, 175 => function ($stackPos) { $this->semValue = \false; }, 176 => function ($stackPos) { $this->semValue = \true; }, 177 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 178 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 179 => function ($stackPos) { $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (10 - 3)], ['byRef' => $this->semStack[$stackPos - (10 - 2)], 'params' => $this->semStack[$stackPos - (10 - 5)], 'returnType' => $this->semStack[$stackPos - (10 - 7)], 'stmts' => $this->semStack[$stackPos - (10 - 9)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); }, 180 => function ($stackPos) { $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); $this->checkClass($this->semValue, $stackPos - (7 - 2)); }, 181 => function ($stackPos) { $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (6 - 2)], ['extends' => $this->semStack[$stackPos - (6 - 3)], 'stmts' => $this->semStack[$stackPos - (6 - 5)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->checkInterface($this->semValue, $stackPos - (6 - 2)); }, 182 => function ($stackPos) { $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (5 - 2)], ['stmts' => $this->semStack[$stackPos - (5 - 4)]], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 183 => function ($stackPos) { $this->semValue = 0; }, 184 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 185 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 186 => function ($stackPos) { $this->semValue = null; }, 187 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 188 => function ($stackPos) { $this->semValue = array(); }, 189 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 190 => function ($stackPos) { $this->semValue = array(); }, 191 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 192 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 193 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 194 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 195 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 196 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 197 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 198 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 199 => function ($stackPos) { $this->semValue = null; }, 200 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 201 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 202 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 203 => function ($stackPos) { $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 204 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 205 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 206 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 207 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (5 - 3)]; }, 208 => function ($stackPos) { $this->semValue = array(); }, 209 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 210 => function ($stackPos) { $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 211 => function ($stackPos) { $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 212 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 213 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 214 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 215 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 216 => function ($stackPos) { $this->semValue = array(); }, 217 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 218 => function ($stackPos) { $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (3 - 2)], \is_array($this->semStack[$stackPos - (3 - 3)]) ? $this->semStack[$stackPos - (3 - 3)] : array($this->semStack[$stackPos - (3 - 3)]), $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 219 => function ($stackPos) { $this->semValue = array(); }, 220 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 221 => function ($stackPos) { $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 222 => function ($stackPos) { $this->semValue = null; }, 223 => function ($stackPos) { $this->semValue = new Stmt\Else_(\is_array($this->semStack[$stackPos - (2 - 2)]) ? $this->semStack[$stackPos - (2 - 2)] : array($this->semStack[$stackPos - (2 - 2)]), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 224 => function ($stackPos) { $this->semValue = null; }, 225 => function ($stackPos) { $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 226 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 227 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); }, 228 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 229 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 230 => function ($stackPos) { $this->semValue = array(); }, 231 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 232 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 233 => function ($stackPos) { $this->semValue = new Node\Param($this->semStack[$stackPos - (4 - 4)], null, $this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); $this->checkParam($this->semValue); }, 234 => function ($stackPos) { $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 6)], $this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 3)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->checkParam($this->semValue); }, 235 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 236 => function ($stackPos) { $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 237 => function ($stackPos) { $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 238 => function ($stackPos) { $this->semValue = null; }, 239 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 240 => function ($stackPos) { $this->semValue = null; }, 241 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 242 => function ($stackPos) { $this->semValue = array(); }, 243 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 244 => function ($stackPos) { $this->semValue = array(new Node\Arg($this->semStack[$stackPos - (3 - 2)], \false, \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes)); }, 245 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 246 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 247 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 248 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 249 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 250 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 251 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 252 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 253 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 254 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 255 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 256 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 257 => function ($stackPos) { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 258 => function ($stackPos) { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 259 => function ($stackPos) { if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } else { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 260 => function ($stackPos) { $this->semValue = array(); }, 261 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 262 => function ($stackPos) { $this->semValue = new Stmt\Property($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkProperty($this->semValue, $stackPos - (3 - 1)); }, 263 => function ($stackPos) { $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (3 - 2)], 0, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 264 => function ($stackPos) { $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (9 - 4)], ['type' => $this->semStack[$stackPos - (9 - 1)], 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); $this->checkClassMethod($this->semValue, $stackPos - (9 - 1)); }, 265 => function ($stackPos) { $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 266 => function ($stackPos) { $this->semValue = array(); }, 267 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 268 => function ($stackPos) { $this->semValue = array(); }, 269 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 270 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 271 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 272 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 273 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 274 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 275 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 276 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 277 => function ($stackPos) { $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]); }, 278 => function ($stackPos) { $this->semValue = null; }, 279 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 280 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 281 => function ($stackPos) { $this->semValue = 0; }, 282 => function ($stackPos) { $this->semValue = 0; }, 283 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 284 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 285 => function ($stackPos) { $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 286 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 287 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 288 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; }, 289 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_STATIC; }, 290 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 291 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 292 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 293 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 294 => function ($stackPos) { $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 295 => function ($stackPos) { $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 296 => function ($stackPos) { $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 297 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 298 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 299 => function ($stackPos) { $this->semValue = array(); }, 300 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 301 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 302 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 303 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 304 => function ($stackPos) { $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 305 => function ($stackPos) { $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 306 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 307 => function ($stackPos) { $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 308 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 309 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 310 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 311 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 312 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 313 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 314 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 315 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 316 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 317 => function ($stackPos) { $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 318 => function ($stackPos) { $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 319 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 320 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 321 => function ($stackPos) { $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 322 => function ($stackPos) { $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 323 => function ($stackPos) { $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 324 => function ($stackPos) { $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 325 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 326 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 327 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 328 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 329 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 330 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 331 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 332 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 333 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 334 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 335 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 336 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 337 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 338 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 339 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 340 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 341 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 342 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 343 => function ($stackPos) { $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 344 => function ($stackPos) { $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 345 => function ($stackPos) { $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 346 => function ($stackPos) { $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 347 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 348 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 349 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 350 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 351 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 352 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 353 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 354 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 355 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 356 => function ($stackPos) { $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 357 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 358 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 359 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 360 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 361 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 362 => function ($stackPos) { $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 363 => function ($stackPos) { $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 364 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 365 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 366 => function ($stackPos) { $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 367 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 368 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 369 => function ($stackPos) { $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 370 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); }, 371 => function ($stackPos) { $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 372 => function ($stackPos) { $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 373 => function ($stackPos) { $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 374 => function ($stackPos) { $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 375 => function ($stackPos) { $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 376 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); }, 377 => function ($stackPos) { $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 378 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 379 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 380 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 381 => function ($stackPos) { $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 382 => function ($stackPos) { $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 383 => function ($stackPos) { $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 384 => function ($stackPos) { $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 385 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (10 - 2)], 'params' => $this->semStack[$stackPos - (10 - 4)], 'uses' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 7)], 'stmts' => $this->semStack[$stackPos - (10 - 9)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); }, 386 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (11 - 3)], 'params' => $this->semStack[$stackPos - (11 - 5)], 'uses' => $this->semStack[$stackPos - (11 - 7)], 'returnType' => $this->semStack[$stackPos - (11 - 8)], 'stmts' => $this->semStack[$stackPos - (11 - 10)]], $this->startAttributeStack[$stackPos - (11 - 1)] + $this->endAttributes); }, 387 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 388 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 389 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 390 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 391 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs); }, 392 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs); }, 393 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 394 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch(Scalar\String_::fromString($this->semStack[$stackPos - (4 - 1)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 395 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 396 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 397 => function ($stackPos) { $this->semValue = array(new Stmt\Class_(null, ['type' => 0, 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (7 - 2)]); $this->checkClass($this->semValue[0], -1); }, 398 => function ($stackPos) { $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 399 => function ($stackPos) { list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 400 => function ($stackPos) { $this->semValue = array(); }, 401 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 402 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 403 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 404 => function ($stackPos) { $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 405 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 406 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 407 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 408 => function ($stackPos) { $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 409 => function ($stackPos) { $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 410 => function ($stackPos) { $this->semValue = $this->fixupPhp5StaticPropCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 411 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 412 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 413 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 414 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 415 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 416 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 417 => function ($stackPos) { $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 418 => function ($stackPos) { $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 419 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 420 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 421 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 422 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 423 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 424 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 425 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 426 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 427 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 428 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 429 => function ($stackPos) { $this->semValue = null; }, 430 => function ($stackPos) { $this->semValue = null; }, 431 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 432 => function ($stackPos) { $this->semValue = array(); }, 433 => function ($stackPos) { $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos - (1 - 1)], '`', \false), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); }, 434 => function ($stackPos) { foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', \false); } } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 435 => function ($stackPos) { $this->semValue = array(); }, 436 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 437 => function ($stackPos) { $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes, \true); }, 438 => function ($stackPos) { $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 439 => function ($stackPos) { $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes, \false); }, 440 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 441 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 442 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 443 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 444 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 445 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 446 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 447 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 448 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \false); }, 449 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (2 - 2)] + $this->endAttributeStack[$stackPos - (2 - 2)], \false); }, 450 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 451 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 452 => function ($stackPos) { $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 453 => function ($stackPos) { $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 454 => function ($stackPos) { $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 455 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 456 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 457 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 458 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 459 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 460 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 461 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 462 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 463 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 464 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 465 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 466 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 467 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 468 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 469 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 470 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 471 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 472 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 473 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 474 => function ($stackPos) { $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 475 => function ($stackPos) { $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 476 => function ($stackPos) { $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 477 => function ($stackPos) { $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 478 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 479 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 480 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 481 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 482 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 483 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 484 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 485 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 486 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 487 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 488 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 489 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 490 => function ($stackPos) { $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 491 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 492 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 493 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 494 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', \true); } } $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos - (3 - 2)], $attrs); }, 495 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); }, 496 => function ($stackPos) { $this->semValue = array(); }, 497 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 498 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 499 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 500 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 501 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 502 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 503 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 504 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 505 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 506 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 507 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 508 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 509 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 510 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 511 => function ($stackPos) { $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 512 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 513 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 514 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 515 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 516 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 517 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 518 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 519 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 520 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 521 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 522 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 523 => function ($stackPos) { $var = \substr($this->semStack[$stackPos - (1 - 1)], 1); $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes) : $var; }, 524 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 525 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 526 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 527 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 528 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 529 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 530 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 531 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 532 => function ($stackPos) { $this->semValue = null; }, 533 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 534 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 535 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 536 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 537 => function ($stackPos) { $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->errorState = 2; }, 538 => function ($stackPos) { $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 539 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 540 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 541 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 542 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 543 => function ($stackPos) { $this->semValue = null; }, 544 => function ($stackPos) { $this->semValue = array(); }, 545 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 546 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 547 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 548 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 549 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 550 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 551 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 552 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, \true); }, 553 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 554 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 555 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 556 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); }, 557 => function ($stackPos) { $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 558 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 559 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 560 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 561 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 562 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 563 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 564 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 565 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 566 => function ($stackPos) { $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 567 => function ($stackPos) { $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 568 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }]; } } PK!FR,php-parser/lib/PhpParser/Parser/Multiple.phpnu[parsers = $parsers; } public function parse(string $code, ?ErrorHandler $errorHandler = null) { if (null === $errorHandler) { $errorHandler = new ErrorHandler\Throwing(); } list($firstStmts, $firstError) = $this->tryParse($this->parsers[0], $errorHandler, $code); if ($firstError === null) { return $firstStmts; } for ($i = 1, $c = \count($this->parsers); $i < $c; ++$i) { list($stmts, $error) = $this->tryParse($this->parsers[$i], $errorHandler, $code); if ($error === null) { return $stmts; } } throw $firstError; } private function tryParse(Parser $parser, ErrorHandler $errorHandler, $code) { $stmts = null; $error = null; try { $stmts = $parser->parse($code, $errorHandler); } catch (Error $error) { } return [$stmts, $error]; } } PK!y\*php-parser/lib/PhpParser/Parser/Tokens.phpnu['", "T_IS_GREATER_OR_EQUAL", "T_SL", "T_SR", "'+'", "'-'", "'.'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'{'", "'}'", "'('", "')'", "'`'", "'\"'", "'\$'"); protected $tokenToSymbol = array(0, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 56, 166, 168, 167, 55, 168, 168, 163, 164, 53, 50, 8, 51, 52, 54, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 31, 159, 44, 16, 46, 30, 68, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 70, 168, 160, 36, 168, 165, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 161, 35, 162, 58, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 32, 33, 34, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 57, 59, 60, 61, 62, 63, 64, 65, 66, 67, 69, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158); protected $action = array(133, 134, 135, 580, 136, 137, 0, 749, 750, 751, 138, 38, 327, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, 102, 103, 104, 105, 106, 1110, 1111, 1112, 1109, 1108, 1107, 1113, 743, 742, -32766, 1233, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32767, -32767, -32767, -32767, -32767, 2, 107, 108, 109, 752, 274, 381, 380, -32766, -32766, -32766, -32766, 104, 105, 106, 1025, 423, 110, 265, 139, 402, 756, 757, 758, 759, 467, 468, 429, 939, 291, -32766, 287, -32766, -32766, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 581, 791, 792, 793, 794, 782, 783, 344, 345, 785, 786, 771, 772, 773, 775, 776, 777, 355, 817, 818, 819, 820, 821, 582, 778, 779, 583, 584, 811, 802, 800, 801, 814, 797, 798, 688, -545, 585, 586, 796, 587, 588, 589, 590, 591, 592, -328, -593, -367, 1235, -367, 799, 593, 594, -593, 140, -32766, -32766, -32766, 133, 134, 135, 580, 136, 137, 1058, 749, 750, 751, 138, 38, 689, 1021, 1020, 1019, 1022, 390, -32766, 7, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, -32766, 379, 380, 1034, 690, 691, 743, 742, -32766, -32766, -32766, 423, -545, -545, -590, -32766, -32766, -32766, 1033, -32766, 127, -590, 1237, 1236, 1238, 1319, 752, -545, 290, -32766, 283, -32766, -32766, -32766, -32766, -32766, 1237, 1236, 1238, -545, 265, 139, 402, 756, 757, 758, 759, 16, 482, 429, 459, 460, 461, 298, 723, 35, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 581, 791, 792, 793, 794, 782, 783, 344, 345, 785, 786, 771, 772, 773, 775, 776, 777, 355, 817, 818, 819, 820, 821, 582, 778, 779, 583, 584, 811, 802, 800, 801, 814, 797, 798, 129, 825, 585, 586, 796, 587, 588, 589, 590, 591, 592, -328, 83, 84, 85, -593, 799, 593, 594, -593, 149, 774, 744, 745, 746, 747, 748, 825, 749, 750, 751, 787, 788, 37, 145, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 291, 274, 836, 254, 1110, 1111, 1112, 1109, 1108, 1107, 1113, -590, 861, 110, 862, -590, 483, 752, -32766, -32766, -32766, -32766, -32766, 142, 604, 1086, 743, 742, 1263, 326, 988, 753, 754, 755, 756, 757, 758, 759, 309, -32766, 823, -32766, -32766, -32766, -32766, 242, 554, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 790, 813, 791, 792, 793, 794, 782, 783, 784, 812, 785, 786, 771, 772, 773, 775, 776, 777, 816, 817, 818, 819, 820, 821, 822, 778, 779, 780, 781, 811, 802, 800, 801, 814, 797, 798, 311, 941, 789, 795, 796, 803, 804, 806, 805, 807, 808, 323, 610, 1275, 1034, 834, 799, 810, 809, 50, 51, 52, 513, 53, 54, 861, 241, 862, 919, 55, 56, -111, 57, -32766, -32766, -32766, -111, 827, -111, 290, 1303, 1348, 356, 305, 1349, 339, -111, -111, -111, -111, -111, -111, -111, -111, -32766, -194, -32766, -32766, -32766, -193, 957, 958, 830, -86, 989, 959, 835, 58, 59, 340, 429, 953, -544, 60, 833, 61, 247, 248, 62, 63, 64, 65, 66, 67, 68, 69, 1242, 28, 267, 70, 445, 514, -342, -32766, 141, 1269, 1270, 515, 919, 834, 326, -272, 919, 1267, 42, 25, 516, 941, 517, 14, 518, 909, 519, 829, 369, 520, 521, 373, 710, 1034, 44, 45, 446, 376, 375, 388, 46, 522, 713, -86, 441, 1102, 367, 338, -543, 442, -544, -544, 831, 1228, 443, 524, 525, 526, 290, 1237, 1236, 1238, 361, 1031, 444, -544, 1088, 527, 528, 840, 1256, 1257, 1258, 1259, 1253, 1254, 297, -544, 151, -550, -584, 834, 1260, 1255, -584, 1034, 1237, 1236, 1238, 298, -154, -154, -154, 152, 71, 909, 321, 322, 326, 909, 921, 1031, 708, 834, 154, -154, 1338, -154, 155, -154, 283, -154, -543, -543, 82, 1233, 1087, 1323, 735, 156, 326, 374, 158, 1034, 1322, -194, -79, -543, -88, -193, 743, 742, 957, 958, 654, 26, -32766, 523, -51, -543, 33, -549, 895, 953, -111, -111, -111, 32, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, -59, 75, 28, 673, 674, 326, -58, 36, 250, 921, 124, 708, 125, 921, 834, 708, -154, 130, 1267, 131, -32766, -547, 144, -542, 150, 406, 1235, 377, 378, 1147, 1149, 382, 383, -32766, -32766, -32766, -85, -32766, 1057, -32766, -542, -32766, 645, 646, -32766, 159, 160, 161, 1233, -32766, -32766, -32766, 162, -79, 1228, -32766, -32766, 743, 742, 163, -302, -32766, 420, -75, -4, 919, -73, 287, 527, 528, -32766, 1256, 1257, 1258, 1259, 1253, 1254, -72, -71, -70, -69, -68, -67, 1260, 1255, -547, -547, -542, -542, 743, 742, -66, -47, -18, -32766, 73, 148, 919, 322, 326, 1235, 273, -542, 284, -542, -542, 724, -32766, -32766, -32766, 727, -32766, -547, -32766, -542, -32766, 918, 147, -32766, -542, 288, 289, -298, -32766, -32766, -32766, -32766, 714, 279, -32766, -32766, -542, 1235, 280, 285, -32766, 420, 48, 286, -32766, -32766, -32766, 332, -32766, -32766, -32766, 292, -32766, 909, 293, -32766, 935, 274, 1031, 919, -32766, -32766, -32766, 110, 683, 132, -32766, -32766, 834, 146, -32766, 560, -32766, 420, 660, 374, 825, 436, 1350, 74, 1034, -32766, 296, 655, 1117, 909, 957, 958, 306, 715, 699, 523, 556, 303, 13, 310, 853, 953, -111, -111, -111, 701, 464, 493, 954, 283, 299, 300, -32766, 49, 676, 919, 304, 661, 1235, 677, 937, 1274, -32766, 10, 1264, -32766, -32766, -32766, 643, -32766, 919, -32766, 921, -32766, 708, -4, -32766, 126, 34, 919, 566, -32766, -32766, -32766, -32766, 0, 909, -32766, -32766, 0, 1235, 919, 0, -32766, 420, 0, 0, -32766, -32766, -32766, 718, -32766, -32766, -32766, 921, -32766, 708, 1034, -32766, 725, 1276, 0, 488, -32766, -32766, -32766, -32766, 301, 302, -32766, -32766, -507, 1235, 572, -497, -32766, 420, 608, 8, -32766, -32766, -32766, 372, -32766, -32766, -32766, 17, -32766, 909, 371, -32766, 833, 298, 320, 128, -32766, -32766, -32766, 40, 370, 41, -32766, -32766, 909, -250, -250, -250, -32766, 420, 732, 374, 974, 909, 708, 733, 900, -32766, 998, 975, 405, 982, 957, 958, 972, 909, 983, 523, 898, 970, 1091, 1094, 895, 953, -111, -111, -111, 28, 1095, 1092, 1093, -249, -249, -249, 1242, 1099, 709, 374, 845, 834, 1289, 1307, 1341, 1267, 648, 1268, 712, 716, 957, 958, 717, 1242, 719, 523, 921, 720, 708, -250, 895, 953, -111, -111, -111, 721, -16, 722, 726, 711, -511, 921, 409, 708, -578, 1233, 729, 896, 1345, 1347, 921, 1228, 708, -577, 856, 855, 947, 990, 1346, 946, 944, 945, 921, 948, 708, -249, 528, 1219, 1256, 1257, 1258, 1259, 1253, 1254, 928, 938, 926, 980, 981, 632, 1260, 1255, 1344, 1301, -32766, 1290, 1308, 834, 1317, -275, 1235, -576, 73, -550, -549, 322, 326, -32766, -32766, -32766, -548, -32766, -491, -32766, 834, -32766, 1, 29, -32766, 30, 39, 43, 47, -32766, -32766, -32766, 72, 76, 77, -32766, -32766, 1233, -111, -111, 78, -32766, 420, -111, 79, 80, 81, 143, 153, -111, -32766, 157, 246, 328, 1233, -111, -111, 356, -32766, 357, -111, 358, 359, 360, 361, 362, -111, 363, 364, 365, 366, 368, 437, 0, -273, -32766, -272, 19, 20, 298, 21, 22, 24, 404, 75, 1204, 484, 485, 326, 492, 0, 495, 496, 497, 498, 502, 298, 503, 504, 511, 694, 75, 0, 1246, 1187, 326, 1265, 1060, 1059, 1040, 1223, 1036, -277, -103, 18, 23, 27, 295, 403, 601, 605, 634, 700, 1191, 1241, 1188, 1320, 0, 0, 0, 326); protected $actionCheck = array(2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 70, 9, 10, 11, 9, 10, 11, 44, 45, 46, 47, 48, 49, 50, 51, 52, 116, 117, 118, 119, 120, 121, 122, 37, 38, 30, 116, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 8, 53, 54, 55, 57, 57, 106, 107, 137, 9, 10, 11, 50, 51, 52, 1, 116, 69, 71, 72, 73, 74, 75, 76, 77, 134, 135, 80, 1, 30, 30, 30, 32, 33, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 80, 70, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8, 1, 106, 80, 108, 150, 151, 152, 8, 154, 9, 10, 11, 2, 3, 4, 5, 6, 7, 164, 9, 10, 11, 12, 13, 116, 119, 120, 121, 122, 106, 30, 108, 32, 33, 34, 35, 36, 37, 38, 9, 10, 11, 106, 107, 138, 137, 138, 37, 38, 9, 10, 11, 116, 134, 135, 1, 9, 10, 11, 137, 30, 14, 8, 155, 156, 157, 1, 57, 149, 163, 30, 163, 32, 33, 34, 35, 36, 155, 156, 157, 161, 71, 72, 73, 74, 75, 76, 77, 8, 31, 80, 129, 130, 131, 158, 161, 8, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 80, 136, 137, 138, 139, 140, 141, 142, 143, 144, 164, 9, 10, 11, 160, 150, 151, 152, 164, 154, 2, 3, 4, 5, 6, 7, 80, 9, 10, 11, 12, 13, 30, 8, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 30, 57, 1, 8, 116, 117, 118, 119, 120, 121, 122, 160, 106, 69, 108, 164, 161, 57, 9, 10, 11, 9, 10, 161, 1, 1, 37, 38, 1, 167, 31, 71, 72, 73, 74, 75, 76, 77, 8, 30, 80, 32, 33, 34, 35, 14, 85, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 8, 122, 136, 137, 138, 139, 140, 141, 142, 143, 144, 8, 51, 146, 138, 82, 150, 151, 152, 2, 3, 4, 5, 6, 7, 106, 97, 108, 1, 12, 13, 101, 15, 9, 10, 11, 106, 80, 108, 163, 1, 80, 163, 113, 83, 8, 116, 117, 118, 119, 120, 121, 122, 123, 30, 8, 32, 33, 34, 8, 117, 118, 80, 31, 159, 122, 159, 50, 51, 8, 80, 128, 70, 56, 155, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 1, 70, 71, 72, 73, 74, 162, 9, 161, 78, 79, 80, 1, 82, 167, 164, 1, 86, 87, 88, 89, 122, 91, 101, 93, 84, 95, 156, 8, 98, 99, 8, 161, 138, 103, 104, 105, 106, 107, 8, 109, 110, 31, 97, 8, 123, 115, 116, 70, 8, 134, 135, 156, 122, 8, 124, 125, 126, 163, 155, 156, 157, 163, 116, 8, 149, 162, 136, 137, 8, 139, 140, 141, 142, 143, 144, 145, 161, 14, 163, 160, 82, 151, 152, 164, 138, 155, 156, 157, 158, 75, 76, 77, 14, 163, 84, 165, 166, 167, 84, 159, 116, 161, 82, 14, 90, 85, 92, 14, 94, 163, 96, 134, 135, 161, 116, 159, 1, 161, 14, 167, 106, 14, 138, 8, 164, 16, 149, 31, 164, 37, 38, 117, 118, 75, 76, 137, 122, 31, 161, 14, 163, 127, 128, 129, 130, 131, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 16, 163, 70, 75, 76, 167, 16, 147, 148, 159, 16, 161, 16, 159, 82, 161, 162, 16, 86, 16, 74, 70, 16, 70, 101, 102, 80, 106, 107, 59, 60, 106, 107, 87, 88, 89, 31, 91, 1, 93, 70, 95, 111, 112, 98, 16, 16, 16, 116, 103, 104, 105, 16, 31, 122, 109, 110, 37, 38, 16, 35, 115, 116, 31, 0, 1, 31, 30, 136, 137, 124, 139, 140, 141, 142, 143, 144, 31, 31, 31, 31, 31, 31, 151, 152, 134, 135, 134, 135, 37, 38, 31, 31, 31, 74, 163, 31, 1, 166, 167, 80, 31, 149, 31, 134, 135, 31, 87, 88, 89, 31, 91, 161, 93, 161, 95, 31, 31, 98, 149, 37, 37, 35, 103, 104, 105, 74, 31, 35, 109, 110, 161, 80, 35, 35, 115, 116, 70, 35, 87, 88, 89, 35, 91, 124, 93, 37, 95, 84, 37, 98, 38, 57, 116, 1, 103, 104, 105, 69, 77, 31, 109, 110, 82, 70, 85, 89, 115, 116, 96, 106, 80, 108, 83, 154, 138, 124, 113, 90, 82, 84, 117, 118, 114, 31, 80, 122, 85, 132, 97, 132, 127, 128, 129, 130, 131, 92, 97, 97, 128, 163, 134, 135, 74, 70, 94, 1, 133, 100, 80, 100, 154, 146, 137, 150, 160, 87, 88, 89, 113, 91, 1, 93, 159, 95, 161, 162, 98, 161, 161, 1, 153, 103, 104, 105, 74, -1, 84, 109, 110, -1, 80, 1, -1, 115, 116, -1, -1, 87, 88, 89, 31, 91, 124, 93, 159, 95, 161, 138, 98, 31, 146, -1, 102, 103, 104, 105, 74, 134, 135, 109, 110, 149, 80, 81, 149, 115, 116, 153, 149, 87, 88, 89, 149, 91, 124, 93, 149, 95, 84, 149, 98, 155, 158, 161, 161, 103, 104, 105, 159, 161, 159, 109, 110, 84, 100, 101, 102, 115, 116, 159, 106, 159, 84, 161, 159, 159, 124, 159, 159, 162, 159, 117, 118, 159, 84, 159, 122, 159, 159, 159, 159, 127, 128, 129, 130, 131, 70, 159, 159, 159, 100, 101, 102, 1, 159, 161, 106, 160, 82, 160, 160, 160, 86, 160, 166, 161, 161, 117, 118, 161, 1, 161, 122, 159, 161, 161, 162, 127, 128, 129, 130, 131, 161, 31, 161, 161, 161, 165, 159, 162, 161, 163, 116, 162, 162, 162, 162, 159, 122, 161, 163, 162, 162, 162, 162, 162, 162, 162, 162, 159, 162, 161, 162, 137, 162, 139, 140, 141, 142, 143, 144, 162, 162, 162, 162, 162, 162, 151, 152, 162, 162, 74, 162, 162, 82, 162, 164, 80, 163, 163, 163, 163, 166, 167, 87, 88, 89, 163, 91, 163, 93, 82, 95, 163, 163, 98, 163, 163, 163, 163, 103, 104, 105, 163, 163, 163, 109, 110, 116, 117, 118, 163, 115, 116, 122, 163, 163, 163, 163, 163, 128, 124, 163, 163, 163, 116, 117, 118, 163, 137, 163, 122, 163, 163, 163, 163, 163, 128, 163, 163, 163, 163, 163, 163, -1, 164, 137, 164, 164, 164, 158, 164, 164, 164, 164, 163, 165, 164, 164, 167, 164, -1, 164, 164, 164, 164, 164, 158, 164, 164, 164, 164, 163, -1, 164, 164, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, -1, -1, -1, 167); protected $actionBase = array(0, -2, 154, 542, 752, 893, 929, 52, 374, 431, 398, 869, 793, 235, 307, 307, 793, 307, 784, 908, 908, 917, 908, 538, 841, 468, 468, 468, 708, 708, 708, 708, 740, 740, 849, 849, 881, 817, 634, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 1036, 348, 346, 370, 653, 1063, 1069, 1065, 1070, 1061, 1060, 1064, 1066, 1071, 946, 947, 774, 949, 950, 943, 952, 1067, 882, 1062, 1068, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 525, 191, 359, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 174, 174, 174, 620, 620, 51, 465, 356, 955, 955, 955, 955, 955, 955, 955, 955, 955, 955, 658, 184, 144, 144, 7, 7, 7, 7, 7, 1031, 371, 1048, -25, -25, -25, -25, 50, 725, 526, 449, 39, 317, 80, 474, 474, 13, 13, 512, 512, 422, 422, 512, 512, 512, 808, 808, 808, 808, 443, 505, 360, 308, -78, 209, 209, 209, 209, -78, -78, -78, -78, 803, 877, -78, -78, -78, 63, 641, 641, 822, -1, -1, -1, 641, 253, 790, 548, 253, 384, 548, 480, 402, 764, 759, -49, 447, 764, 639, 755, 198, 143, 825, 609, 825, 1059, 320, 768, 426, 749, 720, 874, 904, 1072, 796, 941, 798, 942, 106, -58, 710, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1058, 1073, 336, 1059, 423, 1073, 1073, 1073, 336, 336, 336, 336, 336, 336, 336, 336, 336, 336, 619, 423, 586, 616, 423, 795, 336, 814, 348, 348, 348, 348, 348, 348, 348, 348, 348, 348, 750, 202, 348, 348, 346, 78, 78, 348, 484, 65, 78, 78, 78, 78, 348, 348, 348, 348, 609, 783, 766, 613, 813, 492, 783, 783, 783, 473, 135, 378, 488, 713, 775, 67, 779, 779, 785, 969, 969, 779, 769, 779, 785, 975, 779, 779, 969, 969, 823, 280, 563, 478, 550, 568, 969, 377, 779, 779, 779, 779, 746, 573, 779, 342, 314, 779, 779, 746, 744, 760, 43, 762, 969, 969, 969, 746, 547, 762, 762, 762, 839, 844, 794, 758, 444, 433, 588, 232, 801, 758, 758, 779, 558, 794, 758, 794, 758, 745, 758, 758, 758, 794, 758, 769, 502, 758, 717, 583, 224, 758, 6, 979, 980, 624, 981, 973, 987, 1019, 991, 992, 873, 965, 999, 974, 993, 972, 970, 773, 682, 684, 818, 811, 963, 777, 777, 777, 956, 777, 777, 777, 777, 777, 777, 777, 777, 682, 743, 829, 765, 1006, 689, 691, 754, 911, 901, 1030, 1004, 1049, 994, 828, 694, 1028, 1008, 910, 821, 1009, 1010, 1029, 1050, 1052, 912, 782, 913, 918, 876, 1012, 883, 777, 979, 992, 693, 974, 993, 972, 970, 748, 739, 737, 738, 736, 735, 723, 734, 753, 1053, 954, 907, 878, 1011, 957, 682, 879, 1023, 756, 1032, 1033, 827, 788, 778, 880, 919, 1014, 1015, 1016, 884, 1054, 887, 830, 1024, 951, 1035, 789, 846, 1037, 1038, 1039, 1040, 889, 920, 892, 916, 900, 845, 776, 1020, 761, 921, 591, 787, 791, 800, 1018, 606, 1000, 902, 906, 922, 1041, 1043, 1044, 923, 924, 995, 847, 1026, 799, 1027, 1022, 848, 850, 617, 797, 1055, 781, 786, 772, 621, 632, 925, 927, 931, 998, 763, 770, 853, 855, 1056, 771, 1057, 938, 635, 857, 718, 939, 1046, 719, 724, 637, 678, 672, 731, 792, 903, 826, 757, 780, 1017, 724, 767, 858, 940, 859, 860, 867, 1045, 868, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 458, 458, 458, 458, 458, 307, 307, 307, 307, 307, 307, 307, 0, 0, 307, 0, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 458, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 66, 66, 291, 291, 291, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 291, 291, 291, 291, 291, 291, 291, 291, 66, 823, 66, -1, -1, -1, -1, 66, 66, 66, -88, -88, 66, 384, 66, 66, -1, -1, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 0, 0, 423, 548, 66, 769, 769, 769, 769, 66, 66, 66, 66, 548, 548, 66, 66, 66, 0, 0, 0, 0, 0, 0, 0, 0, 423, 548, 0, 423, 0, 0, 769, 769, 66, 384, 823, 643, 66, 0, 0, 0, 0, 423, 769, 423, 336, 779, 548, 779, 336, 336, 78, 348, 643, 611, 611, 611, 611, 0, 0, 609, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 769, 0, 823, 0, 769, 769, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 969, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 975, 0, 0, 0, 0, 0, 0, 0, 0, 769, 0, 0, 0, 0, 0, 0, 0, 0, 0, 777, 788, 0, 788, 0, 777, 777, 777, 0, 0, 0, 0, 797, 771); protected $actionDefault = array(3, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 596, 596, 596, 596, 32767, 32767, 254, 103, 32767, 32767, 469, 387, 387, 387, 32767, 32767, 540, 540, 540, 540, 540, 540, 32767, 32767, 32767, 32767, 32767, 32767, 469, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 101, 32767, 32767, 32767, 37, 7, 8, 10, 11, 50, 17, 324, 32767, 32767, 32767, 32767, 103, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 589, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 473, 452, 453, 455, 456, 386, 541, 595, 327, 592, 385, 146, 339, 329, 242, 330, 258, 474, 259, 475, 478, 479, 215, 287, 382, 150, 151, 416, 470, 418, 468, 472, 417, 392, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 390, 391, 471, 449, 448, 447, 32767, 32767, 414, 415, 419, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 389, 422, 420, 421, 438, 439, 436, 437, 440, 32767, 32767, 32767, 441, 442, 443, 444, 316, 32767, 32767, 366, 364, 316, 112, 32767, 32767, 429, 430, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 534, 446, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 103, 32767, 101, 536, 411, 413, 503, 424, 425, 423, 393, 32767, 510, 32767, 103, 32767, 512, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 535, 32767, 542, 542, 32767, 496, 101, 195, 32767, 32767, 32767, 195, 195, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 603, 496, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, 32767, 195, 111, 32767, 32767, 32767, 101, 195, 195, 195, 195, 195, 195, 195, 195, 195, 195, 190, 32767, 268, 270, 103, 557, 195, 515, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 508, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 496, 434, 139, 32767, 139, 542, 426, 427, 428, 498, 542, 542, 542, 312, 289, 32767, 32767, 32767, 32767, 513, 513, 101, 101, 101, 101, 508, 32767, 32767, 32767, 32767, 112, 100, 100, 100, 100, 100, 104, 102, 32767, 32767, 32767, 32767, 223, 100, 32767, 102, 102, 32767, 32767, 223, 225, 212, 102, 227, 32767, 561, 562, 223, 102, 227, 227, 227, 247, 247, 485, 318, 102, 100, 102, 102, 197, 318, 318, 32767, 102, 485, 318, 485, 318, 199, 318, 318, 318, 485, 318, 32767, 102, 318, 214, 100, 100, 318, 32767, 32767, 32767, 498, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 222, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 546, 559, 432, 433, 435, 544, 457, 458, 459, 460, 461, 462, 463, 465, 591, 32767, 502, 32767, 32767, 32767, 338, 601, 32767, 601, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 602, 32767, 542, 32767, 32767, 32767, 32767, 431, 9, 76, 491, 43, 44, 52, 58, 519, 520, 521, 522, 516, 517, 523, 518, 32767, 32767, 524, 567, 32767, 32767, 543, 594, 32767, 32767, 32767, 32767, 32767, 32767, 139, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 529, 32767, 137, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 525, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 314, 311, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 542, 32767, 32767, 32767, 32767, 32767, 291, 32767, 308, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 286, 32767, 32767, 381, 498, 294, 296, 297, 32767, 32767, 32767, 32767, 360, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 32767, 153, 153, 3, 3, 341, 153, 153, 153, 341, 341, 153, 341, 341, 341, 153, 153, 153, 153, 153, 153, 280, 185, 262, 265, 247, 247, 153, 352, 153); protected $goto = array(196, 196, 1032, 704, 695, 431, 659, 1063, 1335, 1335, 425, 313, 314, 335, 574, 319, 430, 336, 432, 636, 652, 653, 851, 670, 671, 672, 1335, 167, 167, 167, 167, 221, 197, 193, 193, 177, 179, 216, 193, 193, 193, 193, 193, 194, 194, 194, 194, 194, 194, 188, 189, 190, 191, 192, 218, 216, 219, 535, 536, 421, 537, 539, 540, 541, 542, 543, 544, 545, 546, 1133, 168, 169, 170, 195, 171, 172, 173, 166, 174, 175, 176, 178, 215, 217, 220, 238, 243, 244, 245, 257, 258, 259, 260, 261, 262, 263, 264, 268, 269, 270, 271, 281, 282, 316, 317, 318, 426, 427, 428, 579, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 180, 237, 181, 198, 199, 200, 239, 188, 189, 190, 191, 192, 218, 1133, 201, 182, 183, 184, 202, 198, 185, 240, 203, 201, 165, 204, 205, 186, 206, 207, 208, 187, 209, 210, 211, 212, 213, 214, 854, 619, 656, 278, 278, 278, 278, 852, 621, 621, 350, 419, 598, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1266, 1284, 1284, 832, 1105, 1106, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 1284, 353, 353, 353, 353, 826, 558, 551, 908, 903, 904, 917, 860, 905, 857, 906, 907, 858, 1035, 1035, 911, 864, 679, 950, 458, 863, 1027, 1043, 1044, 832, 885, 832, 1085, 1080, 1081, 1082, 341, 551, 558, 567, 568, 343, 577, 600, 614, 615, 547, 547, 547, 547, 973, 602, 15, 394, 397, 559, 599, 603, 1213, 942, 1234, 571, 1234, 1214, 1217, 943, 1218, 1032, 1032, 1234, 440, 912, 1032, 913, 1032, 1032, 1038, 1037, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1032, 1316, 1316, 1316, 1316, 1234, 476, 1309, 1310, 348, 1234, 1234, 1234, 1234, 407, 408, 1234, 1234, 1234, 668, 1324, 669, 354, 412, 413, 414, 867, 682, 466, 466, 415, 994, 354, 354, 346, 924, 424, 466, 609, 925, 5, 879, 6, 940, 866, 940, 354, 354, 1282, 1282, 354, 392, 1351, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 1282, 553, 538, 538, 570, 354, 658, 538, 538, 538, 538, 538, 538, 538, 538, 538, 538, 549, 565, 549, 1041, 1042, 731, 635, 637, 850, 549, 657, 965, 410, 703, 681, 685, 1008, 693, 702, 1004, 252, 252, 997, 971, 971, 969, 971, 730, 1056, 550, 1006, 1001, 1182, 456, 847, 1295, 1334, 1334, 967, 967, 967, 967, 325, 308, 456, 961, 968, 249, 249, 249, 249, 251, 253, 438, 1334, 351, 352, 684, 680, 552, 562, 450, 450, 450, 552, 1306, 562, 1306, 479, 395, 462, 1337, 1311, 1312, 1306, 664, 481, 500, 337, 501, 844, 469, 578, 470, 471, 507, 847, 877, 553, 872, 1342, 1343, 1011, 1011, 575, 612, 324, 275, 324, 1318, 1318, 1318, 1318, 607, 622, 625, 626, 627, 628, 649, 650, 651, 706, 956, 401, 692, 875, 1229, 828, 869, 692, 629, 631, 633, 692, 433, 1302, 1225, 734, 613, 433, 880, 868, 1068, 1072, 1069, 1016, 477, 1039, 1039, 881, 0, 976, 663, 1050, 1046, 1047, 1073, 1116, 978, 0, 1227, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, 929, 1121, 450, 966, 1071, 0, 0, 617, 1304, 1304, 1071, 1230, 1231, 1013, 0, 0, 0, 0, 0, 842, 0, 871, 0, 662, 992, 1114, 884, 597, 1098, 865, 707, 0, 0, 508, 698, 0, 1096, 1232, 1292, 1293, 0, 1224, 0, 847, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255); protected $gotoCheck = array(42, 42, 72, 9, 72, 65, 65, 126, 181, 181, 65, 65, 65, 65, 65, 65, 65, 65, 65, 65, 85, 85, 26, 85, 85, 85, 181, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 15, 55, 55, 23, 23, 23, 23, 27, 107, 107, 96, 43, 129, 107, 107, 107, 107, 107, 107, 107, 107, 107, 107, 168, 168, 12, 143, 143, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 24, 24, 24, 24, 6, 75, 75, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 88, 88, 15, 15, 88, 88, 82, 15, 88, 88, 88, 12, 45, 12, 15, 15, 15, 15, 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, 106, 106, 106, 106, 49, 106, 75, 58, 58, 58, 58, 58, 78, 78, 72, 170, 72, 78, 78, 78, 78, 72, 72, 72, 82, 64, 72, 64, 72, 72, 117, 117, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 72, 9, 9, 9, 9, 72, 174, 174, 174, 177, 72, 72, 72, 72, 81, 81, 72, 72, 72, 81, 179, 81, 14, 81, 81, 81, 35, 81, 148, 148, 81, 102, 14, 14, 81, 72, 13, 148, 13, 72, 46, 35, 46, 9, 35, 9, 14, 14, 169, 169, 14, 61, 14, 169, 169, 169, 169, 169, 169, 169, 169, 169, 169, 14, 171, 171, 103, 14, 63, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 19, 48, 19, 118, 118, 48, 48, 48, 25, 19, 48, 92, 92, 92, 48, 48, 48, 48, 48, 48, 5, 5, 25, 25, 25, 25, 25, 25, 113, 25, 25, 25, 150, 19, 22, 14, 180, 180, 19, 19, 19, 19, 167, 167, 19, 19, 19, 5, 5, 5, 5, 5, 5, 112, 180, 96, 96, 14, 115, 9, 9, 23, 23, 23, 9, 129, 9, 129, 83, 9, 9, 180, 176, 176, 129, 119, 83, 154, 29, 154, 18, 9, 9, 9, 9, 154, 22, 9, 14, 39, 9, 9, 106, 106, 2, 2, 24, 24, 24, 129, 129, 129, 129, 80, 80, 80, 80, 80, 80, 80, 80, 80, 80, 91, 28, 7, 9, 20, 7, 37, 7, 84, 84, 84, 7, 116, 129, 159, 98, 79, 116, 16, 16, 16, 16, 128, 109, 156, 116, 116, 41, -1, 16, 116, 116, 116, 116, 131, 146, 95, -1, 14, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 17, 17, 23, 16, 129, -1, -1, 17, 129, 129, 129, 20, 20, 17, -1, -1, -1, -1, -1, 20, -1, 17, -1, 17, 17, 16, 16, 8, 8, 17, 8, -1, -1, 8, 8, -1, 8, 20, 20, 20, -1, 17, -1, 22, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 5, 5); protected $gotoBase = array(0, 0, -249, 0, 0, 386, 192, 475, 549, -10, 0, 0, -108, -13, 13, -184, 46, 65, 138, 102, 93, 0, 123, 163, 198, 371, 18, 166, 144, 149, 0, 0, 0, 0, 0, -56, 0, 147, 0, 133, 0, 66, -1, 162, 0, 214, -406, 0, -341, 226, 0, 0, 0, 0, 0, 124, 0, 0, 208, 0, 0, 297, 0, 114, 251, -236, 0, 0, 0, 0, 0, 0, -5, 0, 0, -138, 0, 0, -149, 153, 113, -189, -54, -34, 9, -696, 0, 0, -61, 0, 0, 151, 74, 0, 0, 73, -310, 0, 89, 0, 0, 0, 284, 311, 0, 0, 218, -70, 0, 134, 0, 0, 143, 122, 0, 142, 220, -3, 85, 152, 0, 0, 0, 0, 0, 0, 5, 0, 129, 167, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -86, 0, 0, 71, 0, 282, 0, 125, 0, 0, 0, -51, 0, 64, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 88, -55, 95, 232, 111, 0, 0, -6, 0, 68, 267, 0, 277, 96, -299, 0, 0); protected $gotoDefault = array(-32768, 512, 738, 4, 739, 933, 815, 824, 595, 529, 705, 347, 623, 422, 1300, 910, 1120, 576, 843, 1243, 1251, 457, 846, 330, 728, 892, 893, 894, 398, 385, 859, 396, 647, 624, 494, 878, 453, 870, 486, 873, 452, 882, 164, 418, 510, 886, 3, 889, 555, 920, 386, 897, 387, 675, 899, 561, 901, 902, 393, 399, 400, 1125, 569, 620, 914, 256, 563, 915, 384, 916, 923, 389, 391, 686, 465, 505, 499, 411, 1100, 564, 606, 644, 447, 473, 618, 630, 616, 480, 434, 416, 329, 955, 963, 487, 463, 977, 349, 985, 736, 1132, 638, 489, 993, 639, 1000, 1003, 530, 531, 478, 1015, 272, 1018, 490, 12, 665, 1029, 1030, 666, 640, 1052, 641, 667, 642, 1054, 472, 596, 1062, 454, 1070, 1288, 455, 1074, 266, 1077, 277, 417, 435, 1083, 1084, 9, 1090, 696, 697, 11, 276, 509, 1115, 687, 451, 1131, 439, 1201, 1203, 557, 491, 1221, 1220, 678, 506, 1226, 448, 1291, 449, 532, 474, 315, 533, 307, 333, 312, 548, 294, 334, 534, 475, 1297, 1305, 331, 31, 1325, 1336, 342, 573, 611); protected $ruleToNonTerminal = array(0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 68, 68, 71, 71, 70, 69, 69, 62, 74, 74, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 26, 26, 27, 27, 27, 27, 27, 87, 87, 89, 89, 82, 82, 90, 90, 91, 91, 91, 83, 83, 86, 86, 84, 84, 92, 93, 93, 56, 56, 64, 64, 67, 67, 67, 66, 94, 94, 95, 57, 57, 57, 57, 96, 96, 97, 97, 98, 98, 99, 100, 100, 101, 101, 102, 102, 54, 54, 50, 50, 104, 52, 52, 105, 51, 51, 53, 53, 63, 63, 63, 63, 80, 80, 108, 108, 110, 110, 111, 111, 111, 111, 109, 109, 109, 113, 113, 113, 113, 88, 88, 116, 116, 116, 117, 117, 114, 114, 118, 118, 120, 120, 121, 121, 115, 122, 122, 119, 123, 123, 123, 123, 112, 112, 81, 81, 81, 20, 20, 20, 125, 124, 124, 126, 126, 126, 126, 59, 127, 127, 128, 60, 130, 130, 131, 131, 132, 132, 85, 133, 133, 133, 133, 133, 133, 133, 138, 138, 139, 139, 140, 140, 140, 140, 140, 141, 142, 142, 137, 137, 134, 134, 136, 136, 144, 144, 143, 143, 143, 143, 143, 143, 143, 135, 145, 145, 147, 146, 146, 61, 103, 148, 148, 55, 55, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 155, 149, 149, 154, 154, 157, 158, 158, 159, 160, 161, 161, 161, 161, 19, 19, 72, 72, 72, 72, 150, 150, 150, 150, 163, 163, 151, 151, 153, 153, 153, 156, 156, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 107, 171, 171, 171, 171, 152, 152, 152, 152, 152, 152, 152, 152, 58, 58, 166, 166, 166, 166, 172, 172, 162, 162, 162, 173, 173, 173, 173, 173, 173, 73, 73, 65, 65, 65, 65, 129, 129, 129, 129, 176, 175, 165, 165, 165, 165, 165, 165, 165, 164, 164, 164, 174, 174, 174, 174, 106, 170, 178, 178, 177, 177, 179, 179, 179, 179, 179, 179, 179, 179, 167, 167, 167, 167, 181, 182, 180, 180, 180, 180, 180, 180, 180, 180, 183, 183, 183, 183); protected $ruleToLength = array(1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 1, 3, 5, 4, 3, 4, 1, 3, 1, 1, 8, 7, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 6, 8, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 1, 1, 3, 1, 2, 2, 3, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 1, 1, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 3, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 3, 1, 1, 4, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1); protected function initReduceCallbacks() { $this->reduceCallbacks = [0 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 1 => function ($stackPos) { $this->semValue = $this->handleNamespaces($this->semStack[$stackPos - (1 - 1)]); }, 2 => function ($stackPos) { if (\is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 3 => function ($stackPos) { $this->semValue = array(); }, 4 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 5 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 6 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 7 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 8 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 9 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 10 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 11 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 12 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 13 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 14 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 15 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 16 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 17 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 18 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 19 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 20 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 21 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 22 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 23 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 24 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 25 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 26 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 27 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 28 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 29 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 30 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 31 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 32 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 33 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 34 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 35 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 36 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 37 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 38 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 39 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 40 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 41 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 42 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 43 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 44 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 45 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 46 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 47 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 48 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 49 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 50 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 51 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 52 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 53 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 54 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 55 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 56 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 57 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 58 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 59 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 60 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 61 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 62 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 63 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 64 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 65 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 66 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 67 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 68 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 69 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 70 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 71 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 72 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 73 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 74 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 75 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 76 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 77 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 78 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 79 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 80 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 81 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 82 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 83 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 84 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 85 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 86 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 87 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 88 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 89 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 90 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 91 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 92 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 93 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 94 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 95 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 96 => function ($stackPos) { $this->semValue = new Name(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 97 => function ($stackPos) { $this->semValue = new Expr\Variable(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 98 => function ($stackPos) { /* nothing */ }, 99 => function ($stackPos) { /* nothing */ }, 100 => function ($stackPos) { /* nothing */ }, 101 => function ($stackPos) { $this->emitError(new Error('A trailing comma is not allowed here', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); }, 102 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 103 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 104 => function ($stackPos) { $this->semValue = new Node\Attribute($this->semStack[$stackPos - (1 - 1)], [], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 105 => function ($stackPos) { $this->semValue = new Node\Attribute($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 106 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 107 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 108 => function ($stackPos) { $this->semValue = new Node\AttributeGroup($this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 109 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 110 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 111 => function ($stackPos) { $this->semValue = []; }, 112 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 113 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 114 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 115 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 116 => function ($stackPos) { $this->semValue = new Stmt\HaltCompiler($this->lexer->handleHaltCompiler(), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 117 => function ($stackPos) { $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (3 - 2)], null, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $this->checkNamespace($this->semValue); }, 118 => function ($stackPos) { $this->semValue = new Stmt\Namespace_($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); }, 119 => function ($stackPos) { $this->semValue = new Stmt\Namespace_(null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); $this->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $this->checkNamespace($this->semValue); }, 120 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (3 - 2)], Stmt\Use_::TYPE_NORMAL, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 121 => function ($stackPos) { $this->semValue = new Stmt\Use_($this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 122 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 123 => function ($stackPos) { $this->semValue = new Stmt\Const_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 124 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_FUNCTION; }, 125 => function ($stackPos) { $this->semValue = Stmt\Use_::TYPE_CONSTANT; }, 126 => function ($stackPos) { $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 2)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 127 => function ($stackPos) { $this->semValue = new Stmt\GroupUse($this->semStack[$stackPos - (7 - 2)], $this->semStack[$stackPos - (7 - 5)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 128 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 129 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 130 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 131 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 132 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 133 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 134 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 135 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 136 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 137 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); }, 138 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); }, 139 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (1 - 1)], null, Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (1 - 1)); }, 140 => function ($stackPos) { $this->semValue = new Stmt\UseUse($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], Stmt\Use_::TYPE_UNKNOWN, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->checkUseUse($this->semValue, $stackPos - (3 - 3)); }, 141 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $this->semValue->type = Stmt\Use_::TYPE_NORMAL; }, 142 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; $this->semValue->type = $this->semStack[$stackPos - (2 - 1)]; }, 143 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 144 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 145 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 146 => function ($stackPos) { $this->semValue = new Node\Const_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 147 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 148 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 149 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 150 => function ($stackPos) { $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributeStack[$stackPos - (3 - 1)]), $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 151 => function ($stackPos) { $this->semValue = new Node\Const_(new Node\Identifier($this->semStack[$stackPos - (3 - 1)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributeStack[$stackPos - (3 - 1)]), $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 152 => function ($stackPos) { if (\is_array($this->semStack[$stackPos - (2 - 2)])) { $this->semValue = \array_merge($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); } else { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 153 => function ($stackPos) { $this->semValue = array(); }, 154 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 155 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 156 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 157 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 158 => function ($stackPos) { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 159 => function ($stackPos) { if ($this->semStack[$stackPos - (3 - 2)]) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; $attrs = $this->startAttributeStack[$stackPos - (3 - 1)]; $stmts = $this->semValue; if (!empty($attrs['comments'])) { $stmts[0]->setAttribute('comments', \array_merge($attrs['comments'], $stmts[0]->getAttribute('comments', []))); } } else { $startAttributes = $this->startAttributeStack[$stackPos - (3 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; } if (null === $this->semValue) { $this->semValue = array(); } } }, 160 => function ($stackPos) { $this->semValue = new Stmt\If_($this->semStack[$stackPos - (7 - 3)], ['stmts' => \is_array($this->semStack[$stackPos - (7 - 5)]) ? $this->semStack[$stackPos - (7 - 5)] : array($this->semStack[$stackPos - (7 - 5)]), 'elseifs' => $this->semStack[$stackPos - (7 - 6)], 'else' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 161 => function ($stackPos) { $this->semValue = new Stmt\If_($this->semStack[$stackPos - (10 - 3)], ['stmts' => $this->semStack[$stackPos - (10 - 6)], 'elseifs' => $this->semStack[$stackPos - (10 - 7)], 'else' => $this->semStack[$stackPos - (10 - 8)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); }, 162 => function ($stackPos) { $this->semValue = new Stmt\While_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 163 => function ($stackPos) { $this->semValue = new Stmt\Do_($this->semStack[$stackPos - (7 - 5)], \is_array($this->semStack[$stackPos - (7 - 2)]) ? $this->semStack[$stackPos - (7 - 2)] : array($this->semStack[$stackPos - (7 - 2)]), $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 164 => function ($stackPos) { $this->semValue = new Stmt\For_(['init' => $this->semStack[$stackPos - (9 - 3)], 'cond' => $this->semStack[$stackPos - (9 - 5)], 'loop' => $this->semStack[$stackPos - (9 - 7)], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 165 => function ($stackPos) { $this->semValue = new Stmt\Switch_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 166 => function ($stackPos) { $this->semValue = new Stmt\Break_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 167 => function ($stackPos) { $this->semValue = new Stmt\Continue_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 168 => function ($stackPos) { $this->semValue = new Stmt\Return_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 169 => function ($stackPos) { $this->semValue = new Stmt\Global_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 170 => function ($stackPos) { $this->semValue = new Stmt\Static_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 171 => function ($stackPos) { $this->semValue = new Stmt\Echo_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 172 => function ($stackPos) { $this->semValue = new Stmt\InlineHTML($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 173 => function ($stackPos) { $e = $this->semStack[$stackPos - (2 - 1)]; if ($e instanceof Expr\Throw_) { // For backwards-compatibility reasons, convert throw in statement position into // Stmt\Throw_ rather than Stmt\Expression(Expr\Throw_). $this->semValue = new Stmt\Throw_($e->expr, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); } else { $this->semValue = new Stmt\Expression($e, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); } }, 174 => function ($stackPos) { $this->semValue = new Stmt\Unset_($this->semStack[$stackPos - (5 - 3)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 175 => function ($stackPos) { $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 5)][0], ['keyVar' => null, 'byRef' => $this->semStack[$stackPos - (7 - 5)][1], 'stmts' => $this->semStack[$stackPos - (7 - 7)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 176 => function ($stackPos) { $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (9 - 3)], $this->semStack[$stackPos - (9 - 7)][0], ['keyVar' => $this->semStack[$stackPos - (9 - 5)], 'byRef' => $this->semStack[$stackPos - (9 - 7)][1], 'stmts' => $this->semStack[$stackPos - (9 - 9)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 177 => function ($stackPos) { $this->semValue = new Stmt\Foreach_($this->semStack[$stackPos - (6 - 3)], new Expr\Error($this->startAttributeStack[$stackPos - (6 - 4)] + $this->endAttributeStack[$stackPos - (6 - 4)]), ['stmts' => $this->semStack[$stackPos - (6 - 6)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 178 => function ($stackPos) { $this->semValue = new Stmt\Declare_($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 179 => function ($stackPos) { $this->semValue = new Stmt\TryCatch($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->checkTryCatch($this->semValue); }, 180 => function ($stackPos) { $this->semValue = new Stmt\Goto_($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 181 => function ($stackPos) { $this->semValue = new Stmt\Label($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 182 => function ($stackPos) { $this->semValue = array(); /* means: no statement */ }, 183 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 184 => function ($stackPos) { $startAttributes = $this->startAttributeStack[$stackPos - (1 - 1)]; if (isset($startAttributes['comments'])) { $this->semValue = new Stmt\Nop($startAttributes + $this->endAttributes); } else { $this->semValue = null; } if ($this->semValue === null) { $this->semValue = array(); } /* means: no statement */ }, 185 => function ($stackPos) { $this->semValue = array(); }, 186 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 187 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 188 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 189 => function ($stackPos) { $this->semValue = new Stmt\Catch_($this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 7)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 190 => function ($stackPos) { $this->semValue = null; }, 191 => function ($stackPos) { $this->semValue = new Stmt\Finally_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 192 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 193 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 194 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 195 => function ($stackPos) { $this->semValue = \false; }, 196 => function ($stackPos) { $this->semValue = \true; }, 197 => function ($stackPos) { $this->semValue = \false; }, 198 => function ($stackPos) { $this->semValue = \true; }, 199 => function ($stackPos) { $this->semValue = \false; }, 200 => function ($stackPos) { $this->semValue = \true; }, 201 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 202 => function ($stackPos) { $this->semValue = []; }, 203 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 204 => function ($stackPos) { $this->semValue = new Node\Identifier($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 205 => function ($stackPos) { $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (8 - 3)], ['byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 5)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 206 => function ($stackPos) { $this->semValue = new Stmt\Function_($this->semStack[$stackPos - (9 - 4)], ['byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 6)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 207 => function ($stackPos) { $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (7 - 2)], ['type' => $this->semStack[$stackPos - (7 - 1)], 'extends' => $this->semStack[$stackPos - (7 - 3)], 'implements' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); $this->checkClass($this->semValue, $stackPos - (7 - 2)); }, 208 => function ($stackPos) { $this->semValue = new Stmt\Class_($this->semStack[$stackPos - (8 - 3)], ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); $this->checkClass($this->semValue, $stackPos - (8 - 3)); }, 209 => function ($stackPos) { $this->semValue = new Stmt\Interface_($this->semStack[$stackPos - (7 - 3)], ['extends' => $this->semStack[$stackPos - (7 - 4)], 'stmts' => $this->semStack[$stackPos - (7 - 6)], 'attrGroups' => $this->semStack[$stackPos - (7 - 1)]], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); $this->checkInterface($this->semValue, $stackPos - (7 - 3)); }, 210 => function ($stackPos) { $this->semValue = new Stmt\Trait_($this->semStack[$stackPos - (6 - 3)], ['stmts' => $this->semStack[$stackPos - (6 - 5)], 'attrGroups' => $this->semStack[$stackPos - (6 - 1)]], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 211 => function ($stackPos) { $this->semValue = new Stmt\Enum_($this->semStack[$stackPos - (8 - 3)], ['scalarType' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); $this->checkEnum($this->semValue, $stackPos - (8 - 3)); }, 212 => function ($stackPos) { $this->semValue = null; }, 213 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 214 => function ($stackPos) { $this->semValue = null; }, 215 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 216 => function ($stackPos) { $this->semValue = 0; }, 217 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 218 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 219 => function ($stackPos) { $this->checkClassModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 220 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 221 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 222 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_READONLY; }, 223 => function ($stackPos) { $this->semValue = null; }, 224 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 225 => function ($stackPos) { $this->semValue = array(); }, 226 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 227 => function ($stackPos) { $this->semValue = array(); }, 228 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 229 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 230 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 231 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 232 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 233 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 234 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 235 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 236 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 237 => function ($stackPos) { $this->semValue = null; }, 238 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 239 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 240 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 241 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 242 => function ($stackPos) { $this->semValue = new Stmt\DeclareDeclare($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 243 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 244 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 245 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 246 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (5 - 3)]; }, 247 => function ($stackPos) { $this->semValue = array(); }, 248 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 249 => function ($stackPos) { $this->semValue = new Stmt\Case_($this->semStack[$stackPos - (4 - 2)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 250 => function ($stackPos) { $this->semValue = new Stmt\Case_(null, $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 251 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 252 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 253 => function ($stackPos) { $this->semValue = new Expr\Match_($this->semStack[$stackPos - (7 - 3)], $this->semStack[$stackPos - (7 - 6)], $this->startAttributeStack[$stackPos - (7 - 1)] + $this->endAttributes); }, 254 => function ($stackPos) { $this->semValue = []; }, 255 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 256 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 257 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 258 => function ($stackPos) { $this->semValue = new Node\MatchArm($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 259 => function ($stackPos) { $this->semValue = new Node\MatchArm(null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 260 => function ($stackPos) { $this->semValue = \is_array($this->semStack[$stackPos - (1 - 1)]) ? $this->semStack[$stackPos - (1 - 1)] : array($this->semStack[$stackPos - (1 - 1)]); }, 261 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 262 => function ($stackPos) { $this->semValue = array(); }, 263 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 264 => function ($stackPos) { $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (5 - 3)], \is_array($this->semStack[$stackPos - (5 - 5)]) ? $this->semStack[$stackPos - (5 - 5)] : array($this->semStack[$stackPos - (5 - 5)]), $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 265 => function ($stackPos) { $this->semValue = array(); }, 266 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 267 => function ($stackPos) { $this->semValue = new Stmt\ElseIf_($this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 6)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue); }, 268 => function ($stackPos) { $this->semValue = null; }, 269 => function ($stackPos) { $this->semValue = new Stmt\Else_(\is_array($this->semStack[$stackPos - (2 - 2)]) ? $this->semStack[$stackPos - (2 - 2)] : array($this->semStack[$stackPos - (2 - 2)]), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 270 => function ($stackPos) { $this->semValue = null; }, 271 => function ($stackPos) { $this->semValue = new Stmt\Else_($this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->fixupAlternativeElse($this->semValue); }, 272 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 273 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (2 - 2)], \true); }, 274 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 275 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)], \false); }, 276 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 277 => function ($stackPos) { $this->semValue = array(); }, 278 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 279 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 280 => function ($stackPos) { $this->semValue = 0; }, 281 => function ($stackPos) { $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 282 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 283 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 284 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; }, 285 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_READONLY; }, 286 => function ($stackPos) { $this->semValue = new Node\Param($this->semStack[$stackPos - (6 - 6)], null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); $this->checkParam($this->semValue); }, 287 => function ($stackPos) { $this->semValue = new Node\Param($this->semStack[$stackPos - (8 - 6)], $this->semStack[$stackPos - (8 - 8)], $this->semStack[$stackPos - (8 - 3)], $this->semStack[$stackPos - (8 - 4)], $this->semStack[$stackPos - (8 - 5)], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (8 - 2)], $this->semStack[$stackPos - (8 - 1)]); $this->checkParam($this->semValue); }, 288 => function ($stackPos) { $this->semValue = new Node\Param(new Expr\Error($this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes), null, $this->semStack[$stackPos - (6 - 3)], $this->semStack[$stackPos - (6 - 4)], $this->semStack[$stackPos - (6 - 5)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 1)]); }, 289 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 290 => function ($stackPos) { $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 291 => function ($stackPos) { $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 292 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 293 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 294 => function ($stackPos) { $this->semValue = new Node\Name('static', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 295 => function ($stackPos) { $this->semValue = $this->handleBuiltinTypes($this->semStack[$stackPos - (1 - 1)]); }, 296 => function ($stackPos) { $this->semValue = new Node\Identifier('array', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 297 => function ($stackPos) { $this->semValue = new Node\Identifier('callable', $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 298 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 299 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 300 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 301 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 302 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 303 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 304 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 305 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 306 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 307 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 308 => function ($stackPos) { $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 309 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 310 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 311 => function ($stackPos) { $this->semValue = new Node\IntersectionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 312 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 313 => function ($stackPos) { $this->semValue = new Node\NullableType($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 314 => function ($stackPos) { $this->semValue = new Node\UnionType($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 315 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 316 => function ($stackPos) { $this->semValue = null; }, 317 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 318 => function ($stackPos) { $this->semValue = null; }, 319 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 2)]; }, 320 => function ($stackPos) { $this->semValue = null; }, 321 => function ($stackPos) { $this->semValue = array(); }, 322 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 2)]; }, 323 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 2)]); }, 324 => function ($stackPos) { $this->semValue = new Node\VariadicPlaceholder($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 325 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 326 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 327 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (1 - 1)], \false, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 328 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \true, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 329 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (2 - 2)], \false, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 330 => function ($stackPos) { $this->semValue = new Node\Arg($this->semStack[$stackPos - (3 - 3)], \false, \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (3 - 1)]); }, 331 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 332 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 333 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 334 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 335 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 336 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 337 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 338 => function ($stackPos) { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 339 => function ($stackPos) { $this->semValue = new Stmt\StaticVar($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 340 => function ($stackPos) { if ($this->semStack[$stackPos - (2 - 2)] !== null) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } else { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; } }, 341 => function ($stackPos) { $this->semValue = array(); }, 342 => function ($stackPos) { $startAttributes = $this->lookaheadStartAttributes; if (isset($startAttributes['comments'])) { $nop = new Stmt\Nop($this->createCommentNopAttributes($startAttributes['comments'])); } else { $nop = null; } if ($nop !== null) { $this->semStack[$stackPos - (1 - 1)][] = $nop; } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 343 => function ($stackPos) { $this->semValue = new Stmt\Property($this->semStack[$stackPos - (5 - 2)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 1)]); $this->checkProperty($this->semValue, $stackPos - (5 - 2)); }, 344 => function ($stackPos) { $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 2)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (5 - 1)]); $this->checkClassConst($this->semValue, $stackPos - (5 - 2)); }, 345 => function ($stackPos) { $this->semValue = new Stmt\ClassConst($this->semStack[$stackPos - (6 - 5)], $this->semStack[$stackPos - (6 - 2)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes, $this->semStack[$stackPos - (6 - 1)], $this->semStack[$stackPos - (6 - 4)]); $this->checkClassConst($this->semValue, $stackPos - (6 - 2)); }, 346 => function ($stackPos) { $this->semValue = new Stmt\ClassMethod($this->semStack[$stackPos - (10 - 5)], ['type' => $this->semStack[$stackPos - (10 - 2)], 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 7)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); $this->checkClassMethod($this->semValue, $stackPos - (10 - 2)); }, 347 => function ($stackPos) { $this->semValue = new Stmt\TraitUse($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 348 => function ($stackPos) { $this->semValue = new Stmt\EnumCase($this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->semStack[$stackPos - (5 - 1)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 349 => function ($stackPos) { $this->semValue = null; /* will be skipped */ }, 350 => function ($stackPos) { $this->semValue = array(); }, 351 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 352 => function ($stackPos) { $this->semValue = array(); }, 353 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 354 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Precedence($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 355 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (5 - 1)][0], $this->semStack[$stackPos - (5 - 1)][1], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 356 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], $this->semStack[$stackPos - (4 - 3)], null, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 357 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 358 => function ($stackPos) { $this->semValue = new Stmt\TraitUseAdaptation\Alias($this->semStack[$stackPos - (4 - 1)][0], $this->semStack[$stackPos - (4 - 1)][1], null, $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 359 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)]); }, 360 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 361 => function ($stackPos) { $this->semValue = array(null, $this->semStack[$stackPos - (1 - 1)]); }, 362 => function ($stackPos) { $this->semValue = null; }, 363 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 364 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 365 => function ($stackPos) { $this->semValue = 0; }, 366 => function ($stackPos) { $this->semValue = 0; }, 367 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 368 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 369 => function ($stackPos) { $this->checkModifier($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $stackPos - (2 - 2)); $this->semValue = $this->semStack[$stackPos - (2 - 1)] | $this->semStack[$stackPos - (2 - 2)]; }, 370 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PUBLIC; }, 371 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PROTECTED; }, 372 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_PRIVATE; }, 373 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_STATIC; }, 374 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_ABSTRACT; }, 375 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_FINAL; }, 376 => function ($stackPos) { $this->semValue = Stmt\Class_::MODIFIER_READONLY; }, 377 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 378 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 379 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 380 => function ($stackPos) { $this->semValue = new Node\VarLikeIdentifier(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 381 => function ($stackPos) { $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (1 - 1)], null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 382 => function ($stackPos) { $this->semValue = new Stmt\PropertyProperty($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 383 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 384 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 385 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 386 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 387 => function ($stackPos) { $this->semValue = array(); }, 388 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 389 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 390 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 391 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 392 => function ($stackPos) { $this->semValue = new Expr\Assign($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 393 => function ($stackPos) { $this->semValue = new Expr\AssignRef($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 394 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 395 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 396 => function ($stackPos) { $this->semValue = new Expr\Clone_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 397 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 398 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 399 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 400 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 401 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 402 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 403 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 404 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 405 => function ($stackPos) { $this->semValue = new Expr\AssignOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 406 => function ($stackPos) { $this->semValue = new Expr\AssignOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 407 => function ($stackPos) { $this->semValue = new Expr\AssignOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 408 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 409 => function ($stackPos) { $this->semValue = new Expr\AssignOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 410 => function ($stackPos) { $this->semValue = new Expr\PostInc($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 411 => function ($stackPos) { $this->semValue = new Expr\PreInc($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 412 => function ($stackPos) { $this->semValue = new Expr\PostDec($this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 413 => function ($stackPos) { $this->semValue = new Expr\PreDec($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 414 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 415 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BooleanAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 416 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 417 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 418 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\LogicalXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 419 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseOr($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 420 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 421 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseAnd($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 422 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\BitwiseXor($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 423 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Concat($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 424 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Plus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 425 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Minus($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 426 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mul($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 427 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Div($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 428 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Mod($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 429 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftLeft($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 430 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\ShiftRight($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 431 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Pow($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 432 => function ($stackPos) { $this->semValue = new Expr\UnaryPlus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 433 => function ($stackPos) { $this->semValue = new Expr\UnaryMinus($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 434 => function ($stackPos) { $this->semValue = new Expr\BooleanNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 435 => function ($stackPos) { $this->semValue = new Expr\BitwiseNot($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 436 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Identical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 437 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotIdentical($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 438 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Equal($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 439 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\NotEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 440 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Spaceship($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 441 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Smaller($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 442 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\SmallerOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 443 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Greater($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 444 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\GreaterOrEqual($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 445 => function ($stackPos) { $this->semValue = new Expr\Instanceof_($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 446 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 447 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 3)], $this->semStack[$stackPos - (5 - 5)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 448 => function ($stackPos) { $this->semValue = new Expr\Ternary($this->semStack[$stackPos - (4 - 1)], null, $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 449 => function ($stackPos) { $this->semValue = new Expr\BinaryOp\Coalesce($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 450 => function ($stackPos) { $this->semValue = new Expr\Isset_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 451 => function ($stackPos) { $this->semValue = new Expr\Empty_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 452 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 453 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_INCLUDE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 454 => function ($stackPos) { $this->semValue = new Expr\Eval_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 455 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 456 => function ($stackPos) { $this->semValue = new Expr\Include_($this->semStack[$stackPos - (2 - 2)], Expr\Include_::TYPE_REQUIRE_ONCE, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 457 => function ($stackPos) { $this->semValue = new Expr\Cast\Int_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 458 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; $attrs['kind'] = $this->getFloatCastKind($this->semStack[$stackPos - (2 - 1)]); $this->semValue = new Expr\Cast\Double($this->semStack[$stackPos - (2 - 2)], $attrs); }, 459 => function ($stackPos) { $this->semValue = new Expr\Cast\String_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 460 => function ($stackPos) { $this->semValue = new Expr\Cast\Array_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 461 => function ($stackPos) { $this->semValue = new Expr\Cast\Object_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 462 => function ($stackPos) { $this->semValue = new Expr\Cast\Bool_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 463 => function ($stackPos) { $this->semValue = new Expr\Cast\Unset_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 464 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes; $attrs['kind'] = \strtolower($this->semStack[$stackPos - (2 - 1)]) === 'exit' ? Expr\Exit_::KIND_EXIT : Expr\Exit_::KIND_DIE; $this->semValue = new Expr\Exit_($this->semStack[$stackPos - (2 - 2)], $attrs); }, 465 => function ($stackPos) { $this->semValue = new Expr\ErrorSuppress($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 466 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 467 => function ($stackPos) { $this->semValue = new Expr\ShellExec($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 468 => function ($stackPos) { $this->semValue = new Expr\Print_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 469 => function ($stackPos) { $this->semValue = new Expr\Yield_(null, null, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 470 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (2 - 2)], null, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 471 => function ($stackPos) { $this->semValue = new Expr\Yield_($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 2)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 472 => function ($stackPos) { $this->semValue = new Expr\YieldFrom($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 473 => function ($stackPos) { $this->semValue = new Expr\Throw_($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 474 => function ($stackPos) { $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'returnType' => $this->semStack[$stackPos - (8 - 6)], 'expr' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 475 => function ($stackPos) { $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 476 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (8 - 2)], 'params' => $this->semStack[$stackPos - (8 - 4)], 'uses' => $this->semStack[$stackPos - (8 - 6)], 'returnType' => $this->semStack[$stackPos - (8 - 7)], 'stmts' => $this->semStack[$stackPos - (8 - 8)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes); }, 477 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => []], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 478 => function ($stackPos) { $this->semValue = new Expr\ArrowFunction(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'returnType' => $this->semStack[$stackPos - (9 - 7)], 'expr' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 479 => function ($stackPos) { $this->semValue = new Expr\ArrowFunction(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'returnType' => $this->semStack[$stackPos - (10 - 8)], 'expr' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); }, 480 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \false, 'byRef' => $this->semStack[$stackPos - (9 - 3)], 'params' => $this->semStack[$stackPos - (9 - 5)], 'uses' => $this->semStack[$stackPos - (9 - 7)], 'returnType' => $this->semStack[$stackPos - (9 - 8)], 'stmts' => $this->semStack[$stackPos - (9 - 9)], 'attrGroups' => $this->semStack[$stackPos - (9 - 1)]], $this->startAttributeStack[$stackPos - (9 - 1)] + $this->endAttributes); }, 481 => function ($stackPos) { $this->semValue = new Expr\Closure(['static' => \true, 'byRef' => $this->semStack[$stackPos - (10 - 4)], 'params' => $this->semStack[$stackPos - (10 - 6)], 'uses' => $this->semStack[$stackPos - (10 - 8)], 'returnType' => $this->semStack[$stackPos - (10 - 9)], 'stmts' => $this->semStack[$stackPos - (10 - 10)], 'attrGroups' => $this->semStack[$stackPos - (10 - 1)]], $this->startAttributeStack[$stackPos - (10 - 1)] + $this->endAttributes); }, 482 => function ($stackPos) { $this->semValue = array(new Stmt\Class_(null, ['type' => $this->semStack[$stackPos - (8 - 2)], 'extends' => $this->semStack[$stackPos - (8 - 4)], 'implements' => $this->semStack[$stackPos - (8 - 5)], 'stmts' => $this->semStack[$stackPos - (8 - 7)], 'attrGroups' => $this->semStack[$stackPos - (8 - 1)]], $this->startAttributeStack[$stackPos - (8 - 1)] + $this->endAttributes), $this->semStack[$stackPos - (8 - 3)]); $this->checkClass($this->semValue[0], -1); }, 483 => function ($stackPos) { $this->semValue = new Expr\New_($this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 484 => function ($stackPos) { list($class, $ctorArgs) = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = new Expr\New_($class, $ctorArgs, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 485 => function ($stackPos) { $this->semValue = array(); }, 486 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (4 - 3)]; }, 487 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 488 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 489 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 490 => function ($stackPos) { $this->semValue = new Expr\ClosureUse($this->semStack[$stackPos - (2 - 2)], $this->semStack[$stackPos - (2 - 1)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 491 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 492 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 493 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 494 => function ($stackPos) { $this->semValue = new Expr\FuncCall($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 495 => function ($stackPos) { $this->semValue = new Expr\StaticCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 496 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 497 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 498 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 499 => function ($stackPos) { $this->semValue = new Name($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 500 => function ($stackPos) { $this->semValue = new Name\FullyQualified(\substr($this->semStack[$stackPos - (1 - 1)], 1), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 501 => function ($stackPos) { $this->semValue = new Name\Relative(\substr($this->semStack[$stackPos - (1 - 1)], 10), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 502 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 503 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 504 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 505 => function ($stackPos) { $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->errorState = 2; }, 506 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 507 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 508 => function ($stackPos) { $this->semValue = null; }, 509 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 510 => function ($stackPos) { $this->semValue = array(); }, 511 => function ($stackPos) { $this->semValue = array(new Scalar\EncapsedStringPart(Scalar\String_::parseEscapeSequences($this->semStack[$stackPos - (1 - 1)], '`'), $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes)); }, 512 => function ($stackPos) { foreach ($this->semStack[$stackPos - (1 - 1)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', \true); } } $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 513 => function ($stackPos) { $this->semValue = array(); }, 514 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 515 => function ($stackPos) { $this->semValue = new Expr\ConstFetch($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 516 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Line($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 517 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\File($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 518 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Dir($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 519 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Class_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 520 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Trait_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 521 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Method($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 522 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Function_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 523 => function ($stackPos) { $this->semValue = new Scalar\MagicConst\Namespace_($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 524 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 525 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (5 - 1)], $this->semStack[$stackPos - (5 - 4)], $this->startAttributeStack[$stackPos - (5 - 1)] + $this->endAttributes); }, 526 => function ($stackPos) { $this->semValue = new Expr\ClassConstFetch($this->semStack[$stackPos - (3 - 1)], new Expr\Error($this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)]), $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); $this->errorState = 2; }, 527 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_SHORT; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (3 - 2)], $attrs); }, 528 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes; $attrs['kind'] = Expr\Array_::KIND_LONG; $this->semValue = new Expr\Array_($this->semStack[$stackPos - (4 - 3)], $attrs); }, 529 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 530 => function ($stackPos) { $this->semValue = Scalar\String_::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 531 => function ($stackPos) { $attrs = $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes; $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; foreach ($this->semStack[$stackPos - (3 - 2)] as $s) { if ($s instanceof Node\Scalar\EncapsedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', \true); } } $this->semValue = new Scalar\Encapsed($this->semStack[$stackPos - (3 - 2)], $attrs); }, 532 => function ($stackPos) { $this->semValue = $this->parseLNumber($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 533 => function ($stackPos) { $this->semValue = Scalar\DNumber::fromString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 534 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 535 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 536 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 537 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); }, 538 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (2 - 1)], '', $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (2 - 2)] + $this->endAttributeStack[$stackPos - (2 - 2)], \true); }, 539 => function ($stackPos) { $this->semValue = $this->parseDocString($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 2)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes, $this->startAttributeStack[$stackPos - (3 - 3)] + $this->endAttributeStack[$stackPos - (3 - 3)], \true); }, 540 => function ($stackPos) { $this->semValue = null; }, 541 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 542 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 543 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 544 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 545 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 546 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 547 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 548 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 549 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 550 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 551 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 552 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 553 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 554 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 555 => function ($stackPos) { $this->semValue = new Expr\MethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 556 => function ($stackPos) { $this->semValue = new Expr\NullsafeMethodCall($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->semStack[$stackPos - (4 - 4)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 557 => function ($stackPos) { $this->semValue = null; }, 558 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 559 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 560 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 561 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 562 => function ($stackPos) { $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 563 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 564 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 565 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 566 => function ($stackPos) { $this->semValue = new Expr\Variable(new Expr\Error($this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes), $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); $this->errorState = 2; }, 567 => function ($stackPos) { $var = $this->semStack[$stackPos - (1 - 1)]->name; $this->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes) : $var; }, 568 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 569 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 570 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 571 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 572 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 573 => function ($stackPos) { $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 574 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 575 => function ($stackPos) { $this->semValue = new Expr\StaticPropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 576 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 577 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 578 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 579 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 580 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 581 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 582 => function ($stackPos) { $this->semValue = new Expr\Error($this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); $this->errorState = 2; }, 583 => function ($stackPos) { $this->semValue = new Expr\List_($this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 584 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; $end = \count($this->semValue) - 1; if ($this->semValue[$end] === null) { \array_pop($this->semValue); } }, 585 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos]; }, 586 => function ($stackPos) { /* do nothing -- prevent default action of $$=$this->semStack[$1]. See $551. */ }, 587 => function ($stackPos) { $this->semStack[$stackPos - (3 - 1)][] = $this->semStack[$stackPos - (3 - 3)]; $this->semValue = $this->semStack[$stackPos - (3 - 1)]; }, 588 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 589 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 590 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \true, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 591 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (1 - 1)], null, \false, $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 592 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 593 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (4 - 4)], $this->semStack[$stackPos - (4 - 1)], \true, $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 594 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (3 - 3)], $this->semStack[$stackPos - (3 - 1)], \false, $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 595 => function ($stackPos) { $this->semValue = new Expr\ArrayItem($this->semStack[$stackPos - (2 - 2)], null, \false, $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes, \true); }, 596 => function ($stackPos) { $this->semValue = null; }, 597 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 598 => function ($stackPos) { $this->semStack[$stackPos - (2 - 1)][] = $this->semStack[$stackPos - (2 - 2)]; $this->semValue = $this->semStack[$stackPos - (2 - 1)]; }, 599 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (1 - 1)]); }, 600 => function ($stackPos) { $this->semValue = array($this->semStack[$stackPos - (2 - 1)], $this->semStack[$stackPos - (2 - 2)]); }, 601 => function ($stackPos) { $this->semValue = new Scalar\EncapsedStringPart($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 602 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 603 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }, 604 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (4 - 1)], $this->semStack[$stackPos - (4 - 3)], $this->startAttributeStack[$stackPos - (4 - 1)] + $this->endAttributes); }, 605 => function ($stackPos) { $this->semValue = new Expr\PropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 606 => function ($stackPos) { $this->semValue = new Expr\NullsafePropertyFetch($this->semStack[$stackPos - (3 - 1)], $this->semStack[$stackPos - (3 - 3)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 607 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 608 => function ($stackPos) { $this->semValue = new Expr\Variable($this->semStack[$stackPos - (3 - 2)], $this->startAttributeStack[$stackPos - (3 - 1)] + $this->endAttributes); }, 609 => function ($stackPos) { $this->semValue = new Expr\ArrayDimFetch($this->semStack[$stackPos - (6 - 2)], $this->semStack[$stackPos - (6 - 4)], $this->startAttributeStack[$stackPos - (6 - 1)] + $this->endAttributes); }, 610 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (3 - 2)]; }, 611 => function ($stackPos) { $this->semValue = new Scalar\String_($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 612 => function ($stackPos) { $this->semValue = $this->parseNumString($this->semStack[$stackPos - (1 - 1)], $this->startAttributeStack[$stackPos - (1 - 1)] + $this->endAttributes); }, 613 => function ($stackPos) { $this->semValue = $this->parseNumString('-' . $this->semStack[$stackPos - (2 - 2)], $this->startAttributeStack[$stackPos - (2 - 1)] + $this->endAttributes); }, 614 => function ($stackPos) { $this->semValue = $this->semStack[$stackPos - (1 - 1)]; }]; } } PK!%b&"php-parser/lib/PhpParser/Error.phpnu[rawMessage = $message; if (\is_array($attributes)) { $this->attributes = $attributes; } else { $this->attributes = ['startLine' => $attributes]; } $this->updateMessage(); } /** * Gets the error message * * @return string Error message */ public function getRawMessage() : string { return $this->rawMessage; } /** * Gets the line the error starts in. * * @return int Error start line */ public function getStartLine() : int { return $this->attributes['startLine'] ?? -1; } /** * Gets the line the error ends in. * * @return int Error end line */ public function getEndLine() : int { return $this->attributes['endLine'] ?? -1; } /** * Gets the attributes of the node/token the error occurred at. * * @return array */ public function getAttributes() : array { return $this->attributes; } /** * Sets the attributes of the node/token the error occurred at. * * @param array $attributes */ public function setAttributes(array $attributes) { $this->attributes = $attributes; $this->updateMessage(); } /** * Sets the line of the PHP file the error occurred in. * * @param string $message Error message */ public function setRawMessage(string $message) { $this->rawMessage = $message; $this->updateMessage(); } /** * Sets the line the error starts in. * * @param int $line Error start line */ public function setStartLine(int $line) { $this->attributes['startLine'] = $line; $this->updateMessage(); } /** * Returns whether the error has start and end column information. * * For column information enable the startFilePos and endFilePos in the lexer options. * * @return bool */ public function hasColumnInfo() : bool { return isset($this->attributes['startFilePos'], $this->attributes['endFilePos']); } /** * Gets the start column (1-based) into the line where the error started. * * @param string $code Source code of the file * @return int */ public function getStartColumn(string $code) : int { if (!$this->hasColumnInfo()) { throw new \RuntimeException('Error does not have column information'); } return $this->toColumn($code, $this->attributes['startFilePos']); } /** * Gets the end column (1-based) into the line where the error ended. * * @param string $code Source code of the file * @return int */ public function getEndColumn(string $code) : int { if (!$this->hasColumnInfo()) { throw new \RuntimeException('Error does not have column information'); } return $this->toColumn($code, $this->attributes['endFilePos']); } /** * Formats message including line and column information. * * @param string $code Source code associated with the error, for calculation of the columns * * @return string Formatted message */ public function getMessageWithColumnInfo(string $code) : string { return \sprintf('%s from %d:%d to %d:%d', $this->getRawMessage(), $this->getStartLine(), $this->getStartColumn($code), $this->getEndLine(), $this->getEndColumn($code)); } /** * Converts a file offset into a column. * * @param string $code Source code that $pos indexes into * @param int $pos 0-based position in $code * * @return int 1-based column (relative to start of line) */ private function toColumn(string $code, int $pos) : int { if ($pos > \strlen($code)) { throw new \RuntimeException('Invalid position information'); } $lineStartPos = \strrpos($code, "\n", $pos - \strlen($code)); if (\false === $lineStartPos) { $lineStartPos = -1; } return $pos - $lineStartPos; } /** * Updates the exception message after a change to rawMessage or rawLine. */ protected function updateMessage() { $this->message = $this->rawMessage; if (-1 === $this->getStartLine()) { $this->message .= ' on unknown line'; } else { $this->message .= ' on line ' . $this->getStartLine(); } } } PK! +php-parser/lib/PhpParser/ParserAbstract.phpnu[lexer = $lexer; if (isset($options['throwOnError'])) { throw new \LogicException('"throwOnError" is no longer supported, use "errorHandler" instead'); } $this->initReduceCallbacks(); } /** * Parses PHP code into a node tree. * * If a non-throwing error handler is used, the parser will continue parsing after an error * occurred and attempt to build a partial AST. * * @param string $code The source code to parse * @param ErrorHandler|null $errorHandler Error handler to use for lexer/parser errors, defaults * to ErrorHandler\Throwing. * * @return Node\Stmt[]|null Array of statements (or null non-throwing error handler is used and * the parser was unable to recover from an error). */ public function parse(string $code, ?\PhpParser\ErrorHandler $errorHandler = null) { $this->errorHandler = $errorHandler ?: new \PhpParser\ErrorHandler\Throwing(); $this->lexer->startLexing($code, $this->errorHandler); $result = $this->doParse(); // Clear out some of the interior state, so we don't hold onto unnecessary // memory between uses of the parser $this->startAttributeStack = []; $this->endAttributeStack = []; $this->semStack = []; $this->semValue = null; return $result; } protected function doParse() { // We start off with no lookahead-token $symbol = self::SYMBOL_NONE; // The attributes for a node are taken from the first and last token of the node. // From the first token only the startAttributes are taken and from the last only // the endAttributes. Both are merged using the array union operator (+). $startAttributes = []; $endAttributes = []; $this->endAttributes = $endAttributes; // Keep stack of start and end attributes $this->startAttributeStack = []; $this->endAttributeStack = [$endAttributes]; // Start off in the initial state and keep a stack of previous states $state = 0; $stateStack = [$state]; // Semantic value stack (contains values of tokens and semantic action results) $this->semStack = []; // Current position in the stack(s) $stackPos = 0; $this->errorState = 0; for (;;) { //$this->traceNewState($state, $symbol); if ($this->actionBase[$state] === 0) { $rule = $this->actionDefault[$state]; } else { if ($symbol === self::SYMBOL_NONE) { // Fetch the next token id from the lexer and fetch additional info by-ref. // The end attributes are fetched into a temporary variable and only set once the token is really // shifted (not during read). Otherwise you would sometimes get off-by-one errors, when a rule is // reduced after a token was read but not yet shifted. $tokenId = $this->lexer->getNextToken($tokenValue, $startAttributes, $endAttributes); // map the lexer token id to the internally used symbols $symbol = $tokenId >= 0 && $tokenId < $this->tokenToSymbolMapSize ? $this->tokenToSymbol[$tokenId] : $this->invalidSymbol; if ($symbol === $this->invalidSymbol) { throw new \RangeException(\sprintf('The lexer returned an invalid token (id=%d, value=%s)', $tokenId, $tokenValue)); } // Allow productions to access the start attributes of the lookahead token. $this->lookaheadStartAttributes = $startAttributes; //$this->traceRead($symbol); } $idx = $this->actionBase[$state] + $symbol; if (($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) && ($action = $this->action[$idx]) !== $this->defaultAction) { /* * >= numNonLeafStates: shift and reduce * > 0: shift * = 0: accept * < 0: reduce * = -YYUNEXPECTED: error */ if ($action > 0) { /* shift */ //$this->traceShift($symbol); ++$stackPos; $stateStack[$stackPos] = $state = $action; $this->semStack[$stackPos] = $tokenValue; $this->startAttributeStack[$stackPos] = $startAttributes; $this->endAttributeStack[$stackPos] = $endAttributes; $this->endAttributes = $endAttributes; $symbol = self::SYMBOL_NONE; if ($this->errorState) { --$this->errorState; } if ($action < $this->numNonLeafStates) { continue; } /* $yyn >= numNonLeafStates means shift-and-reduce */ $rule = $action - $this->numNonLeafStates; } else { $rule = -$action; } } else { $rule = $this->actionDefault[$state]; } } for (;;) { if ($rule === 0) { /* accept */ //$this->traceAccept(); return $this->semValue; } elseif ($rule !== $this->unexpectedTokenRule) { /* reduce */ //$this->traceReduce($rule); try { $this->reduceCallbacks[$rule]($stackPos); } catch (\PhpParser\Error $e) { if (-1 === $e->getStartLine() && isset($startAttributes['startLine'])) { $e->setStartLine($startAttributes['startLine']); } $this->emitError($e); // Can't recover from this type of error return null; } /* Goto - shift nonterminal */ $lastEndAttributes = $this->endAttributeStack[$stackPos]; $ruleLength = $this->ruleToLength[$rule]; $stackPos -= $ruleLength; $nonTerminal = $this->ruleToNonTerminal[$rule]; $idx = $this->gotoBase[$nonTerminal] + $stateStack[$stackPos]; if ($idx >= 0 && $idx < $this->gotoTableSize && $this->gotoCheck[$idx] === $nonTerminal) { $state = $this->goto[$idx]; } else { $state = $this->gotoDefault[$nonTerminal]; } ++$stackPos; $stateStack[$stackPos] = $state; $this->semStack[$stackPos] = $this->semValue; $this->endAttributeStack[$stackPos] = $lastEndAttributes; if ($ruleLength === 0) { // Empty productions use the start attributes of the lookahead token. $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes; } } else { /* error */ switch ($this->errorState) { case 0: $msg = $this->getErrorMessage($symbol, $state); $this->emitError(new \PhpParser\Error($msg, $startAttributes + $endAttributes)); // Break missing intentionally case 1: case 2: $this->errorState = 3; // Pop until error-expecting state uncovered while (!(($idx = $this->actionBase[$state] + $this->errorSymbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $this->errorSymbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $this->errorSymbol) || ($action = $this->action[$idx]) === $this->defaultAction) { // Not totally sure about this if ($stackPos <= 0) { // Could not recover from error return null; } $state = $stateStack[--$stackPos]; //$this->tracePop($state); } //$this->traceShift($this->errorSymbol); ++$stackPos; $stateStack[$stackPos] = $state = $action; // We treat the error symbol as being empty, so we reset the end attributes // to the end attributes of the last non-error symbol $this->startAttributeStack[$stackPos] = $this->lookaheadStartAttributes; $this->endAttributeStack[$stackPos] = $this->endAttributeStack[$stackPos - 1]; $this->endAttributes = $this->endAttributeStack[$stackPos - 1]; break; case 3: if ($symbol === 0) { // Reached EOF without recovering from error return null; } //$this->traceDiscard($symbol); $symbol = self::SYMBOL_NONE; break 2; } } if ($state < $this->numNonLeafStates) { break; } /* >= numNonLeafStates means shift-and-reduce */ $rule = $state - $this->numNonLeafStates; } } throw new \RuntimeException('Reached end of parser loop'); } protected function emitError(\PhpParser\Error $error) { $this->errorHandler->handleError($error); } /** * Format error message including expected tokens. * * @param int $symbol Unexpected symbol * @param int $state State at time of error * * @return string Formatted error message */ protected function getErrorMessage(int $symbol, int $state) : string { $expectedString = ''; if ($expected = $this->getExpectedTokens($state)) { $expectedString = ', expecting ' . \implode(' or ', $expected); } return 'Syntax error, unexpected ' . $this->symbolToName[$symbol] . $expectedString; } /** * Get limited number of expected tokens in given state. * * @param int $state State * * @return string[] Expected tokens. If too many, an empty array is returned. */ protected function getExpectedTokens(int $state) : array { $expected = []; $base = $this->actionBase[$state]; foreach ($this->symbolToName as $symbol => $name) { $idx = $base + $symbol; if ($idx >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol || $state < $this->YY2TBLSTATE && ($idx = $this->actionBase[$state + $this->numNonLeafStates] + $symbol) >= 0 && $idx < $this->actionTableSize && $this->actionCheck[$idx] === $symbol) { if ($this->action[$idx] !== $this->unexpectedTokenRule && $this->action[$idx] !== $this->defaultAction && $symbol !== $this->errorSymbol) { if (\count($expected) === 4) { /* Too many expected tokens */ return []; } $expected[] = $name; } } } return $expected; } /* * Tracing functions used for debugging the parser. */ /* protected function traceNewState($state, $symbol) { echo '% State ' . $state . ', Lookahead ' . ($symbol == self::SYMBOL_NONE ? '--none--' : $this->symbolToName[$symbol]) . "\n"; } protected function traceRead($symbol) { echo '% Reading ' . $this->symbolToName[$symbol] . "\n"; } protected function traceShift($symbol) { echo '% Shift ' . $this->symbolToName[$symbol] . "\n"; } protected function traceAccept() { echo "% Accepted.\n"; } protected function traceReduce($n) { echo '% Reduce by (' . $n . ') ' . $this->productions[$n] . "\n"; } protected function tracePop($state) { echo '% Recovering, uncovered state ' . $state . "\n"; } protected function traceDiscard($symbol) { echo '% Discard ' . $this->symbolToName[$symbol] . "\n"; } */ /* * Helper functions invoked by semantic actions */ /** * Moves statements of semicolon-style namespaces into $ns->stmts and checks various error conditions. * * @param Node\Stmt[] $stmts * @return Node\Stmt[] */ protected function handleNamespaces(array $stmts) : array { $hasErrored = \false; $style = $this->getNamespacingStyle($stmts); if (null === $style) { // not namespaced, nothing to do return $stmts; } elseif ('brace' === $style) { // For braced namespaces we only have to check that there are no invalid statements between the namespaces $afterFirstNamespace = \false; foreach ($stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\Namespace_) { $afterFirstNamespace = \true; } elseif (!$stmt instanceof \PhpParser\Node\Stmt\HaltCompiler && !$stmt instanceof \PhpParser\Node\Stmt\Nop && $afterFirstNamespace && !$hasErrored) { $this->emitError(new \PhpParser\Error('No code may exist outside of namespace {}', $stmt->getAttributes())); $hasErrored = \true; // Avoid one error for every statement } } return $stmts; } else { // For semicolon namespaces we have to move the statements after a namespace declaration into ->stmts $resultStmts = []; $targetStmts =& $resultStmts; $lastNs = null; foreach ($stmts as $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\Namespace_) { if ($lastNs !== null) { $this->fixupNamespaceAttributes($lastNs); } if ($stmt->stmts === null) { $stmt->stmts = []; $targetStmts =& $stmt->stmts; $resultStmts[] = $stmt; } else { // This handles the invalid case of mixed style namespaces $resultStmts[] = $stmt; $targetStmts =& $resultStmts; } $lastNs = $stmt; } elseif ($stmt instanceof \PhpParser\Node\Stmt\HaltCompiler) { // __halt_compiler() is not moved into the namespace $resultStmts[] = $stmt; } else { $targetStmts[] = $stmt; } } if ($lastNs !== null) { $this->fixupNamespaceAttributes($lastNs); } return $resultStmts; } } private function fixupNamespaceAttributes(\PhpParser\Node\Stmt\Namespace_ $stmt) { // We moved the statements into the namespace node, as such the end of the namespace node // needs to be extended to the end of the statements. if (empty($stmt->stmts)) { return; } // We only move the builtin end attributes here. This is the best we can do with the // knowledge we have. $endAttributes = ['endLine', 'endFilePos', 'endTokenPos']; $lastStmt = $stmt->stmts[\count($stmt->stmts) - 1]; foreach ($endAttributes as $endAttribute) { if ($lastStmt->hasAttribute($endAttribute)) { $stmt->setAttribute($endAttribute, $lastStmt->getAttribute($endAttribute)); } } } /** * Determine namespacing style (semicolon or brace) * * @param Node[] $stmts Top-level statements. * * @return null|string One of "semicolon", "brace" or null (no namespaces) */ private function getNamespacingStyle(array $stmts) { $style = null; $hasNotAllowedStmts = \false; foreach ($stmts as $i => $stmt) { if ($stmt instanceof \PhpParser\Node\Stmt\Namespace_) { $currentStyle = null === $stmt->stmts ? 'semicolon' : 'brace'; if (null === $style) { $style = $currentStyle; if ($hasNotAllowedStmts) { $this->emitError(new \PhpParser\Error('Namespace declaration statement has to be the very first statement in the script', $stmt->getLine())); } } elseif ($style !== $currentStyle) { $this->emitError(new \PhpParser\Error('Cannot mix bracketed namespace declarations with unbracketed namespace declarations', $stmt->getLine())); // Treat like semicolon style for namespace normalization return 'semicolon'; } continue; } /* declare(), __halt_compiler() and nops can be used before a namespace declaration */ if ($stmt instanceof \PhpParser\Node\Stmt\Declare_ || $stmt instanceof \PhpParser\Node\Stmt\HaltCompiler || $stmt instanceof \PhpParser\Node\Stmt\Nop) { continue; } /* There may be a hashbang line at the very start of the file */ if ($i === 0 && $stmt instanceof \PhpParser\Node\Stmt\InlineHTML && \preg_match('/\\A#!.*\\r?\\n\\z/', $stmt->value)) { continue; } /* Everything else if forbidden before namespace declarations */ $hasNotAllowedStmts = \true; } return $style; } /** * Fix up parsing of static property calls in PHP 5. * * In PHP 5 A::$b[c][d] and A::$b[c][d]() have very different interpretation. The former is * interpreted as (A::$b)[c][d], while the latter is the same as A::{$b[c][d]}(). We parse the * latter as the former initially and this method fixes the AST into the correct form when we * encounter the "()". * * @param Node\Expr\StaticPropertyFetch|Node\Expr\ArrayDimFetch $prop * @param Node\Arg[] $args * @param array $attributes * * @return Expr\StaticCall */ protected function fixupPhp5StaticPropCall($prop, array $args, array $attributes) : Expr\StaticCall { if ($prop instanceof \PhpParser\Node\Expr\StaticPropertyFetch) { $name = $prop->name instanceof VarLikeIdentifier ? $prop->name->toString() : $prop->name; $var = new Expr\Variable($name, $prop->name->getAttributes()); return new Expr\StaticCall($prop->class, $var, $args, $attributes); } elseif ($prop instanceof \PhpParser\Node\Expr\ArrayDimFetch) { $tmp = $prop; while ($tmp->var instanceof \PhpParser\Node\Expr\ArrayDimFetch) { $tmp = $tmp->var; } /** @var Expr\StaticPropertyFetch $staticProp */ $staticProp = $tmp->var; // Set start attributes to attributes of innermost node $tmp = $prop; $this->fixupStartAttributes($tmp, $staticProp->name); while ($tmp->var instanceof \PhpParser\Node\Expr\ArrayDimFetch) { $tmp = $tmp->var; $this->fixupStartAttributes($tmp, $staticProp->name); } $name = $staticProp->name instanceof VarLikeIdentifier ? $staticProp->name->toString() : $staticProp->name; $tmp->var = new Expr\Variable($name, $staticProp->name->getAttributes()); return new Expr\StaticCall($staticProp->class, $prop, $args, $attributes); } else { throw new \Exception(); } } protected function fixupStartAttributes(\PhpParser\Node $to, \PhpParser\Node $from) { $startAttributes = ['startLine', 'startFilePos', 'startTokenPos']; foreach ($startAttributes as $startAttribute) { if ($from->hasAttribute($startAttribute)) { $to->setAttribute($startAttribute, $from->getAttribute($startAttribute)); } } } protected function handleBuiltinTypes(Name $name) { $builtinTypes = ['bool' => \true, 'int' => \true, 'float' => \true, 'string' => \true, 'iterable' => \true, 'void' => \true, 'object' => \true, 'null' => \true, 'false' => \true, 'mixed' => \true, 'never' => \true, 'true' => \true]; if (!$name->isUnqualified()) { return $name; } $lowerName = $name->toLowerString(); if (!isset($builtinTypes[$lowerName])) { return $name; } return new \PhpParser\Node\Identifier($lowerName, $name->getAttributes()); } /** * Get combined start and end attributes at a stack location * * @param int $pos Stack location * * @return array Combined start and end attributes */ protected function getAttributesAt(int $pos) : array { return $this->startAttributeStack[$pos] + $this->endAttributeStack[$pos]; } protected function getFloatCastKind(string $cast) : int { $cast = \strtolower($cast); if (\strpos($cast, 'float') !== \false) { return Double::KIND_FLOAT; } if (\strpos($cast, 'real') !== \false) { return Double::KIND_REAL; } return Double::KIND_DOUBLE; } protected function parseLNumber($str, $attributes, $allowInvalidOctal = \false) { try { return LNumber::fromString($str, $attributes, $allowInvalidOctal); } catch (\PhpParser\Error $error) { $this->emitError($error); // Use dummy value return new LNumber(0, $attributes); } } /** * Parse a T_NUM_STRING token into either an integer or string node. * * @param string $str Number string * @param array $attributes Attributes * * @return LNumber|String_ Integer or string node. */ protected function parseNumString(string $str, array $attributes) { if (!\preg_match('/^(?:0|-?[1-9][0-9]*)$/', $str)) { return new String_($str, $attributes); } $num = +$str; if (!\is_int($num)) { return new String_($str, $attributes); } return new LNumber($num, $attributes); } protected function stripIndentation(string $string, int $indentLen, string $indentChar, bool $newlineAtStart, bool $newlineAtEnd, array $attributes) { if ($indentLen === 0) { return $string; } $start = $newlineAtStart ? '(?:(?<=\\n)|\\A)' : '(?<=\\n)'; $end = $newlineAtEnd ? '(?:(?=[\\r\\n])|\\z)' : '(?=[\\r\\n])'; $regex = '/' . $start . '([ \\t]*)(' . $end . ')?/'; return \preg_replace_callback($regex, function ($matches) use($indentLen, $indentChar, $attributes) { $prefix = \substr($matches[1], 0, $indentLen); if (\false !== \strpos($prefix, $indentChar === " " ? "\t" : " ")) { $this->emitError(new \PhpParser\Error('Invalid indentation - tabs and spaces cannot be mixed', $attributes)); } elseif (\strlen($prefix) < $indentLen && !isset($matches[2])) { $this->emitError(new \PhpParser\Error('Invalid body indentation level ' . '(expecting an indentation level of at least ' . $indentLen . ')', $attributes)); } return \substr($matches[0], \strlen($prefix)); }, $string); } protected function parseDocString(string $startToken, $contents, string $endToken, array $attributes, array $endTokenAttributes, bool $parseUnicodeEscape) { $kind = \strpos($startToken, "'") === \false ? String_::KIND_HEREDOC : String_::KIND_NOWDOC; $regex = '/\\A[bB]?<<<[ \\t]*[\'"]?([a-zA-Z_\\x7f-\\xff][a-zA-Z0-9_\\x7f-\\xff]*)[\'"]?(?:\\r\\n|\\n|\\r)\\z/'; $result = \preg_match($regex, $startToken, $matches); \assert($result === 1); $label = $matches[1]; $result = \preg_match('/\\A[ \\t]*/', $endToken, $matches); \assert($result === 1); $indentation = $matches[0]; $attributes['kind'] = $kind; $attributes['docLabel'] = $label; $attributes['docIndentation'] = $indentation; $indentHasSpaces = \false !== \strpos($indentation, " "); $indentHasTabs = \false !== \strpos($indentation, "\t"); if ($indentHasSpaces && $indentHasTabs) { $this->emitError(new \PhpParser\Error('Invalid indentation - tabs and spaces cannot be mixed', $endTokenAttributes)); // Proceed processing as if this doc string is not indented $indentation = ''; } $indentLen = \strlen($indentation); $indentChar = $indentHasSpaces ? " " : "\t"; if (\is_string($contents)) { if ($contents === '') { return new String_('', $attributes); } $contents = $this->stripIndentation($contents, $indentLen, $indentChar, \true, \true, $attributes); $contents = \preg_replace('~(\\r\\n|\\n|\\r)\\z~', '', $contents); if ($kind === String_::KIND_HEREDOC) { $contents = String_::parseEscapeSequences($contents, null, $parseUnicodeEscape); } return new String_($contents, $attributes); } else { \assert(\count($contents) > 0); if (!$contents[0] instanceof \PhpParser\Node\Scalar\EncapsedStringPart) { // If there is no leading encapsed string part, pretend there is an empty one $this->stripIndentation('', $indentLen, $indentChar, \true, \false, $contents[0]->getAttributes()); } $newContents = []; foreach ($contents as $i => $part) { if ($part instanceof \PhpParser\Node\Scalar\EncapsedStringPart) { $isLast = $i === \count($contents) - 1; $part->value = $this->stripIndentation($part->value, $indentLen, $indentChar, $i === 0, $isLast, $part->getAttributes()); $part->value = String_::parseEscapeSequences($part->value, null, $parseUnicodeEscape); if ($isLast) { $part->value = \preg_replace('~(\\r\\n|\\n|\\r)\\z~', '', $part->value); } if ('' === $part->value) { continue; } } $newContents[] = $part; } return new Encapsed($newContents, $attributes); } } /** * Create attributes for a zero-length common-capturing nop. * * @param Comment[] $comments * @return array */ protected function createCommentNopAttributes(array $comments) { $comment = $comments[\count($comments) - 1]; $commentEndLine = $comment->getEndLine(); $commentEndFilePos = $comment->getEndFilePos(); $commentEndTokenPos = $comment->getEndTokenPos(); $attributes = ['comments' => $comments]; if (-1 !== $commentEndLine) { $attributes['startLine'] = $commentEndLine; $attributes['endLine'] = $commentEndLine; } if (-1 !== $commentEndFilePos) { $attributes['startFilePos'] = $commentEndFilePos + 1; $attributes['endFilePos'] = $commentEndFilePos; } if (-1 !== $commentEndTokenPos) { $attributes['startTokenPos'] = $commentEndTokenPos + 1; $attributes['endTokenPos'] = $commentEndTokenPos; } return $attributes; } /** @param ElseIf_|Else_ $node */ protected function fixupAlternativeElse($node) { // Make sure a trailing nop statement carrying comments is part of the node. $numStmts = \count($node->stmts); if ($numStmts !== 0 && $node->stmts[$numStmts - 1] instanceof Nop) { $nopAttrs = $node->stmts[$numStmts - 1]->getAttributes(); if (isset($nopAttrs['endLine'])) { $node->setAttribute('endLine', $nopAttrs['endLine']); } if (isset($nopAttrs['endFilePos'])) { $node->setAttribute('endFilePos', $nopAttrs['endFilePos']); } if (isset($nopAttrs['endTokenPos'])) { $node->setAttribute('endTokenPos', $nopAttrs['endTokenPos']); } } } protected function checkClassModifier($a, $b, $modifierPos) { try { Class_::verifyClassModifier($a, $b); } catch (\PhpParser\Error $error) { $error->setAttributes($this->getAttributesAt($modifierPos)); $this->emitError($error); } } protected function checkModifier($a, $b, $modifierPos) { // Jumping through some hoops here because verifyModifier() is also used elsewhere try { Class_::verifyModifier($a, $b); } catch (\PhpParser\Error $error) { $error->setAttributes($this->getAttributesAt($modifierPos)); $this->emitError($error); } } protected function checkParam(Param $node) { if ($node->variadic && null !== $node->default) { $this->emitError(new \PhpParser\Error('Variadic parameter cannot have a default value', $node->default->getAttributes())); } } protected function checkTryCatch(TryCatch $node) { if (empty($node->catches) && null === $node->finally) { $this->emitError(new \PhpParser\Error('Cannot use try without catch or finally', $node->getAttributes())); } } protected function checkNamespace(Namespace_ $node) { if (null !== $node->stmts) { foreach ($node->stmts as $stmt) { if ($stmt instanceof Namespace_) { $this->emitError(new \PhpParser\Error('Namespace declarations cannot be nested', $stmt->getAttributes())); } } } } private function checkClassName($name, $namePos) { if (null !== $name && $name->isSpecialClassName()) { $this->emitError(new \PhpParser\Error(\sprintf('Cannot use \'%s\' as class name as it is reserved', $name), $this->getAttributesAt($namePos))); } } private function checkImplementedInterfaces(array $interfaces) { foreach ($interfaces as $interface) { if ($interface->isSpecialClassName()) { $this->emitError(new \PhpParser\Error(\sprintf('Cannot use \'%s\' as interface name as it is reserved', $interface), $interface->getAttributes())); } } } protected function checkClass(Class_ $node, $namePos) { $this->checkClassName($node->name, $namePos); if ($node->extends && $node->extends->isSpecialClassName()) { $this->emitError(new \PhpParser\Error(\sprintf('Cannot use \'%s\' as class name as it is reserved', $node->extends), $node->extends->getAttributes())); } $this->checkImplementedInterfaces($node->implements); } protected function checkInterface(Interface_ $node, $namePos) { $this->checkClassName($node->name, $namePos); $this->checkImplementedInterfaces($node->extends); } protected function checkEnum(Enum_ $node, $namePos) { $this->checkClassName($node->name, $namePos); $this->checkImplementedInterfaces($node->implements); } protected function checkClassMethod(ClassMethod $node, $modifierPos) { if ($node->flags & Class_::MODIFIER_STATIC) { switch ($node->name->toLowerString()) { case '__construct': $this->emitError(new \PhpParser\Error(\sprintf('Constructor %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); break; case '__destruct': $this->emitError(new \PhpParser\Error(\sprintf('Destructor %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); break; case '__clone': $this->emitError(new \PhpParser\Error(\sprintf('Clone method %s() cannot be static', $node->name), $this->getAttributesAt($modifierPos))); break; } } if ($node->flags & Class_::MODIFIER_READONLY) { $this->emitError(new \PhpParser\Error(\sprintf('Method %s() cannot be readonly', $node->name), $this->getAttributesAt($modifierPos))); } } protected function checkClassConst(ClassConst $node, $modifierPos) { if ($node->flags & Class_::MODIFIER_STATIC) { $this->emitError(new \PhpParser\Error("Cannot use 'static' as constant modifier", $this->getAttributesAt($modifierPos))); } if ($node->flags & Class_::MODIFIER_ABSTRACT) { $this->emitError(new \PhpParser\Error("Cannot use 'abstract' as constant modifier", $this->getAttributesAt($modifierPos))); } if ($node->flags & Class_::MODIFIER_READONLY) { $this->emitError(new \PhpParser\Error("Cannot use 'readonly' as constant modifier", $this->getAttributesAt($modifierPos))); } } protected function checkProperty(Property $node, $modifierPos) { if ($node->flags & Class_::MODIFIER_ABSTRACT) { $this->emitError(new \PhpParser\Error('Properties cannot be declared abstract', $this->getAttributesAt($modifierPos))); } if ($node->flags & Class_::MODIFIER_FINAL) { $this->emitError(new \PhpParser\Error('Properties cannot be declared final', $this->getAttributesAt($modifierPos))); } } protected function checkUseUse(UseUse $node, $namePos) { if ($node->alias && $node->alias->isSpecialClassName()) { $this->emitError(new \PhpParser\Error(\sprintf('Cannot use %s as %s because \'%2$s\' is a special class name', $node->name, $node->alias), $this->getAttributesAt($namePos))); } } } PK! "WW9php-parser/lib/PhpParser/ConstExprEvaluationException.phpnu[ [aliasName => originalName]] */ protected $aliases = []; /** @var Name[][] Same as $aliases but preserving original case */ protected $origAliases = []; /** @var ErrorHandler Error handler */ protected $errorHandler; /** * Create a name context. * * @param ErrorHandler $errorHandler Error handling used to report errors */ public function __construct(\PhpParser\ErrorHandler $errorHandler) { $this->errorHandler = $errorHandler; } /** * Start a new namespace. * * This also resets the alias table. * * @param Name|null $namespace Null is the global namespace */ public function startNamespace(?Name $namespace = null) { $this->namespace = $namespace; $this->origAliases = $this->aliases = [Stmt\Use_::TYPE_NORMAL => [], Stmt\Use_::TYPE_FUNCTION => [], Stmt\Use_::TYPE_CONSTANT => []]; } /** * Add an alias / import. * * @param Name $name Original name * @param string $aliasName Aliased name * @param int $type One of Stmt\Use_::TYPE_* * @param array $errorAttrs Attributes to use to report an error */ public function addAlias(Name $name, string $aliasName, int $type, array $errorAttrs = []) { // Constant names are case sensitive, everything else case insensitive if ($type === Stmt\Use_::TYPE_CONSTANT) { $aliasLookupName = $aliasName; } else { $aliasLookupName = \strtolower($aliasName); } if (isset($this->aliases[$type][$aliasLookupName])) { $typeStringMap = [Stmt\Use_::TYPE_NORMAL => '', Stmt\Use_::TYPE_FUNCTION => 'function ', Stmt\Use_::TYPE_CONSTANT => 'const ']; $this->errorHandler->handleError(new \PhpParser\Error(\sprintf('Cannot use %s%s as %s because the name is already in use', $typeStringMap[$type], $name, $aliasName), $errorAttrs)); return; } $this->aliases[$type][$aliasLookupName] = $name; $this->origAliases[$type][$aliasName] = $name; } /** * Get current namespace. * * @return null|Name Namespace (or null if global namespace) */ public function getNamespace() { return $this->namespace; } /** * Get resolved name. * * @param Name $name Name to resolve * @param int $type One of Stmt\Use_::TYPE_{FUNCTION|CONSTANT} * * @return null|Name Resolved name, or null if static resolution is not possible */ public function getResolvedName(Name $name, int $type) { // don't resolve special class names if ($type === Stmt\Use_::TYPE_NORMAL && $name->isSpecialClassName()) { if (!$name->isUnqualified()) { $this->errorHandler->handleError(new \PhpParser\Error(\sprintf("'\\%s' is an invalid class name", $name->toString()), $name->getAttributes())); } return $name; } // fully qualified names are already resolved if ($name->isFullyQualified()) { return $name; } // Try to resolve aliases if (null !== ($resolvedName = $this->resolveAlias($name, $type))) { return $resolvedName; } if ($type !== Stmt\Use_::TYPE_NORMAL && $name->isUnqualified()) { if (null === $this->namespace) { // outside of a namespace unaliased unqualified is same as fully qualified return new FullyQualified($name, $name->getAttributes()); } // Cannot resolve statically return null; } // if no alias exists prepend current namespace return FullyQualified::concat($this->namespace, $name, $name->getAttributes()); } /** * Get resolved class name. * * @param Name $name Class ame to resolve * * @return Name Resolved name */ public function getResolvedClassName(Name $name) : Name { return $this->getResolvedName($name, Stmt\Use_::TYPE_NORMAL); } /** * Get possible ways of writing a fully qualified name (e.g., by making use of aliases). * * @param string $name Fully-qualified name (without leading namespace separator) * @param int $type One of Stmt\Use_::TYPE_* * * @return Name[] Possible representations of the name */ public function getPossibleNames(string $name, int $type) : array { $lcName = \strtolower($name); if ($type === Stmt\Use_::TYPE_NORMAL) { // self, parent and static must always be unqualified if ($lcName === "self" || $lcName === "parent" || $lcName === "static") { return [new Name($name)]; } } // Collect possible ways to write this name, starting with the fully-qualified name $possibleNames = [new FullyQualified($name)]; if (null !== ($nsRelativeName = $this->getNamespaceRelativeName($name, $lcName, $type))) { // Make sure there is no alias that makes the normally namespace-relative name // into something else if (null === $this->resolveAlias($nsRelativeName, $type)) { $possibleNames[] = $nsRelativeName; } } // Check for relevant namespace use statements foreach ($this->origAliases[Stmt\Use_::TYPE_NORMAL] as $alias => $orig) { $lcOrig = $orig->toLowerString(); if (0 === \strpos($lcName, $lcOrig . '\\')) { $possibleNames[] = new Name($alias . \substr($name, \strlen($lcOrig))); } } // Check for relevant type-specific use statements foreach ($this->origAliases[$type] as $alias => $orig) { if ($type === Stmt\Use_::TYPE_CONSTANT) { // Constants are are complicated-sensitive $normalizedOrig = $this->normalizeConstName($orig->toString()); if ($normalizedOrig === $this->normalizeConstName($name)) { $possibleNames[] = new Name($alias); } } else { // Everything else is case-insensitive if ($orig->toLowerString() === $lcName) { $possibleNames[] = new Name($alias); } } } return $possibleNames; } /** * Get shortest representation of this fully-qualified name. * * @param string $name Fully-qualified name (without leading namespace separator) * @param int $type One of Stmt\Use_::TYPE_* * * @return Name Shortest representation */ public function getShortName(string $name, int $type) : Name { $possibleNames = $this->getPossibleNames($name, $type); // Find shortest name $shortestName = null; $shortestLength = \INF; foreach ($possibleNames as $possibleName) { $length = \strlen($possibleName->toCodeString()); if ($length < $shortestLength) { $shortestName = $possibleName; $shortestLength = $length; } } return $shortestName; } private function resolveAlias(Name $name, $type) { $firstPart = $name->getFirst(); if ($name->isQualified()) { // resolve aliases for qualified names, always against class alias table $checkName = \strtolower($firstPart); if (isset($this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName])) { $alias = $this->aliases[Stmt\Use_::TYPE_NORMAL][$checkName]; return FullyQualified::concat($alias, $name->slice(1), $name->getAttributes()); } } elseif ($name->isUnqualified()) { // constant aliases are case-sensitive, function aliases case-insensitive $checkName = $type === Stmt\Use_::TYPE_CONSTANT ? $firstPart : \strtolower($firstPart); if (isset($this->aliases[$type][$checkName])) { // resolve unqualified aliases return new FullyQualified($this->aliases[$type][$checkName], $name->getAttributes()); } } // No applicable aliases return null; } private function getNamespaceRelativeName(string $name, string $lcName, int $type) { if (null === $this->namespace) { return new Name($name); } if ($type === Stmt\Use_::TYPE_CONSTANT) { // The constants true/false/null always resolve to the global symbols, even inside a // namespace, so they may be used without qualification if ($lcName === "true" || $lcName === "false" || $lcName === "null") { return new Name($name); } } $namespacePrefix = \strtolower($this->namespace . '\\'); if (0 === \strpos($lcName, $namespacePrefix)) { return new Name(\substr($name, \strlen($namespacePrefix))); } return null; } private function normalizeConstName(string $name) { $nsSep = \strrpos($name, '\\'); if (\false === $nsSep) { return $name; } // Constants have case-insensitive namespace and case-sensitive short-name $ns = \substr($name, 0, $nsSep); $shortName = \substr($name, $nsSep + 1); return \strtolower($ns) . '\\' . $shortName; } } PK!ZZ"php-parser/lib/PhpParser/Lexer.phpnu[defineCompatibilityTokens(); $this->tokenMap = $this->createTokenMap(); $this->identifierTokens = $this->createIdentifierTokenMap(); // map of tokens to drop while lexing (the map is only used for isset lookup, // that's why the value is simply set to 1; the value is never actually used.) $this->dropTokens = \array_fill_keys([\T_WHITESPACE, \T_OPEN_TAG, \T_COMMENT, \T_DOC_COMMENT, \T_BAD_CHARACTER], 1); $defaultAttributes = ['comments', 'startLine', 'endLine']; $usedAttributes = \array_fill_keys($options['usedAttributes'] ?? $defaultAttributes, \true); // Create individual boolean properties to make these checks faster. $this->attributeStartLineUsed = isset($usedAttributes['startLine']); $this->attributeEndLineUsed = isset($usedAttributes['endLine']); $this->attributeStartTokenPosUsed = isset($usedAttributes['startTokenPos']); $this->attributeEndTokenPosUsed = isset($usedAttributes['endTokenPos']); $this->attributeStartFilePosUsed = isset($usedAttributes['startFilePos']); $this->attributeEndFilePosUsed = isset($usedAttributes['endFilePos']); $this->attributeCommentsUsed = isset($usedAttributes['comments']); } /** * Initializes the lexer for lexing the provided source code. * * This function does not throw if lexing errors occur. Instead, errors may be retrieved using * the getErrors() method. * * @param string $code The source code to lex * @param ErrorHandler|null $errorHandler Error handler to use for lexing errors. Defaults to * ErrorHandler\Throwing */ public function startLexing(string $code, ?\PhpParser\ErrorHandler $errorHandler = null) { if (null === $errorHandler) { $errorHandler = new \PhpParser\ErrorHandler\Throwing(); } $this->code = $code; // keep the code around for __halt_compiler() handling $this->pos = -1; $this->line = 1; $this->filePos = 0; // If inline HTML occurs without preceding code, treat it as if it had a leading newline. // This ensures proper composability, because having a newline is the "safe" assumption. $this->prevCloseTagHasNewline = \true; $scream = \ini_set('xdebug.scream', '0'); $this->tokens = @\token_get_all($code); $this->postprocessTokens($errorHandler); if (\false !== $scream) { \ini_set('xdebug.scream', $scream); } } private function handleInvalidCharacterRange($start, $end, $line, \PhpParser\ErrorHandler $errorHandler) { $tokens = []; for ($i = $start; $i < $end; $i++) { $chr = $this->code[$i]; if ($chr === "\x00") { // PHP cuts error message after null byte, so need special case $errorMsg = 'Unexpected null byte'; } else { $errorMsg = \sprintf('Unexpected character "%s" (ASCII %d)', $chr, \ord($chr)); } $tokens[] = [\T_BAD_CHARACTER, $chr, $line]; $errorHandler->handleError(new \PhpParser\Error($errorMsg, ['startLine' => $line, 'endLine' => $line, 'startFilePos' => $i, 'endFilePos' => $i])); } return $tokens; } /** * Check whether comment token is unterminated. * * @return bool */ private function isUnterminatedComment($token) : bool { return ($token[0] === \T_COMMENT || $token[0] === \T_DOC_COMMENT) && \substr($token[1], 0, 2) === '/*' && \substr($token[1], -2) !== '*/'; } protected function postprocessTokens(\PhpParser\ErrorHandler $errorHandler) { // PHP's error handling for token_get_all() is rather bad, so if we want detailed // error information we need to compute it ourselves. Invalid character errors are // detected by finding "gaps" in the token array. Unterminated comments are detected // by checking if a trailing comment has a "*/" at the end. // // Additionally, we perform a number of canonicalizations here: // * Use the PHP 8.0 comment format, which does not include trailing whitespace anymore. // * Use PHP 8.0 T_NAME_* tokens. // * Use PHP 8.1 T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG and // T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG tokens used to disambiguate intersection types. $filePos = 0; $line = 1; $numTokens = \count($this->tokens); for ($i = 0; $i < $numTokens; $i++) { $token = $this->tokens[$i]; // Since PHP 7.4 invalid characters are represented by a T_BAD_CHARACTER token. // In this case we only need to emit an error. if ($token[0] === \T_BAD_CHARACTER) { $this->handleInvalidCharacterRange($filePos, $filePos + 1, $line, $errorHandler); } if ($token[0] === \T_COMMENT && \substr($token[1], 0, 2) !== '/*' && \preg_match('/(\\r\\n|\\n|\\r)$/D', $token[1], $matches)) { $trailingNewline = $matches[0]; $token[1] = \substr($token[1], 0, -\strlen($trailingNewline)); $this->tokens[$i] = $token; if (isset($this->tokens[$i + 1]) && $this->tokens[$i + 1][0] === \T_WHITESPACE) { // Move trailing newline into following T_WHITESPACE token, if it already exists. $this->tokens[$i + 1][1] = $trailingNewline . $this->tokens[$i + 1][1]; $this->tokens[$i + 1][2]--; } else { // Otherwise, we need to create a new T_WHITESPACE token. \array_splice($this->tokens, $i + 1, 0, [[\T_WHITESPACE, $trailingNewline, $line]]); $numTokens++; } } // Emulate PHP 8 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and T_STRING // into a single token. if (\is_array($token) && ($token[0] === \T_NS_SEPARATOR || isset($this->identifierTokens[$token[0]]))) { $lastWasSeparator = $token[0] === \T_NS_SEPARATOR; $text = $token[1]; for ($j = $i + 1; isset($this->tokens[$j]); $j++) { if ($lastWasSeparator) { if (!isset($this->identifierTokens[$this->tokens[$j][0]])) { break; } $lastWasSeparator = \false; } else { if ($this->tokens[$j][0] !== \T_NS_SEPARATOR) { break; } $lastWasSeparator = \true; } $text .= $this->tokens[$j][1]; } if ($lastWasSeparator) { // Trailing separator is not part of the name. $j--; $text = \substr($text, 0, -1); } if ($j > $i + 1) { if ($token[0] === \T_NS_SEPARATOR) { $type = \T_NAME_FULLY_QUALIFIED; } else { if ($token[0] === \T_NAMESPACE) { $type = \T_NAME_RELATIVE; } else { $type = \T_NAME_QUALIFIED; } } $token = [$type, $text, $line]; \array_splice($this->tokens, $i, $j - $i, [$token]); $numTokens -= $j - $i - 1; } } if ($token === '&') { $next = $i + 1; while (isset($this->tokens[$next]) && $this->tokens[$next][0] === \T_WHITESPACE) { $next++; } $followedByVarOrVarArg = isset($this->tokens[$next]) && ($this->tokens[$next][0] === \T_VARIABLE || $this->tokens[$next][0] === \T_ELLIPSIS); $this->tokens[$i] = $token = [$followedByVarOrVarArg ? \T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG : \T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG, '&', $line]; } $tokenValue = \is_string($token) ? $token : $token[1]; $tokenLen = \strlen($tokenValue); if (\substr($this->code, $filePos, $tokenLen) !== $tokenValue) { // Something is missing, must be an invalid character $nextFilePos = \strpos($this->code, $tokenValue, $filePos); $badCharTokens = $this->handleInvalidCharacterRange($filePos, $nextFilePos, $line, $errorHandler); $filePos = (int) $nextFilePos; \array_splice($this->tokens, $i, 0, $badCharTokens); $numTokens += \count($badCharTokens); $i += \count($badCharTokens); } $filePos += $tokenLen; $line += \substr_count($tokenValue, "\n"); } if ($filePos !== \strlen($this->code)) { if (\substr($this->code, $filePos, 2) === '/*') { // Unlike PHP, HHVM will drop unterminated comments entirely $comment = \substr($this->code, $filePos); $errorHandler->handleError(new \PhpParser\Error('Unterminated comment', ['startLine' => $line, 'endLine' => $line + \substr_count($comment, "\n"), 'startFilePos' => $filePos, 'endFilePos' => $filePos + \strlen($comment)])); // Emulate the PHP behavior $isDocComment = isset($comment[3]) && $comment[3] === '*'; $this->tokens[] = [$isDocComment ? \T_DOC_COMMENT : \T_COMMENT, $comment, $line]; } else { // Invalid characters at the end of the input $badCharTokens = $this->handleInvalidCharacterRange($filePos, \strlen($this->code), $line, $errorHandler); $this->tokens = \array_merge($this->tokens, $badCharTokens); } return; } if (\count($this->tokens) > 0) { // Check for unterminated comment $lastToken = $this->tokens[\count($this->tokens) - 1]; if ($this->isUnterminatedComment($lastToken)) { $errorHandler->handleError(new \PhpParser\Error('Unterminated comment', ['startLine' => $line - \substr_count($lastToken[1], "\n"), 'endLine' => $line, 'startFilePos' => $filePos - \strlen($lastToken[1]), 'endFilePos' => $filePos])); } } } /** * Fetches the next token. * * The available attributes are determined by the 'usedAttributes' option, which can * be specified in the constructor. The following attributes are supported: * * * 'comments' => Array of PhpParser\Comment or PhpParser\Comment\Doc instances, * representing all comments that occurred between the previous * non-discarded token and the current one. * * 'startLine' => Line in which the node starts. * * 'endLine' => Line in which the node ends. * * 'startTokenPos' => Offset into the token array of the first token in the node. * * 'endTokenPos' => Offset into the token array of the last token in the node. * * 'startFilePos' => Offset into the code string of the first character that is part of the node. * * 'endFilePos' => Offset into the code string of the last character that is part of the node. * * @param mixed $value Variable to store token content in * @param mixed $startAttributes Variable to store start attributes in * @param mixed $endAttributes Variable to store end attributes in * * @return int Token id */ public function getNextToken(&$value = null, &$startAttributes = null, &$endAttributes = null) : int { $startAttributes = []; $endAttributes = []; while (1) { if (isset($this->tokens[++$this->pos])) { $token = $this->tokens[$this->pos]; } else { // EOF token with ID 0 $token = "\x00"; } if ($this->attributeStartLineUsed) { $startAttributes['startLine'] = $this->line; } if ($this->attributeStartTokenPosUsed) { $startAttributes['startTokenPos'] = $this->pos; } if ($this->attributeStartFilePosUsed) { $startAttributes['startFilePos'] = $this->filePos; } if (\is_string($token)) { $value = $token; if (isset($token[1])) { // bug in token_get_all $this->filePos += 2; $id = \ord('"'); } else { $this->filePos += 1; $id = \ord($token); } } elseif (!isset($this->dropTokens[$token[0]])) { $value = $token[1]; $id = $this->tokenMap[$token[0]]; if (\T_CLOSE_TAG === $token[0]) { $this->prevCloseTagHasNewline = \false !== \strpos($token[1], "\n") || \false !== \strpos($token[1], "\r"); } elseif (\T_INLINE_HTML === $token[0]) { $startAttributes['hasLeadingNewline'] = $this->prevCloseTagHasNewline; } $this->line += \substr_count($value, "\n"); $this->filePos += \strlen($value); } else { $origLine = $this->line; $origFilePos = $this->filePos; $this->line += \substr_count($token[1], "\n"); $this->filePos += \strlen($token[1]); if (\T_COMMENT === $token[0] || \T_DOC_COMMENT === $token[0]) { if ($this->attributeCommentsUsed) { $comment = \T_DOC_COMMENT === $token[0] ? new \PhpParser\Comment\Doc($token[1], $origLine, $origFilePos, $this->pos, $this->line, $this->filePos - 1, $this->pos) : new \PhpParser\Comment($token[1], $origLine, $origFilePos, $this->pos, $this->line, $this->filePos - 1, $this->pos); $startAttributes['comments'][] = $comment; } } continue; } if ($this->attributeEndLineUsed) { $endAttributes['endLine'] = $this->line; } if ($this->attributeEndTokenPosUsed) { $endAttributes['endTokenPos'] = $this->pos; } if ($this->attributeEndFilePosUsed) { $endAttributes['endFilePos'] = $this->filePos - 1; } return $id; } throw new \RuntimeException('Reached end of lexer loop'); } /** * Returns the token array for current code. * * The token array is in the same format as provided by the * token_get_all() function and does not discard tokens (i.e. * whitespace and comments are included). The token position * attributes are against this token array. * * @return array Array of tokens in token_get_all() format */ public function getTokens() : array { return $this->tokens; } /** * Handles __halt_compiler() by returning the text after it. * * @return string Remaining text */ public function handleHaltCompiler() : string { // text after T_HALT_COMPILER, still including (); $textAfter = \substr($this->code, $this->filePos); // ensure that it is followed by (); // this simplifies the situation, by not allowing any comments // in between of the tokens. if (!\preg_match('~^\\s*\\(\\s*\\)\\s*(?:;|\\?>\\r?\\n?)~', $textAfter, $matches)) { throw new \PhpParser\Error('__HALT_COMPILER must be followed by "();"'); } // prevent the lexer from returning any further tokens $this->pos = \count($this->tokens); // return with (); removed return \substr($textAfter, \strlen($matches[0])); } private function defineCompatibilityTokens() { static $compatTokensDefined = \false; if ($compatTokensDefined) { return; } $compatTokens = [ // PHP 7.4 'T_BAD_CHARACTER', 'T_FN', 'T_COALESCE_EQUAL', // PHP 8.0 'T_NAME_QUALIFIED', 'T_NAME_FULLY_QUALIFIED', 'T_NAME_RELATIVE', 'T_MATCH', 'T_NULLSAFE_OBJECT_OPERATOR', 'T_ATTRIBUTE', // PHP 8.1 'T_ENUM', 'T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG', 'T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG', 'T_READONLY', ]; // PHP-Parser might be used together with another library that also emulates some or all // of these tokens. Perform a sanity-check that all already defined tokens have been // assigned a unique ID. $usedTokenIds = []; foreach ($compatTokens as $token) { if (\defined($token)) { $tokenId = \constant($token); $clashingToken = $usedTokenIds[$tokenId] ?? null; if ($clashingToken !== null) { throw new \Error(\sprintf('Token %s has same ID as token %s, ' . 'you may be using a library with broken token emulation', $token, $clashingToken)); } $usedTokenIds[$tokenId] = $token; } } // Now define any tokens that have not yet been emulated. Try to assign IDs from -1 // downwards, but skip any IDs that may already be in use. $newTokenId = -1; foreach ($compatTokens as $token) { if (!\defined($token)) { while (isset($usedTokenIds[$newTokenId])) { $newTokenId--; } \define($token, $newTokenId); $newTokenId--; } } $compatTokensDefined = \true; } /** * Creates the token map. * * The token map maps the PHP internal token identifiers * to the identifiers used by the Parser. Additionally it * maps T_OPEN_TAG_WITH_ECHO to T_ECHO and T_CLOSE_TAG to ';'. * * @return array The token map */ protected function createTokenMap() : array { $tokenMap = []; // 256 is the minimum possible token number, as everything below // it is an ASCII value for ($i = 256; $i < 1000; ++$i) { if (\T_DOUBLE_COLON === $i) { // T_DOUBLE_COLON is equivalent to T_PAAMAYIM_NEKUDOTAYIM $tokenMap[$i] = Tokens::T_PAAMAYIM_NEKUDOTAYIM; } elseif (\T_OPEN_TAG_WITH_ECHO === $i) { // T_OPEN_TAG_WITH_ECHO with dropped T_OPEN_TAG results in T_ECHO $tokenMap[$i] = Tokens::T_ECHO; } elseif (\T_CLOSE_TAG === $i) { // T_CLOSE_TAG is equivalent to ';' $tokenMap[$i] = \ord(';'); } elseif ('UNKNOWN' !== ($name = \token_name($i))) { if ('T_HASHBANG' === $name) { // HHVM uses a special token for #! hashbang lines $tokenMap[$i] = Tokens::T_INLINE_HTML; } elseif (\defined($name = Tokens::class . '::' . $name)) { // Other tokens can be mapped directly $tokenMap[$i] = \constant($name); } } } // HHVM uses a special token for numbers that overflow to double if (\defined('T_ONUMBER')) { $tokenMap[\T_ONUMBER] = Tokens::T_DNUMBER; } // HHVM also has a separate token for the __COMPILER_HALT_OFFSET__ constant if (\defined('T_COMPILER_HALT_OFFSET')) { $tokenMap[\T_COMPILER_HALT_OFFSET] = Tokens::T_STRING; } // Assign tokens for which we define compatibility constants, as token_name() does not know them. $tokenMap[\T_FN] = Tokens::T_FN; $tokenMap[\T_COALESCE_EQUAL] = Tokens::T_COALESCE_EQUAL; $tokenMap[\T_NAME_QUALIFIED] = Tokens::T_NAME_QUALIFIED; $tokenMap[\T_NAME_FULLY_QUALIFIED] = Tokens::T_NAME_FULLY_QUALIFIED; $tokenMap[\T_NAME_RELATIVE] = Tokens::T_NAME_RELATIVE; $tokenMap[\T_MATCH] = Tokens::T_MATCH; $tokenMap[\T_NULLSAFE_OBJECT_OPERATOR] = Tokens::T_NULLSAFE_OBJECT_OPERATOR; $tokenMap[\T_ATTRIBUTE] = Tokens::T_ATTRIBUTE; $tokenMap[\T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_NOT_FOLLOWED_BY_VAR_OR_VARARG; $tokenMap[\T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG] = Tokens::T_AMPERSAND_FOLLOWED_BY_VAR_OR_VARARG; $tokenMap[\T_ENUM] = Tokens::T_ENUM; $tokenMap[\T_READONLY] = Tokens::T_READONLY; return $tokenMap; } private function createIdentifierTokenMap() : array { // Based on semi_reserved production. return \array_fill_keys([\T_STRING, \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, \T_MATCH], \true); } } PK!NeVeePphp-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpnu[resolveIntegerOrFloatToken($match); $newTokens = [[$tokenKind, $match, $token[2]]]; $numTokens = 1; $len = $tokenLen; while ($matchLen > $len) { $nextToken = $tokens[$i + $numTokens]; $nextTokenText = \is_array($nextToken) ? $nextToken[1] : $nextToken; $nextTokenLen = \strlen($nextTokenText); $numTokens++; if ($matchLen < $len + $nextTokenLen) { // Split trailing characters into a partial token. \assert(\is_array($nextToken), "Partial token should be an array token"); $partialText = \substr($nextTokenText, $matchLen - $len); $newTokens[] = [$nextToken[0], $partialText, $nextToken[2]]; break; } $len += $nextTokenLen; } \array_splice($tokens, $i, $numTokens, $newTokens); $c -= $numTokens - \count($newTokens); $codeOffset += $matchLen; } return $tokens; } private function resolveIntegerOrFloatToken(string $str) : int { $str = \str_replace('_', '', $str); if (\stripos($str, '0b') === 0) { $num = \bindec($str); } elseif (\stripos($str, '0x') === 0) { $num = \hexdec($str); } elseif (\stripos($str, '0') === 0 && \ctype_digit($str)) { $num = \octdec($str); } else { $num = +$str; } return \is_float($num) ? \T_DNUMBER : \T_LNUMBER; } public function reverseEmulate(string $code, array $tokens) : array { // Numeric separators were not legal code previously, don't bother. return $tokens; } } PK!V&zJphp-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpnu[targetPhpVersion = $options['phpVersion'] ?? \PhpParser\Lexer\Emulative::PHP_8_2; unset($options['phpVersion']); parent::__construct($options); $emulators = [new FlexibleDocStringEmulator(), new FnTokenEmulator(), new MatchTokenEmulator(), new CoaleseEqualTokenEmulator(), new NumericLiteralSeparatorEmulator(), new NullsafeTokenEmulator(), new AttributeEmulator(), new EnumTokenEmulator(), new ReadonlyTokenEmulator(), new ExplicitOctalEmulator(), new ReadonlyFunctionTokenEmulator()]; // Collect emulators that are relevant for the PHP version we're running // and the PHP version we're targeting for emulation. foreach ($emulators as $emulator) { $emulatorPhpVersion = $emulator->getPhpVersion(); if ($this->isForwardEmulationNeeded($emulatorPhpVersion)) { $this->emulators[] = $emulator; } else { if ($this->isReverseEmulationNeeded($emulatorPhpVersion)) { $this->emulators[] = new ReverseEmulator($emulator); } } } } public function startLexing(string $code, ?ErrorHandler $errorHandler = null) { $emulators = \array_filter($this->emulators, function ($emulator) use($code) { return $emulator->isEmulationNeeded($code); }); if (empty($emulators)) { // Nothing to emulate, yay parent::startLexing($code, $errorHandler); return; } $this->patches = []; foreach ($emulators as $emulator) { $code = $emulator->preprocessCode($code, $this->patches); } $collector = new ErrorHandler\Collecting(); parent::startLexing($code, $collector); $this->sortPatches(); $this->fixupTokens(); $errors = $collector->getErrors(); if (!empty($errors)) { $this->fixupErrors($errors); foreach ($errors as $error) { $errorHandler->handleError($error); } } foreach ($emulators as $emulator) { $this->tokens = $emulator->emulate($code, $this->tokens); } } private function isForwardEmulationNeeded(string $emulatorPhpVersion) : bool { return \version_compare(\PHP_VERSION, $emulatorPhpVersion, '<') && \version_compare($this->targetPhpVersion, $emulatorPhpVersion, '>='); } private function isReverseEmulationNeeded(string $emulatorPhpVersion) : bool { return \version_compare(\PHP_VERSION, $emulatorPhpVersion, '>=') && \version_compare($this->targetPhpVersion, $emulatorPhpVersion, '<'); } private function sortPatches() { // Patches may be contributed by different emulators. // Make sure they are sorted by increasing patch position. \usort($this->patches, function ($p1, $p2) { return $p1[0] <=> $p2[0]; }); } private function fixupTokens() { if (\count($this->patches) === 0) { return; } // Load first patch $patchIdx = 0; list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; // We use a manual loop over the tokens, because we modify the array on the fly $pos = 0; for ($i = 0, $c = \count($this->tokens); $i < $c; $i++) { $token = $this->tokens[$i]; if (\is_string($token)) { if ($patchPos === $pos) { // Only support replacement for string tokens. \assert($patchType === 'replace'); $this->tokens[$i] = $patchText; // Fetch the next patch $patchIdx++; if ($patchIdx >= \count($this->patches)) { // No more patches, we're done return; } list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; } $pos += \strlen($token); continue; } $len = \strlen($token[1]); $posDelta = 0; while ($patchPos >= $pos && $patchPos < $pos + $len) { $patchTextLen = \strlen($patchText); if ($patchType === 'remove') { if ($patchPos === $pos && $patchTextLen === $len) { // Remove token entirely \array_splice($this->tokens, $i, 1, []); $i--; $c--; } else { // Remove from token string $this->tokens[$i][1] = \substr_replace($token[1], '', $patchPos - $pos + $posDelta, $patchTextLen); $posDelta -= $patchTextLen; } } elseif ($patchType === 'add') { // Insert into the token string $this->tokens[$i][1] = \substr_replace($token[1], $patchText, $patchPos - $pos + $posDelta, 0); $posDelta += $patchTextLen; } else { if ($patchType === 'replace') { // Replace inside the token string $this->tokens[$i][1] = \substr_replace($token[1], $patchText, $patchPos - $pos + $posDelta, $patchTextLen); } else { \assert(\false); } } // Fetch the next patch $patchIdx++; if ($patchIdx >= \count($this->patches)) { // No more patches, we're done return; } list($patchPos, $patchType, $patchText) = $this->patches[$patchIdx]; // Multiple patches may apply to the same token. Reload the current one to check // If the new patch applies $token = $this->tokens[$i]; } $pos += $len; } // A patch did not apply \assert(\false); } /** * Fixup line and position information in errors. * * @param Error[] $errors */ private function fixupErrors(array $errors) { foreach ($errors as $error) { $attrs = $error->getAttributes(); $posDelta = 0; $lineDelta = 0; foreach ($this->patches as $patch) { list($patchPos, $patchType, $patchText) = $patch; if ($patchPos >= $attrs['startFilePos']) { // No longer relevant break; } if ($patchType === 'add') { $posDelta += \strlen($patchText); $lineDelta += \substr_count($patchText, "\n"); } else { if ($patchType === 'remove') { $posDelta -= \strlen($patchText); $lineDelta -= \substr_count($patchText, "\n"); } } } $attrs['startFilePos'] += $posDelta; $attrs['endFilePos'] += $posDelta; $attrs['startLine'] += $lineDelta; $attrs['endLine'] += $lineDelta; $error->setAttributes($attrs); } } } PK!yhh(php-parser/lib/PhpParser/Comment/Doc.phpnu[args($args)); } /** * Creates a namespace builder. * * @param null|string|Node\Name $name Name of the namespace * * @return Builder\Namespace_ The created namespace builder */ public function namespace($name) : \PhpParser\Builder\Namespace_ { return new \PhpParser\Builder\Namespace_($name); } /** * Creates a class builder. * * @param string $name Name of the class * * @return Builder\Class_ The created class builder */ public function class(string $name) : \PhpParser\Builder\Class_ { return new \PhpParser\Builder\Class_($name); } /** * Creates an interface builder. * * @param string $name Name of the interface * * @return Builder\Interface_ The created interface builder */ public function interface(string $name) : \PhpParser\Builder\Interface_ { return new \PhpParser\Builder\Interface_($name); } /** * Creates a trait builder. * * @param string $name Name of the trait * * @return Builder\Trait_ The created trait builder */ public function trait(string $name) : \PhpParser\Builder\Trait_ { return new \PhpParser\Builder\Trait_($name); } /** * Creates an enum builder. * * @param string $name Name of the enum * * @return Builder\Enum_ The created enum builder */ public function enum(string $name) : \PhpParser\Builder\Enum_ { return new \PhpParser\Builder\Enum_($name); } /** * Creates a trait use builder. * * @param Node\Name|string ...$traits Trait names * * @return Builder\TraitUse The create trait use builder */ public function useTrait(...$traits) : \PhpParser\Builder\TraitUse { return new \PhpParser\Builder\TraitUse(...$traits); } /** * Creates a trait use adaptation builder. * * @param Node\Name|string|null $trait Trait name * @param Node\Identifier|string $method Method name * * @return Builder\TraitUseAdaptation The create trait use adaptation builder */ public function traitUseAdaptation($trait, $method = null) : \PhpParser\Builder\TraitUseAdaptation { if ($method === null) { $method = $trait; $trait = null; } return new \PhpParser\Builder\TraitUseAdaptation($trait, $method); } /** * Creates a method builder. * * @param string $name Name of the method * * @return Builder\Method The created method builder */ public function method(string $name) : \PhpParser\Builder\Method { return new \PhpParser\Builder\Method($name); } /** * Creates a parameter builder. * * @param string $name Name of the parameter * * @return Builder\Param The created parameter builder */ public function param(string $name) : \PhpParser\Builder\Param { return new \PhpParser\Builder\Param($name); } /** * Creates a property builder. * * @param string $name Name of the property * * @return Builder\Property The created property builder */ public function property(string $name) : \PhpParser\Builder\Property { return new \PhpParser\Builder\Property($name); } /** * Creates a function builder. * * @param string $name Name of the function * * @return Builder\Function_ The created function builder */ public function function(string $name) : \PhpParser\Builder\Function_ { return new \PhpParser\Builder\Function_($name); } /** * Creates a namespace/class use builder. * * @param Node\Name|string $name Name of the entity (namespace or class) to alias * * @return Builder\Use_ The created use builder */ public function use($name) : \PhpParser\Builder\Use_ { return new \PhpParser\Builder\Use_($name, Use_::TYPE_NORMAL); } /** * Creates a function use builder. * * @param Node\Name|string $name Name of the function to alias * * @return Builder\Use_ The created use function builder */ public function useFunction($name) : \PhpParser\Builder\Use_ { return new \PhpParser\Builder\Use_($name, Use_::TYPE_FUNCTION); } /** * Creates a constant use builder. * * @param Node\Name|string $name Name of the const to alias * * @return Builder\Use_ The created use const builder */ public function useConst($name) : \PhpParser\Builder\Use_ { return new \PhpParser\Builder\Use_($name, Use_::TYPE_CONSTANT); } /** * Creates a class constant builder. * * @param string|Identifier $name Name * @param Node\Expr|bool|null|int|float|string|array $value Value * * @return Builder\ClassConst The created use const builder */ public function classConst($name, $value) : \PhpParser\Builder\ClassConst { return new \PhpParser\Builder\ClassConst($name, $value); } /** * Creates an enum case builder. * * @param string|Identifier $name Name * * @return Builder\EnumCase The created use const builder */ public function enumCase($name) : \PhpParser\Builder\EnumCase { return new \PhpParser\Builder\EnumCase($name); } /** * Creates node a for a literal value. * * @param Expr|bool|null|int|float|string|array|\UnitEnum $value $value * * @return Expr */ public function val($value) : Expr { return \PhpParser\BuilderHelpers::normalizeValue($value); } /** * Creates variable node. * * @param string|Expr $name Name * * @return Expr\Variable */ public function var($name) : Expr\Variable { if (!\is_string($name) && !$name instanceof Expr) { throw new \LogicException('Variable name must be string or Expr'); } return new Expr\Variable($name); } /** * Normalizes an argument list. * * Creates Arg nodes for all arguments and converts literal values to expressions. * * @param array $args List of arguments to normalize * * @return Arg[] */ public function args(array $args) : array { $normalizedArgs = []; foreach ($args as $key => $arg) { if (!$arg instanceof Arg) { $arg = new Arg(\PhpParser\BuilderHelpers::normalizeValue($arg)); } if (\is_string($key)) { $arg->name = \PhpParser\BuilderHelpers::normalizeIdentifier($key); } $normalizedArgs[] = $arg; } return $normalizedArgs; } /** * Creates a function call node. * * @param string|Name|Expr $name Function name * @param array $args Function arguments * * @return Expr\FuncCall */ public function funcCall($name, array $args = []) : Expr\FuncCall { return new Expr\FuncCall(\PhpParser\BuilderHelpers::normalizeNameOrExpr($name), $this->args($args)); } /** * Creates a method call node. * * @param Expr $var Variable the method is called on * @param string|Identifier|Expr $name Method name * @param array $args Method arguments * * @return Expr\MethodCall */ public function methodCall(Expr $var, $name, array $args = []) : Expr\MethodCall { return new Expr\MethodCall($var, \PhpParser\BuilderHelpers::normalizeIdentifierOrExpr($name), $this->args($args)); } /** * Creates a static method call node. * * @param string|Name|Expr $class Class name * @param string|Identifier|Expr $name Method name * @param array $args Method arguments * * @return Expr\StaticCall */ public function staticCall($class, $name, array $args = []) : Expr\StaticCall { return new Expr\StaticCall(\PhpParser\BuilderHelpers::normalizeNameOrExpr($class), \PhpParser\BuilderHelpers::normalizeIdentifierOrExpr($name), $this->args($args)); } /** * Creates an object creation node. * * @param string|Name|Expr $class Class name * @param array $args Constructor arguments * * @return Expr\New_ */ public function new($class, array $args = []) : Expr\New_ { return new Expr\New_(\PhpParser\BuilderHelpers::normalizeNameOrExpr($class), $this->args($args)); } /** * Creates a constant fetch node. * * @param string|Name $name Constant name * * @return Expr\ConstFetch */ public function constFetch($name) : Expr\ConstFetch { return new Expr\ConstFetch(\PhpParser\BuilderHelpers::normalizeName($name)); } /** * Creates a property fetch node. * * @param Expr $var Variable holding object * @param string|Identifier|Expr $name Property name * * @return Expr\PropertyFetch */ public function propertyFetch(Expr $var, $name) : Expr\PropertyFetch { return new Expr\PropertyFetch($var, \PhpParser\BuilderHelpers::normalizeIdentifierOrExpr($name)); } /** * Creates a class constant fetch node. * * @param string|Name|Expr $class Class name * @param string|Identifier|Expr $name Constant name * * @return Expr\ClassConstFetch */ public function classConstFetch($class, $name) : Expr\ClassConstFetch { return new Expr\ClassConstFetch(\PhpParser\BuilderHelpers::normalizeNameOrExpr($class), \PhpParser\BuilderHelpers::normalizeIdentifierOrExpr($name)); } /** * Creates nested Concat nodes from a list of expressions. * * @param Expr|string ...$exprs Expressions or literal strings * * @return Concat */ public function concat(...$exprs) : Concat { $numExprs = \count($exprs); if ($numExprs < 2) { throw new \LogicException('Expected at least two expressions'); } $lastConcat = $this->normalizeStringExpr($exprs[0]); for ($i = 1; $i < $numExprs; $i++) { $lastConcat = new Concat($lastConcat, $this->normalizeStringExpr($exprs[$i])); } return $lastConcat; } /** * @param string|Expr $expr * @return Expr */ private function normalizeStringExpr($expr) : Expr { if ($expr instanceof Expr) { return $expr; } if (\is_string($expr)) { return new String_($expr); } throw new \LogicException('Expected string or Expr'); } } PK!L22)php-parser/lib/PhpParser/ErrorHandler.phpnu[addVisitor($visitor); $traverser->traverse($nodes); return $visitor->getFoundNodes(); } /** * Find all nodes that are instances of a certain class. * * @param Node|Node[] $nodes Single node or array of nodes to search in * @param string $class Class name * * @return Node[] Found nodes (all instances of $class) */ public function findInstanceOf($nodes, string $class) : array { return $this->find($nodes, function ($node) use($class) { return $node instanceof $class; }); } /** * Find first node satisfying a filter callback. * * @param Node|Node[] $nodes Single node or array of nodes to search in * @param callable $filter Filter callback: function(Node $node) : bool * * @return null|Node Found node (or null if none found) */ public function findFirst($nodes, callable $filter) { if (!\is_array($nodes)) { $nodes = [$nodes]; } $visitor = new FirstFindingVisitor($filter); $traverser = new \PhpParser\NodeTraverser(); $traverser->addVisitor($visitor); $traverser->traverse($nodes); return $visitor->getFoundNode(); } /** * Find first node that is an instance of a certain class. * * @param Node|Node[] $nodes Single node or array of nodes to search in * @param string $class Class name * * @return null|Node Found node, which is an instance of $class (or null if none found) */ public function findFirstInstanceOf($nodes, string $class) { return $this->findFirst($nodes, function ($node) use($class) { return $node instanceof $class; }); } } PK!L<<-php-parser/lib/PhpParser/Builder/Property.phpnu[name = $name; } /** * Makes the property public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); return $this; } /** * Makes the property protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); return $this; } /** * Makes the property private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); return $this; } /** * Makes the property static. * * @return $this The builder instance (for fluid interface) */ public function makeStatic() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); return $this; } /** * Makes the property readonly. * * @return $this The builder instance (for fluid interface) */ public function makeReadonly() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_READONLY); return $this; } /** * Sets default value for the property. * * @param mixed $value Default value to use * * @return $this The builder instance (for fluid interface) */ public function setDefault($value) { $this->default = BuilderHelpers::normalizeValue($value); return $this; } /** * Sets doc comment for the property. * * @param PhpParser\Comment\Doc|string $docComment Doc comment to set * * @return $this The builder instance (for fluid interface) */ public function setDocComment($docComment) { $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; return $this; } /** * Sets the property type for PHP 7.4+. * * @param string|Name|Identifier|ComplexType $type * * @return $this */ public function setType($type) { $this->type = BuilderHelpers::normalizeType($type); return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built class node. * * @return Stmt\Property The built property node */ public function getNode() : PhpParser\Node { return new Stmt\Property($this->flags !== 0 ? $this->flags : Stmt\Class_::MODIFIER_PUBLIC, [new Stmt\PropertyProperty($this->name, $this->default)], $this->attributes, $this->type, $this->attributeGroups); } } PK!ixL)php-parser/lib/PhpParser/Builder/Use_.phpnu[name = BuilderHelpers::normalizeName($name); $this->type = $type; } /** * Sets alias for used name. * * @param string $alias Alias to use (last component of full name by default) * * @return $this The builder instance (for fluid interface) */ public function as(string $alias) { $this->alias = $alias; return $this; } /** * Returns the built node. * * @return Stmt\Use_ The built node */ public function getNode() : Node { return new Stmt\Use_([new Stmt\UseUse($this->name, $this->alias)], $this->type); } } PK!a,;#{{+php-parser/lib/PhpParser/Builder/Method.phpnu[name = $name; } /** * Makes the method public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); return $this; } /** * Makes the method protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); return $this; } /** * Makes the method private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); return $this; } /** * Makes the method static. * * @return $this The builder instance (for fluid interface) */ public function makeStatic() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_STATIC); return $this; } /** * Makes the method abstract. * * @return $this The builder instance (for fluid interface) */ public function makeAbstract() { if (!empty($this->stmts)) { throw new \LogicException('Cannot make method with statements abstract'); } $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); $this->stmts = null; // abstract methods don't have statements return $this; } /** * Makes the method final. * * @return $this The builder instance (for fluid interface) */ public function makeFinal() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); return $this; } /** * Adds a statement. * * @param Node|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { if (null === $this->stmts) { throw new \LogicException('Cannot add statements to an abstract method'); } $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built method node. * * @return Stmt\ClassMethod The built method node */ public function getNode() : Node { return new Stmt\ClassMethod($this->name, ['flags' => $this->flags, 'byRef' => $this->returnByRef, 'params' => $this->params, 'returnType' => $this->returnType, 'stmts' => $this->stmts, 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!w /php-parser/lib/PhpParser/Builder/Interface_.phpnu[name = $name; } /** * Extends one or more interfaces. * * @param Name|string ...$interfaces Names of interfaces to extend * * @return $this The builder instance (for fluid interface) */ public function extend(...$interfaces) { foreach ($interfaces as $interface) { $this->extends[] = BuilderHelpers::normalizeName($interface); } return $this; } /** * Adds a statement. * * @param Stmt|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); if ($stmt instanceof Stmt\ClassConst) { $this->constants[] = $stmt; } elseif ($stmt instanceof Stmt\ClassMethod) { // we erase all statements in the body of an interface method $stmt->stmts = null; $this->methods[] = $stmt; } else { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built interface node. * * @return Stmt\Interface_ The built interface node */ public function getNode() : PhpParser\Node { return new Stmt\Interface_($this->name, ['extends' => $this->extends, 'stmts' => \array_merge($this->constants, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!abb7php-parser/lib/PhpParser/Builder/TraitUseAdaptation.phpnu[type = self::TYPE_UNDEFINED; $this->trait = \is_null($trait) ? null : BuilderHelpers::normalizeName($trait); $this->method = BuilderHelpers::normalizeIdentifier($method); } /** * Sets alias of method. * * @param Node\Identifier|string $alias Alias for adaptated method * * @return $this The builder instance (for fluid interface) */ public function as($alias) { if ($this->type === self::TYPE_UNDEFINED) { $this->type = self::TYPE_ALIAS; } if ($this->type !== self::TYPE_ALIAS) { throw new \LogicException('Cannot set alias for not alias adaptation buider'); } $this->alias = $alias; return $this; } /** * Sets adaptated method public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { $this->setModifier(Stmt\Class_::MODIFIER_PUBLIC); return $this; } /** * Sets adaptated method protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { $this->setModifier(Stmt\Class_::MODIFIER_PROTECTED); return $this; } /** * Sets adaptated method private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { $this->setModifier(Stmt\Class_::MODIFIER_PRIVATE); return $this; } /** * Adds overwritten traits. * * @param Node\Name|string ...$traits Traits for overwrite * * @return $this The builder instance (for fluid interface) */ public function insteadof(...$traits) { if ($this->type === self::TYPE_UNDEFINED) { if (\is_null($this->trait)) { throw new \LogicException('Precedence adaptation must have trait'); } $this->type = self::TYPE_PRECEDENCE; } if ($this->type !== self::TYPE_PRECEDENCE) { throw new \LogicException('Cannot add overwritten traits for not precedence adaptation buider'); } foreach ($traits as $trait) { $this->insteadof[] = BuilderHelpers::normalizeName($trait); } return $this; } protected function setModifier(int $modifier) { if ($this->type === self::TYPE_UNDEFINED) { $this->type = self::TYPE_ALIAS; } if ($this->type !== self::TYPE_ALIAS) { throw new \LogicException('Cannot set access modifier for not alias adaptation buider'); } if (\is_null($this->modifier)) { $this->modifier = $modifier; } else { throw new \LogicException('Multiple access type modifiers are not allowed'); } } /** * Returns the built node. * * @return Node The built node */ public function getNode() : Node { switch ($this->type) { case self::TYPE_ALIAS: return new Stmt\TraitUseAdaptation\Alias($this->trait, $this->method, $this->modifier, $this->alias); case self::TYPE_PRECEDENCE: return new Stmt\TraitUseAdaptation\Precedence($this->trait, $this->method, $this->insteadof); default: throw new \LogicException('Type of adaptation is not defined'); } } } PK!1php-parser/lib/PhpParser/Builder/FunctionLike.phpnu[returnByRef = \true; return $this; } /** * Adds a parameter. * * @param Node\Param|Param $param The parameter to add * * @return $this The builder instance (for fluid interface) */ public function addParam($param) { $param = BuilderHelpers::normalizeNode($param); if (!$param instanceof Node\Param) { throw new \LogicException(\sprintf('Expected parameter node, got "%s"', $param->getType())); } $this->params[] = $param; return $this; } /** * Adds multiple parameters. * * @param array $params The parameters to add * * @return $this The builder instance (for fluid interface) */ public function addParams(array $params) { foreach ($params as $param) { $this->addParam($param); } return $this; } /** * Sets the return type for PHP 7. * * @param string|Node\Name|Node\Identifier|Node\ComplexType $type * * @return $this The builder instance (for fluid interface) */ public function setReturnType($type) { $this->returnType = BuilderHelpers::normalizeType($type); return $this; } } PK!6+php-parser/lib/PhpParser/Builder/Trait_.phpnu[name = $name; } /** * Adds a statement. * * @param Stmt|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); if ($stmt instanceof Stmt\Property) { $this->properties[] = $stmt; } elseif ($stmt instanceof Stmt\ClassMethod) { $this->methods[] = $stmt; } elseif ($stmt instanceof Stmt\TraitUse) { $this->uses[] = $stmt; } else { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built trait node. * * @return Stmt\Trait_ The built interface node */ public function getNode() : PhpParser\Node { return new Stmt\Trait_($this->name, ['stmts' => \array_merge($this->uses, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!?{0php-parser/lib/PhpParser/Builder/Declaration.phpnu[addStmt($stmt); } return $this; } /** * Sets doc comment for the declaration. * * @param PhpParser\Comment\Doc|string $docComment Doc comment to set * * @return $this The builder instance (for fluid interface) */ public function setDocComment($docComment) { $this->attributes['comments'] = [BuilderHelpers::normalizeDocComment($docComment)]; return $this; } } PK!G//-php-parser/lib/PhpParser/Builder/TraitUse.phpnu[and($trait); } } /** * Adds used trait. * * @param Node\Name|string $trait Trait name * * @return $this The builder instance (for fluid interface) */ public function and($trait) { $this->traits[] = BuilderHelpers::normalizeName($trait); return $this; } /** * Adds trait adaptation. * * @param Stmt\TraitUseAdaptation|Builder\TraitUseAdaptation $adaptation Trait adaptation * * @return $this The builder instance (for fluid interface) */ public function with($adaptation) { $adaptation = BuilderHelpers::normalizeNode($adaptation); if (!$adaptation instanceof Stmt\TraitUseAdaptation) { throw new \LogicException('Adaptation must have type TraitUseAdaptation'); } $this->adaptations[] = $adaptation; return $this; } /** * Returns the built node. * * @return Node The built node */ public function getNode() : Node { return new Stmt\TraitUse($this->traits, $this->adaptations); } } PK!%%/php-parser/lib/PhpParser/Builder/Namespace_.phpnu[name = null !== $name ? BuilderHelpers::normalizeName($name) : null; } /** * Adds a statement. * * @param Node|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); return $this; } /** * Returns the built node. * * @return Stmt\Namespace_ The built node */ public function getNode() : Node { return new Stmt\Namespace_($this->name, $this->stmts, $this->attributes); } } PK!\P5[[*php-parser/lib/PhpParser/Builder/Param.phpnu[name = $name; } /** * Sets default value for the parameter. * * @param mixed $value Default value to use * * @return $this The builder instance (for fluid interface) */ public function setDefault($value) { $this->default = BuilderHelpers::normalizeValue($value); return $this; } /** * Sets type for the parameter. * * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type * * @return $this The builder instance (for fluid interface) */ public function setType($type) { $this->type = BuilderHelpers::normalizeType($type); if ($this->type == 'void') { throw new \LogicException('Parameter type cannot be void'); } return $this; } /** * Sets type for the parameter. * * @param string|Node\Name|Node\Identifier|Node\ComplexType $type Parameter type * * @return $this The builder instance (for fluid interface) * * @deprecated Use setType() instead */ public function setTypeHint($type) { return $this->setType($type); } /** * Make the parameter accept the value by reference. * * @return $this The builder instance (for fluid interface) */ public function makeByRef() { $this->byRef = \true; return $this; } /** * Make the parameter variadic * * @return $this The builder instance (for fluid interface) */ public function makeVariadic() { $this->variadic = \true; return $this; } /** * Makes the (promoted) parameter public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { $this->flags = BuilderHelpers::addModifier($this->flags, Node\Stmt\Class_::MODIFIER_PUBLIC); return $this; } /** * Makes the (promoted) parameter protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { $this->flags = BuilderHelpers::addModifier($this->flags, Node\Stmt\Class_::MODIFIER_PROTECTED); return $this; } /** * Makes the (promoted) parameter private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { $this->flags = BuilderHelpers::addModifier($this->flags, Node\Stmt\Class_::MODIFIER_PRIVATE); return $this; } /** * Makes the (promoted) parameter readonly. * * @return $this The builder instance (for fluid interface) */ public function makeReadonly() { $this->flags = BuilderHelpers::addModifier($this->flags, Node\Stmt\Class_::MODIFIER_READONLY); return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built parameter node. * * @return Node\Param The built parameter node */ public function getNode() : Node { return new Node\Param(new Node\Expr\Variable($this->name), $this->default, $this->type, $this->byRef, $this->variadic, [], $this->flags, $this->attributeGroups); } } PK!+php-parser/lib/PhpParser/Builder/Class_.phpnu[name = $name; } /** * Extends a class. * * @param Name|string $class Name of class to extend * * @return $this The builder instance (for fluid interface) */ public function extend($class) { $this->extends = BuilderHelpers::normalizeName($class); return $this; } /** * Implements one or more interfaces. * * @param Name|string ...$interfaces Names of interfaces to implement * * @return $this The builder instance (for fluid interface) */ public function implement(...$interfaces) { foreach ($interfaces as $interface) { $this->implements[] = BuilderHelpers::normalizeName($interface); } return $this; } /** * Makes the class abstract. * * @return $this The builder instance (for fluid interface) */ public function makeAbstract() { $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_ABSTRACT); return $this; } /** * Makes the class final. * * @return $this The builder instance (for fluid interface) */ public function makeFinal() { $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); return $this; } public function makeReadonly() { $this->flags = BuilderHelpers::addClassModifier($this->flags, Stmt\Class_::MODIFIER_READONLY); return $this; } /** * Adds a statement. * * @param Stmt|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); $targets = [Stmt\TraitUse::class => &$this->uses, Stmt\ClassConst::class => &$this->constants, Stmt\Property::class => &$this->properties, Stmt\ClassMethod::class => &$this->methods]; $class = \get_class($stmt); if (!isset($targets[$class])) { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } $targets[$class][] = $stmt; return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built class node. * * @return Stmt\Class_ The built class node */ public function getNode() : PhpParser\Node { return new Stmt\Class_($this->name, ['flags' => $this->flags, 'extends' => $this->extends, 'implements' => $this->implements, 'stmts' => \array_merge($this->uses, $this->constants, $this->properties, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!(jL11.php-parser/lib/PhpParser/Builder/Function_.phpnu[name = $name; } /** * Adds a statement. * * @param Node|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $this->stmts[] = BuilderHelpers::normalizeStmt($stmt); return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built function node. * * @return Stmt\Function_ The built function node */ public function getNode() : Node { return new Stmt\Function_($this->name, ['byRef' => $this->returnByRef, 'params' => $this->params, 'returnType' => $this->returnType, 'stmts' => $this->stmts, 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!6&&5php-parser/lib/PhpParser/NodeVisitor/NameResolver.phpnu[nameContext = new NameContext($errorHandler ?? new ErrorHandler\Throwing()); $this->preserveOriginalNames = $options['preserveOriginalNames'] ?? \false; $this->replaceNodes = $options['replaceNodes'] ?? \true; } /** * Get name resolution context. * * @return NameContext */ public function getNameContext() : NameContext { return $this->nameContext; } public function beforeTraverse(array $nodes) { $this->nameContext->startNamespace(); return null; } public function enterNode(Node $node) { if ($node instanceof Stmt\Namespace_) { $this->nameContext->startNamespace($node->name); } elseif ($node instanceof Stmt\Use_) { foreach ($node->uses as $use) { $this->addAlias($use, $node->type, null); } } elseif ($node instanceof Stmt\GroupUse) { foreach ($node->uses as $use) { $this->addAlias($use, $node->type, $node->prefix); } } elseif ($node instanceof Stmt\Class_) { if (null !== $node->extends) { $node->extends = $this->resolveClassName($node->extends); } foreach ($node->implements as &$interface) { $interface = $this->resolveClassName($interface); } $this->resolveAttrGroups($node); if (null !== $node->name) { $this->addNamespacedName($node); } } elseif ($node instanceof Stmt\Interface_) { foreach ($node->extends as &$interface) { $interface = $this->resolveClassName($interface); } $this->resolveAttrGroups($node); $this->addNamespacedName($node); } elseif ($node instanceof Stmt\Enum_) { foreach ($node->implements as &$interface) { $interface = $this->resolveClassName($interface); } $this->resolveAttrGroups($node); if (null !== $node->name) { $this->addNamespacedName($node); } } elseif ($node instanceof Stmt\Trait_) { $this->resolveAttrGroups($node); $this->addNamespacedName($node); } elseif ($node instanceof Stmt\Function_) { $this->resolveSignature($node); $this->resolveAttrGroups($node); $this->addNamespacedName($node); } elseif ($node instanceof Stmt\ClassMethod || $node instanceof Expr\Closure || $node instanceof Expr\ArrowFunction) { $this->resolveSignature($node); $this->resolveAttrGroups($node); } elseif ($node instanceof Stmt\Property) { if (null !== $node->type) { $node->type = $this->resolveType($node->type); } $this->resolveAttrGroups($node); } elseif ($node instanceof Stmt\Const_) { foreach ($node->consts as $const) { $this->addNamespacedName($const); } } else { if ($node instanceof Stmt\ClassConst) { if (null !== $node->type) { $node->type = $this->resolveType($node->type); } $this->resolveAttrGroups($node); } else { if ($node instanceof Stmt\EnumCase) { $this->resolveAttrGroups($node); } elseif ($node instanceof Expr\StaticCall || $node instanceof Expr\StaticPropertyFetch || $node instanceof Expr\ClassConstFetch || $node instanceof Expr\New_ || $node instanceof Expr\Instanceof_) { if ($node->class instanceof Name) { $node->class = $this->resolveClassName($node->class); } } elseif ($node instanceof Stmt\Catch_) { foreach ($node->types as &$type) { $type = $this->resolveClassName($type); } } elseif ($node instanceof Expr\FuncCall) { if ($node->name instanceof Name) { $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_FUNCTION); } } elseif ($node instanceof Expr\ConstFetch) { $node->name = $this->resolveName($node->name, Stmt\Use_::TYPE_CONSTANT); } elseif ($node instanceof Stmt\TraitUse) { foreach ($node->traits as &$trait) { $trait = $this->resolveClassName($trait); } foreach ($node->adaptations as $adaptation) { if (null !== $adaptation->trait) { $adaptation->trait = $this->resolveClassName($adaptation->trait); } if ($adaptation instanceof Stmt\TraitUseAdaptation\Precedence) { foreach ($adaptation->insteadof as &$insteadof) { $insteadof = $this->resolveClassName($insteadof); } } } } } } return null; } private function addAlias(Stmt\UseUse $use, int $type, ?Name $prefix = null) { // Add prefix for group uses $name = $prefix ? Name::concat($prefix, $use->name) : $use->name; // Type is determined either by individual element or whole use declaration $type |= $use->type; $this->nameContext->addAlias($name, (string) $use->getAlias(), $type, $use->getAttributes()); } /** @param Stmt\Function_|Stmt\ClassMethod|Expr\Closure $node */ private function resolveSignature($node) { foreach ($node->params as $param) { $param->type = $this->resolveType($param->type); $this->resolveAttrGroups($param); } $node->returnType = $this->resolveType($node->returnType); } private function resolveType($node) { if ($node instanceof Name) { return $this->resolveClassName($node); } if ($node instanceof Node\NullableType) { $node->type = $this->resolveType($node->type); return $node; } if ($node instanceof Node\UnionType || $node instanceof Node\IntersectionType) { foreach ($node->types as &$type) { $type = $this->resolveType($type); } return $node; } return $node; } /** * Resolve name, according to name resolver options. * * @param Name $name Function or constant name to resolve * @param int $type One of Stmt\Use_::TYPE_* * * @return Name Resolved name, or original name with attribute */ protected function resolveName(Name $name, int $type) : Name { if (!$this->replaceNodes) { $resolvedName = $this->nameContext->getResolvedName($name, $type); if (null !== $resolvedName) { $name->setAttribute('resolvedName', $resolvedName); } else { $name->setAttribute('namespacedName', FullyQualified::concat($this->nameContext->getNamespace(), $name, $name->getAttributes())); } return $name; } if ($this->preserveOriginalNames) { // Save the original name $originalName = $name; $name = clone $originalName; $name->setAttribute('originalName', $originalName); } $resolvedName = $this->nameContext->getResolvedName($name, $type); if (null !== $resolvedName) { return $resolvedName; } // unqualified names inside a namespace cannot be resolved at compile-time // add the namespaced version of the name as an attribute $name->setAttribute('namespacedName', FullyQualified::concat($this->nameContext->getNamespace(), $name, $name->getAttributes())); return $name; } protected function resolveClassName(Name $name) { return $this->resolveName($name, Stmt\Use_::TYPE_NORMAL); } protected function addNamespacedName(Node $node) { $node->namespacedName = Name::concat($this->nameContext->getNamespace(), (string) $node->name); } protected function resolveAttrGroups(Node $node) { foreach ($node->attrGroups as $attrGroup) { foreach ($attrGroup->attrs as $attr) { $attr->name = $this->resolveClassName($attr->name); } } } } PK!!F7php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.phpnu[setAttribute('origNode', $origNode); return $node; } } PK!=*ll7php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.phpnu[filterCallback = $filterCallback; } /** * Get found nodes satisfying the filter callback. * * Nodes are returned in pre-order. * * @return Node[] Found nodes */ public function getFoundNodes() : array { return $this->foundNodes; } public function beforeTraverse(array $nodes) { $this->foundNodes = []; return null; } public function enterNode(Node $node) { $filterCallback = $this->filterCallback; if ($filterCallback($node)) { $this->foundNodes[] = $node; } return null; } } PK!+<php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpnu[filterCallback = $filterCallback; } /** * Get found node satisfying the filter callback. * * Returns null if no node satisfies the filter callback. * * @return null|Node Found node (or null if not found) */ public function getFoundNode() { return $this->foundNode; } public function beforeTraverse(array $nodes) { $this->foundNode = null; return null; } public function enterNode(Node $node) { $filterCallback = $this->filterCallback; if ($filterCallback($node)) { $this->foundNode = $node; return NodeTraverser::STOP_TRAVERSAL; } return null; } } PK!80php-parser/lib/PhpParser/NodeVisitorAbstract.phpnu[visitors[] = $visitor; } /** * Removes an added visitor. * * @param NodeVisitor $visitor */ public function removeVisitor(\PhpParser\NodeVisitor $visitor) { foreach ($this->visitors as $index => $storedVisitor) { if ($storedVisitor === $visitor) { unset($this->visitors[$index]); break; } } } /** * Traverses an array of nodes using the registered visitors. * * @param Node[] $nodes Array of nodes * * @return Node[] Traversed array of nodes */ public function traverse(array $nodes) : array { $this->stopTraversal = \false; foreach ($this->visitors as $visitor) { if (null !== ($return = $visitor->beforeTraverse($nodes))) { $nodes = $return; } } $nodes = $this->traverseArray($nodes); foreach ($this->visitors as $visitor) { if (null !== ($return = $visitor->afterTraverse($nodes))) { $nodes = $return; } } return $nodes; } /** * Recursively traverse a node. * * @param Node $node Node to traverse. * * @return Node Result of traversal (may be original node or new one) */ protected function traverseNode(\PhpParser\Node $node) : \PhpParser\Node { foreach ($node->getSubNodeNames() as $name) { $subNode =& $node->{$name}; if (\is_array($subNode)) { $subNode = $this->traverseArray($subNode); if ($this->stopTraversal) { break; } } elseif ($subNode instanceof \PhpParser\Node) { $traverseChildren = \true; $breakVisitorIndex = null; $visitors = $this->getVisitorsForNode($subNode); foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($subNode); if (null !== $return) { if ($return instanceof \PhpParser\Node) { $this->ensureReplacementReasonable($subNode, $return); $subNode = $return; } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { $traverseChildren = \false; } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { $traverseChildren = \false; $breakVisitorIndex = $visitorIndex; break; } elseif (self::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; } else { throw new \LogicException('enterNode() returned invalid value of type ' . \gettype($return)); } } } if ($traverseChildren) { $subNode = $this->traverseNode($subNode); if ($this->stopTraversal) { break; } } foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->leaveNode($subNode); if (null !== $return) { if ($return instanceof \PhpParser\Node) { $this->ensureReplacementReasonable($subNode, $return); $subNode = $return; } elseif (self::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; } elseif (\is_array($return)) { throw new \LogicException('leaveNode() may only return an array ' . 'if the parent structure is an array'); } else { throw new \LogicException('leaveNode() returned invalid value of type ' . \gettype($return)); } } if ($breakVisitorIndex === $visitorIndex) { break; } } } } return $node; } /** * Recursively traverse array (usually of nodes). * * @param array $nodes Array to traverse * * @return array Result of traversal (may be original array or changed one) */ protected function traverseArray(array $nodes) : array { $doNodes = []; foreach ($nodes as $i => &$node) { if ($node instanceof \PhpParser\Node) { $traverseChildren = \true; $breakVisitorIndex = null; $visitors = $this->getVisitorsForNode($node); foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->enterNode($node); if (null !== $return) { if ($return instanceof \PhpParser\Node) { $this->ensureReplacementReasonable($node, $return); $node = $return; } elseif (self::DONT_TRAVERSE_CHILDREN === $return) { $traverseChildren = \false; } elseif (self::DONT_TRAVERSE_CURRENT_AND_CHILDREN === $return) { $traverseChildren = \false; $breakVisitorIndex = $visitorIndex; break; } elseif (self::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; } else { throw new \LogicException('enterNode() returned invalid value of type ' . \gettype($return)); } } } if ($traverseChildren) { $node = $this->traverseNode($node); if ($this->stopTraversal) { break; } } foreach ($visitors as $visitorIndex => $visitor) { $return = $visitor->leaveNode($node); if (null !== $return) { if ($return instanceof \PhpParser\Node) { $this->ensureReplacementReasonable($node, $return); $node = $return; } elseif (\is_array($return)) { $doNodes[] = [$i, $return]; break; } elseif (self::REMOVE_NODE === $return) { $doNodes[] = [$i, []]; break; } elseif (self::STOP_TRAVERSAL === $return) { $this->stopTraversal = \true; break 2; } elseif (\false === $return) { throw new \LogicException('bool(false) return from leaveNode() no longer supported. ' . 'Return NodeTraverser::REMOVE_NODE instead'); } else { throw new \LogicException('leaveNode() returned invalid value of type ' . \gettype($return)); } } if ($breakVisitorIndex === $visitorIndex) { break; } } } elseif (\is_array($node)) { throw new \LogicException('Invalid node structure: Contains nested arrays'); } } if (!empty($doNodes)) { while (list($i, $replace) = \array_pop($doNodes)) { \array_splice($nodes, $i, 1, $replace); } } return $nodes; } /** * @return NodeVisitor[] */ public function getVisitorsForNode(\PhpParser\Node $node) { return $this->visitors; } private function ensureReplacementReasonable($old, $new) { if ($old instanceof \PhpParser\Node\Stmt && $new instanceof \PhpParser\Node\Expr) { throw new \LogicException("Trying to replace statement ({$old->getType()}) " . "with expression ({$new->getType()}). Are you missing a " . "Stmt_Expression wrapper?"); } if ($old instanceof \PhpParser\Node\Expr && $new instanceof \PhpParser\Node\Stmt) { throw new \LogicException("Trying to replace expression ({$old->getType()}) " . "with statement ({$new->getType()})"); } } } PK!C2Ӂ#php-parser/lib/PhpParser/Parser.phpnu[tokens = $tokens; $this->indentMap = $this->calcIndentMap(); } /** * Whether the given position is immediately surrounded by parenthesis. * * @param int $startPos Start position * @param int $endPos End position * * @return bool */ public function haveParens(int $startPos, int $endPos) : bool { return $this->haveTokenImmediatelyBefore($startPos, '(') && $this->haveTokenImmediatelyAfter($endPos, ')'); } /** * Whether the given position is immediately surrounded by braces. * * @param int $startPos Start position * @param int $endPos End position * * @return bool */ public function haveBraces(int $startPos, int $endPos) : bool { return ($this->haveTokenImmediatelyBefore($startPos, '{') || $this->haveTokenImmediatelyBefore($startPos, \T_CURLY_OPEN)) && $this->haveTokenImmediatelyAfter($endPos, '}'); } /** * Check whether the position is directly preceded by a certain token type. * * During this check whitespace and comments are skipped. * * @param int $pos Position before which the token should occur * @param int|string $expectedTokenType Token to check for * * @return bool Whether the expected token was found */ public function haveTokenImmediatelyBefore(int $pos, $expectedTokenType) : bool { $tokens = $this->tokens; $pos--; for (; $pos >= 0; $pos--) { $tokenType = $tokens[$pos][0]; if ($tokenType === $expectedTokenType) { return \true; } if ($tokenType !== \T_WHITESPACE && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { break; } } return \false; } /** * Check whether the position is directly followed by a certain token type. * * During this check whitespace and comments are skipped. * * @param int $pos Position after which the token should occur * @param int|string $expectedTokenType Token to check for * * @return bool Whether the expected token was found */ public function haveTokenImmediatelyAfter(int $pos, $expectedTokenType) : bool { $tokens = $this->tokens; $pos++; for (; $pos < \count($tokens); $pos++) { $tokenType = $tokens[$pos][0]; if ($tokenType === $expectedTokenType) { return \true; } if ($tokenType !== \T_WHITESPACE && $tokenType !== \T_COMMENT && $tokenType !== \T_DOC_COMMENT) { break; } } return \false; } public function skipLeft(int $pos, $skipTokenType) { $tokens = $this->tokens; $pos = $this->skipLeftWhitespace($pos); if ($skipTokenType === \T_WHITESPACE) { return $pos; } if ($tokens[$pos][0] !== $skipTokenType) { // Shouldn't happen. The skip token MUST be there throw new \Exception('Encountered unexpected token'); } $pos--; return $this->skipLeftWhitespace($pos); } public function skipRight(int $pos, $skipTokenType) { $tokens = $this->tokens; $pos = $this->skipRightWhitespace($pos); if ($skipTokenType === \T_WHITESPACE) { return $pos; } if ($tokens[$pos][0] !== $skipTokenType) { // Shouldn't happen. The skip token MUST be there throw new \Exception('Encountered unexpected token'); } $pos++; return $this->skipRightWhitespace($pos); } /** * Return first non-whitespace token position smaller or equal to passed position. * * @param int $pos Token position * @return int Non-whitespace token position */ public function skipLeftWhitespace(int $pos) { $tokens = $this->tokens; for (; $pos >= 0; $pos--) { $type = $tokens[$pos][0]; if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { break; } } return $pos; } /** * Return first non-whitespace position greater or equal to passed position. * * @param int $pos Token position * @return int Non-whitespace token position */ public function skipRightWhitespace(int $pos) { $tokens = $this->tokens; for ($count = \count($tokens); $pos < $count; $pos++) { $type = $tokens[$pos][0]; if ($type !== \T_WHITESPACE && $type !== \T_COMMENT && $type !== \T_DOC_COMMENT) { break; } } return $pos; } public function findRight(int $pos, $findTokenType) { $tokens = $this->tokens; for ($count = \count($tokens); $pos < $count; $pos++) { $type = $tokens[$pos][0]; if ($type === $findTokenType) { return $pos; } } return -1; } /** * Whether the given position range contains a certain token type. * * @param int $startPos Starting position (inclusive) * @param int $endPos Ending position (exclusive) * @param int|string $tokenType Token type to look for * @return bool Whether the token occurs in the given range */ public function haveTokenInRange(int $startPos, int $endPos, $tokenType) { $tokens = $this->tokens; for ($pos = $startPos; $pos < $endPos; $pos++) { if ($tokens[$pos][0] === $tokenType) { return \true; } } return \false; } public function haveBracesInRange(int $startPos, int $endPos) { return $this->haveTokenInRange($startPos, $endPos, '{') || $this->haveTokenInRange($startPos, $endPos, \T_CURLY_OPEN) || $this->haveTokenInRange($startPos, $endPos, '}'); } public function haveTagInRange(int $startPos, int $endPos) : bool { return $this->haveTokenInRange($startPos, $endPos, \T_OPEN_TAG) || $this->haveTokenInRange($startPos, $endPos, \T_CLOSE_TAG); } /** * Get indentation before token position. * * @param int $pos Token position * * @return int Indentation depth (in spaces) */ public function getIndentationBefore(int $pos) : int { return $this->indentMap[$pos]; } /** * Get the code corresponding to a token offset range, optionally adjusted for indentation. * * @param int $from Token start position (inclusive) * @param int $to Token end position (exclusive) * @param int $indent By how much the code should be indented (can be negative as well) * * @return string Code corresponding to token range, adjusted for indentation */ public function getTokenCode(int $from, int $to, int $indent) : string { $tokens = $this->tokens; $result = ''; for ($pos = $from; $pos < $to; $pos++) { $token = $tokens[$pos]; if (\is_array($token)) { $type = $token[0]; $content = $token[1]; if ($type === \T_CONSTANT_ENCAPSED_STRING || $type === \T_ENCAPSED_AND_WHITESPACE) { $result .= $content; } else { // TODO Handle non-space indentation if ($indent < 0) { $result .= \str_replace("\n" . \str_repeat(" ", -$indent), "\n", $content); } elseif ($indent > 0) { $result .= \str_replace("\n", "\n" . \str_repeat(" ", $indent), $content); } else { $result .= $content; } } } else { $result .= $token; } } return $result; } /** * Precalculate the indentation at every token position. * * @return int[] Token position to indentation map */ private function calcIndentMap() { $indentMap = []; $indent = 0; foreach ($this->tokens as $token) { $indentMap[] = $indent; if ($token[0] === \T_WHITESPACE) { $content = $token[1]; $newlinePos = \strrpos($content, "\n"); if (\false !== $newlinePos) { $indent = \strlen($content) - $newlinePos - 1; } } } // Add a sentinel for one past end of the file $indentMap[] = $indent; return $indentMap; } } PK!56Zzz?php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpnu[attrGroups = $attrGroups; $this->flags = $flags; $this->args = $args; $this->extends = $extends; $this->implements = $implements; $this->stmts = $stmts; } public static function fromNewNode(Expr\New_ $newNode) { $class = $newNode->class; \assert($class instanceof Node\Stmt\Class_); // We don't assert that $class->name is null here, to allow consumers to assign unique names // to anonymous classes for their own purposes. We simplify ignore the name here. return new self($class->attrGroups, $class->flags, $newNode->args, $class->extends, $class->implements, $class->stmts, $newNode->getAttributes()); } public function getType() : string { return 'Expr_PrintableNewAnonClass'; } public function getSubNodeNames() : array { return ['attrGroups', 'flags', 'args', 'extends', 'implements', 'stmts']; } } PK!'>;,php-parser/lib/PhpParser/Internal/Differ.phpnu[isEqual = $isEqual; } /** * Calculate diff (edit script) from $old to $new. * * @param array $old Original array * @param array $new New array * * @return DiffElem[] Diff (edit script) */ public function diff(array $old, array $new) { list($trace, $x, $y) = $this->calculateTrace($old, $new); return $this->extractDiff($trace, $x, $y, $old, $new); } /** * Calculate diff, including "replace" operations. * * If a sequence of remove operations is followed by the same number of add operations, these * will be coalesced into replace operations. * * @param array $old Original array * @param array $new New array * * @return DiffElem[] Diff (edit script), including replace operations */ public function diffWithReplacements(array $old, array $new) { return $this->coalesceReplacements($this->diff($old, $new)); } private function calculateTrace(array $a, array $b) { $n = \count($a); $m = \count($b); $max = $n + $m; $v = [1 => 0]; $trace = []; for ($d = 0; $d <= $max; $d++) { $trace[] = $v; for ($k = -$d; $k <= $d; $k += 2) { if ($k === -$d || $k !== $d && $v[$k - 1] < $v[$k + 1]) { $x = $v[$k + 1]; } else { $x = $v[$k - 1] + 1; } $y = $x - $k; while ($x < $n && $y < $m && ($this->isEqual)($a[$x], $b[$y])) { $x++; $y++; } $v[$k] = $x; if ($x >= $n && $y >= $m) { return [$trace, $x, $y]; } } } throw new \Exception('Should not happen'); } private function extractDiff(array $trace, int $x, int $y, array $a, array $b) { $result = []; for ($d = \count($trace) - 1; $d >= 0; $d--) { $v = $trace[$d]; $k = $x - $y; if ($k === -$d || $k !== $d && $v[$k - 1] < $v[$k + 1]) { $prevK = $k + 1; } else { $prevK = $k - 1; } $prevX = $v[$prevK]; $prevY = $prevX - $prevK; while ($x > $prevX && $y > $prevY) { $result[] = new \PhpParser\Internal\DiffElem(\PhpParser\Internal\DiffElem::TYPE_KEEP, $a[$x - 1], $b[$y - 1]); $x--; $y--; } if ($d === 0) { break; } while ($x > $prevX) { $result[] = new \PhpParser\Internal\DiffElem(\PhpParser\Internal\DiffElem::TYPE_REMOVE, $a[$x - 1], null); $x--; } while ($y > $prevY) { $result[] = new \PhpParser\Internal\DiffElem(\PhpParser\Internal\DiffElem::TYPE_ADD, null, $b[$y - 1]); $y--; } } return \array_reverse($result); } /** * Coalesce equal-length sequences of remove+add into a replace operation. * * @param DiffElem[] $diff * @return DiffElem[] */ private function coalesceReplacements(array $diff) { $newDiff = []; $c = \count($diff); for ($i = 0; $i < $c; $i++) { $diffType = $diff[$i]->type; if ($diffType !== \PhpParser\Internal\DiffElem::TYPE_REMOVE) { $newDiff[] = $diff[$i]; continue; } $j = $i; while ($j < $c && $diff[$j]->type === \PhpParser\Internal\DiffElem::TYPE_REMOVE) { $j++; } $k = $j; while ($k < $c && $diff[$k]->type === \PhpParser\Internal\DiffElem::TYPE_ADD) { $k++; } if ($j - $i === $k - $j) { $len = $j - $i; for ($n = 0; $n < $len; $n++) { $newDiff[] = new \PhpParser\Internal\DiffElem(\PhpParser\Internal\DiffElem::TYPE_REPLACE, $diff[$i + $n]->old, $diff[$j + $n]->new); } } else { for (; $i < $k; $i++) { $newDiff[] = $diff[$i]; } } $i = $k - 1; } return $newDiff; } } PK!//.php-parser/lib/PhpParser/Internal/DiffElem.phpnu[type = $type; $this->old = $old; $this->new = $new; } } PK!wӤӤ3php-parser/lib/PhpParser/PrettyPrinter/Standard.phpnu[pAttrGroups($node->attrGroups, \true) . $this->pModifiers($node->flags) . ($node->type ? $this->p($node->type) . ' ' : '') . ($node->byRef ? '&' : '') . ($node->variadic ? '...' : '') . $this->p($node->var) . ($node->default ? ' = ' . $this->p($node->default) : ''); } protected function pArg(Node\Arg $node) { return ($node->name ? $node->name->toString() . ': ' : '') . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); } protected function pVariadicPlaceholder(Node\VariadicPlaceholder $node) { return '...'; } protected function pConst(Node\Const_ $node) { return $node->name . ' = ' . $this->p($node->value); } protected function pNullableType(Node\NullableType $node) { return '?' . $this->p($node->type); } protected function pUnionType(Node\UnionType $node) { $types = []; foreach ($node->types as $typeNode) { if ($typeNode instanceof Node\IntersectionType) { $types[] = '(' . $this->p($typeNode) . ')'; continue; } $types[] = $this->p($typeNode); } return \implode('|', $types); } protected function pIntersectionType(Node\IntersectionType $node) { return $this->pImplode($node->types, '&'); } protected function pIdentifier(Node\Identifier $node) { return $node->name; } protected function pVarLikeIdentifier(Node\VarLikeIdentifier $node) { return '$' . $node->name; } protected function pAttribute(Node\Attribute $node) { return $this->p($node->name) . ($node->args ? '(' . $this->pCommaSeparated($node->args) . ')' : ''); } protected function pAttributeGroup(Node\AttributeGroup $node) { return '#[' . $this->pCommaSeparated($node->attrs) . ']'; } // Names protected function pName(Name $node) { return \implode('\\', $node->parts); } protected function pName_FullyQualified(Name\FullyQualified $node) { return '\\' . \implode('\\', $node->parts); } protected function pName_Relative(Name\Relative $node) { return 'namespace\\' . \implode('\\', $node->parts); } // Magic Constants protected function pScalar_MagicConst_Class(MagicConst\Class_ $node) { return '__CLASS__'; } protected function pScalar_MagicConst_Dir(MagicConst\Dir $node) { return '__DIR__'; } protected function pScalar_MagicConst_File(MagicConst\File $node) { return '__FILE__'; } protected function pScalar_MagicConst_Function(MagicConst\Function_ $node) { return '__FUNCTION__'; } protected function pScalar_MagicConst_Line(MagicConst\Line $node) { return '__LINE__'; } protected function pScalar_MagicConst_Method(MagicConst\Method $node) { return '__METHOD__'; } protected function pScalar_MagicConst_Namespace(MagicConst\Namespace_ $node) { return '__NAMESPACE__'; } protected function pScalar_MagicConst_Trait(MagicConst\Trait_ $node) { return '__TRAIT__'; } // Scalars protected function pScalar_String(Scalar\String_ $node) { $kind = $node->getAttribute('kind', Scalar\String_::KIND_SINGLE_QUOTED); switch ($kind) { case Scalar\String_::KIND_NOWDOC: $label = $node->getAttribute('docLabel'); if ($label && !$this->containsEndLabel($node->value, $label)) { if ($node->value === '') { return "<<<'{$label}'\n{$label}" . $this->docStringEndToken; } return "<<<'{$label}'\n{$node->value}\n{$label}" . $this->docStringEndToken; } /* break missing intentionally */ case Scalar\String_::KIND_SINGLE_QUOTED: return $this->pSingleQuotedString($node->value); case Scalar\String_::KIND_HEREDOC: $label = $node->getAttribute('docLabel'); if ($label && !$this->containsEndLabel($node->value, $label)) { if ($node->value === '') { return "<<<{$label}\n{$label}" . $this->docStringEndToken; } $escaped = $this->escapeString($node->value, null); return "<<<{$label}\n" . $escaped . "\n{$label}" . $this->docStringEndToken; } /* break missing intentionally */ case Scalar\String_::KIND_DOUBLE_QUOTED: return '"' . $this->escapeString($node->value, '"') . '"'; } throw new \Exception('Invalid string kind'); } protected function pScalar_Encapsed(Scalar\Encapsed $node) { if ($node->getAttribute('kind') === Scalar\String_::KIND_HEREDOC) { $label = $node->getAttribute('docLabel'); if ($label && !$this->encapsedContainsEndLabel($node->parts, $label)) { if (\count($node->parts) === 1 && $node->parts[0] instanceof Scalar\EncapsedStringPart && $node->parts[0]->value === '') { return "<<<{$label}\n{$label}" . $this->docStringEndToken; } return "<<<{$label}\n" . $this->pEncapsList($node->parts, null) . "\n{$label}" . $this->docStringEndToken; } } return '"' . $this->pEncapsList($node->parts, '"') . '"'; } protected function pScalar_LNumber(Scalar\LNumber $node) { if ($node->value === -\PHP_INT_MAX - 1) { // PHP_INT_MIN cannot be represented as a literal, // because the sign is not part of the literal return '(-' . \PHP_INT_MAX . '-1)'; } $kind = $node->getAttribute('kind', Scalar\LNumber::KIND_DEC); if (Scalar\LNumber::KIND_DEC === $kind) { return (string) $node->value; } if ($node->value < 0) { $sign = '-'; $str = (string) -$node->value; } else { $sign = ''; $str = (string) $node->value; } switch ($kind) { case Scalar\LNumber::KIND_BIN: return $sign . '0b' . \base_convert($str, 10, 2); case Scalar\LNumber::KIND_OCT: return $sign . '0' . \base_convert($str, 10, 8); case Scalar\LNumber::KIND_HEX: return $sign . '0x' . \base_convert($str, 10, 16); } throw new \Exception('Invalid number kind'); } protected function pScalar_DNumber(Scalar\DNumber $node) { if (!\is_finite($node->value)) { if ($node->value === \INF) { return '\\INF'; } elseif ($node->value === -\INF) { return '-\\INF'; } else { return '\\NAN'; } } // Try to find a short full-precision representation $stringValue = \sprintf('%.16G', $node->value); if ($node->value !== (double) $stringValue) { $stringValue = \sprintf('%.17G', $node->value); } // %G is locale dependent and there exists no locale-independent alternative. We don't want // mess with switching locales here, so let's assume that a comma is the only non-standard // decimal separator we may encounter... $stringValue = \str_replace(',', '.', $stringValue); // ensure that number is really printed as float return \preg_match('/^-?[0-9]+$/', $stringValue) ? $stringValue . '.0' : $stringValue; } protected function pScalar_EncapsedStringPart(Scalar\EncapsedStringPart $node) { throw new \LogicException('Cannot directly print EncapsedStringPart'); } // Assignments protected function pExpr_Assign(Expr\Assign $node) { return $this->pInfixOp(Expr\Assign::class, $node->var, ' = ', $node->expr); } protected function pExpr_AssignRef(Expr\AssignRef $node) { return $this->pInfixOp(Expr\AssignRef::class, $node->var, ' =& ', $node->expr); } protected function pExpr_AssignOp_Plus(AssignOp\Plus $node) { return $this->pInfixOp(AssignOp\Plus::class, $node->var, ' += ', $node->expr); } protected function pExpr_AssignOp_Minus(AssignOp\Minus $node) { return $this->pInfixOp(AssignOp\Minus::class, $node->var, ' -= ', $node->expr); } protected function pExpr_AssignOp_Mul(AssignOp\Mul $node) { return $this->pInfixOp(AssignOp\Mul::class, $node->var, ' *= ', $node->expr); } protected function pExpr_AssignOp_Div(AssignOp\Div $node) { return $this->pInfixOp(AssignOp\Div::class, $node->var, ' /= ', $node->expr); } protected function pExpr_AssignOp_Concat(AssignOp\Concat $node) { return $this->pInfixOp(AssignOp\Concat::class, $node->var, ' .= ', $node->expr); } protected function pExpr_AssignOp_Mod(AssignOp\Mod $node) { return $this->pInfixOp(AssignOp\Mod::class, $node->var, ' %= ', $node->expr); } protected function pExpr_AssignOp_BitwiseAnd(AssignOp\BitwiseAnd $node) { return $this->pInfixOp(AssignOp\BitwiseAnd::class, $node->var, ' &= ', $node->expr); } protected function pExpr_AssignOp_BitwiseOr(AssignOp\BitwiseOr $node) { return $this->pInfixOp(AssignOp\BitwiseOr::class, $node->var, ' |= ', $node->expr); } protected function pExpr_AssignOp_BitwiseXor(AssignOp\BitwiseXor $node) { return $this->pInfixOp(AssignOp\BitwiseXor::class, $node->var, ' ^= ', $node->expr); } protected function pExpr_AssignOp_ShiftLeft(AssignOp\ShiftLeft $node) { return $this->pInfixOp(AssignOp\ShiftLeft::class, $node->var, ' <<= ', $node->expr); } protected function pExpr_AssignOp_ShiftRight(AssignOp\ShiftRight $node) { return $this->pInfixOp(AssignOp\ShiftRight::class, $node->var, ' >>= ', $node->expr); } protected function pExpr_AssignOp_Pow(AssignOp\Pow $node) { return $this->pInfixOp(AssignOp\Pow::class, $node->var, ' **= ', $node->expr); } protected function pExpr_AssignOp_Coalesce(AssignOp\Coalesce $node) { return $this->pInfixOp(AssignOp\Coalesce::class, $node->var, ' ??= ', $node->expr); } // Binary expressions protected function pExpr_BinaryOp_Plus(BinaryOp\Plus $node) { return $this->pInfixOp(BinaryOp\Plus::class, $node->left, ' + ', $node->right); } protected function pExpr_BinaryOp_Minus(BinaryOp\Minus $node) { return $this->pInfixOp(BinaryOp\Minus::class, $node->left, ' - ', $node->right); } protected function pExpr_BinaryOp_Mul(BinaryOp\Mul $node) { return $this->pInfixOp(BinaryOp\Mul::class, $node->left, ' * ', $node->right); } protected function pExpr_BinaryOp_Div(BinaryOp\Div $node) { return $this->pInfixOp(BinaryOp\Div::class, $node->left, ' / ', $node->right); } protected function pExpr_BinaryOp_Concat(BinaryOp\Concat $node) { return $this->pInfixOp(BinaryOp\Concat::class, $node->left, ' . ', $node->right); } protected function pExpr_BinaryOp_Mod(BinaryOp\Mod $node) { return $this->pInfixOp(BinaryOp\Mod::class, $node->left, ' % ', $node->right); } protected function pExpr_BinaryOp_BooleanAnd(BinaryOp\BooleanAnd $node) { return $this->pInfixOp(BinaryOp\BooleanAnd::class, $node->left, ' && ', $node->right); } protected function pExpr_BinaryOp_BooleanOr(BinaryOp\BooleanOr $node) { return $this->pInfixOp(BinaryOp\BooleanOr::class, $node->left, ' || ', $node->right); } protected function pExpr_BinaryOp_BitwiseAnd(BinaryOp\BitwiseAnd $node) { return $this->pInfixOp(BinaryOp\BitwiseAnd::class, $node->left, ' & ', $node->right); } protected function pExpr_BinaryOp_BitwiseOr(BinaryOp\BitwiseOr $node) { return $this->pInfixOp(BinaryOp\BitwiseOr::class, $node->left, ' | ', $node->right); } protected function pExpr_BinaryOp_BitwiseXor(BinaryOp\BitwiseXor $node) { return $this->pInfixOp(BinaryOp\BitwiseXor::class, $node->left, ' ^ ', $node->right); } protected function pExpr_BinaryOp_ShiftLeft(BinaryOp\ShiftLeft $node) { return $this->pInfixOp(BinaryOp\ShiftLeft::class, $node->left, ' << ', $node->right); } protected function pExpr_BinaryOp_ShiftRight(BinaryOp\ShiftRight $node) { return $this->pInfixOp(BinaryOp\ShiftRight::class, $node->left, ' >> ', $node->right); } protected function pExpr_BinaryOp_Pow(BinaryOp\Pow $node) { return $this->pInfixOp(BinaryOp\Pow::class, $node->left, ' ** ', $node->right); } protected function pExpr_BinaryOp_LogicalAnd(BinaryOp\LogicalAnd $node) { return $this->pInfixOp(BinaryOp\LogicalAnd::class, $node->left, ' and ', $node->right); } protected function pExpr_BinaryOp_LogicalOr(BinaryOp\LogicalOr $node) { return $this->pInfixOp(BinaryOp\LogicalOr::class, $node->left, ' or ', $node->right); } protected function pExpr_BinaryOp_LogicalXor(BinaryOp\LogicalXor $node) { return $this->pInfixOp(BinaryOp\LogicalXor::class, $node->left, ' xor ', $node->right); } protected function pExpr_BinaryOp_Equal(BinaryOp\Equal $node) { return $this->pInfixOp(BinaryOp\Equal::class, $node->left, ' == ', $node->right); } protected function pExpr_BinaryOp_NotEqual(BinaryOp\NotEqual $node) { return $this->pInfixOp(BinaryOp\NotEqual::class, $node->left, ' != ', $node->right); } protected function pExpr_BinaryOp_Identical(BinaryOp\Identical $node) { return $this->pInfixOp(BinaryOp\Identical::class, $node->left, ' === ', $node->right); } protected function pExpr_BinaryOp_NotIdentical(BinaryOp\NotIdentical $node) { return $this->pInfixOp(BinaryOp\NotIdentical::class, $node->left, ' !== ', $node->right); } protected function pExpr_BinaryOp_Spaceship(BinaryOp\Spaceship $node) { return $this->pInfixOp(BinaryOp\Spaceship::class, $node->left, ' <=> ', $node->right); } protected function pExpr_BinaryOp_Greater(BinaryOp\Greater $node) { return $this->pInfixOp(BinaryOp\Greater::class, $node->left, ' > ', $node->right); } protected function pExpr_BinaryOp_GreaterOrEqual(BinaryOp\GreaterOrEqual $node) { return $this->pInfixOp(BinaryOp\GreaterOrEqual::class, $node->left, ' >= ', $node->right); } protected function pExpr_BinaryOp_Smaller(BinaryOp\Smaller $node) { return $this->pInfixOp(BinaryOp\Smaller::class, $node->left, ' < ', $node->right); } protected function pExpr_BinaryOp_SmallerOrEqual(BinaryOp\SmallerOrEqual $node) { return $this->pInfixOp(BinaryOp\SmallerOrEqual::class, $node->left, ' <= ', $node->right); } protected function pExpr_BinaryOp_Coalesce(BinaryOp\Coalesce $node) { return $this->pInfixOp(BinaryOp\Coalesce::class, $node->left, ' ?? ', $node->right); } protected function pExpr_Instanceof(Expr\Instanceof_ $node) { list($precedence, $associativity) = $this->precedenceMap[Expr\Instanceof_::class]; return $this->pPrec($node->expr, $precedence, $associativity, -1) . ' instanceof ' . $this->pNewVariable($node->class); } // Unary expressions protected function pExpr_BooleanNot(Expr\BooleanNot $node) { return $this->pPrefixOp(Expr\BooleanNot::class, '!', $node->expr); } protected function pExpr_BitwiseNot(Expr\BitwiseNot $node) { return $this->pPrefixOp(Expr\BitwiseNot::class, '~', $node->expr); } protected function pExpr_UnaryMinus(Expr\UnaryMinus $node) { if ($node->expr instanceof Expr\UnaryMinus || $node->expr instanceof Expr\PreDec) { // Enforce -(-$expr) instead of --$expr return '-(' . $this->p($node->expr) . ')'; } return $this->pPrefixOp(Expr\UnaryMinus::class, '-', $node->expr); } protected function pExpr_UnaryPlus(Expr\UnaryPlus $node) { if ($node->expr instanceof Expr\UnaryPlus || $node->expr instanceof Expr\PreInc) { // Enforce +(+$expr) instead of ++$expr return '+(' . $this->p($node->expr) . ')'; } return $this->pPrefixOp(Expr\UnaryPlus::class, '+', $node->expr); } protected function pExpr_PreInc(Expr\PreInc $node) { return $this->pPrefixOp(Expr\PreInc::class, '++', $node->var); } protected function pExpr_PreDec(Expr\PreDec $node) { return $this->pPrefixOp(Expr\PreDec::class, '--', $node->var); } protected function pExpr_PostInc(Expr\PostInc $node) { return $this->pPostfixOp(Expr\PostInc::class, $node->var, '++'); } protected function pExpr_PostDec(Expr\PostDec $node) { return $this->pPostfixOp(Expr\PostDec::class, $node->var, '--'); } protected function pExpr_ErrorSuppress(Expr\ErrorSuppress $node) { return $this->pPrefixOp(Expr\ErrorSuppress::class, '@', $node->expr); } protected function pExpr_YieldFrom(Expr\YieldFrom $node) { return $this->pPrefixOp(Expr\YieldFrom::class, 'yield from ', $node->expr); } protected function pExpr_Print(Expr\Print_ $node) { return $this->pPrefixOp(Expr\Print_::class, 'print ', $node->expr); } // Casts protected function pExpr_Cast_Int(Cast\Int_ $node) { return $this->pPrefixOp(Cast\Int_::class, '(int) ', $node->expr); } protected function pExpr_Cast_Double(Cast\Double $node) { $kind = $node->getAttribute('kind', Cast\Double::KIND_DOUBLE); if ($kind === Cast\Double::KIND_DOUBLE) { $cast = '(double)'; } elseif ($kind === Cast\Double::KIND_FLOAT) { $cast = '(float)'; } elseif ($kind === Cast\Double::KIND_REAL) { $cast = '(real)'; } return $this->pPrefixOp(Cast\Double::class, $cast . ' ', $node->expr); } protected function pExpr_Cast_String(Cast\String_ $node) { return $this->pPrefixOp(Cast\String_::class, '(string) ', $node->expr); } protected function pExpr_Cast_Array(Cast\Array_ $node) { return $this->pPrefixOp(Cast\Array_::class, '(array) ', $node->expr); } protected function pExpr_Cast_Object(Cast\Object_ $node) { return $this->pPrefixOp(Cast\Object_::class, '(object) ', $node->expr); } protected function pExpr_Cast_Bool(Cast\Bool_ $node) { return $this->pPrefixOp(Cast\Bool_::class, '(bool) ', $node->expr); } protected function pExpr_Cast_Unset(Cast\Unset_ $node) { return $this->pPrefixOp(Cast\Unset_::class, '(unset) ', $node->expr); } // Function calls and similar constructs protected function pExpr_FuncCall(Expr\FuncCall $node) { return $this->pCallLhs($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } protected function pExpr_MethodCall(Expr\MethodCall $node) { return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } protected function pExpr_NullsafeMethodCall(Expr\NullsafeMethodCall $node) { return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } protected function pExpr_StaticCall(Expr\StaticCall $node) { return $this->pStaticDereferenceLhs($node->class) . '::' . ($node->name instanceof Expr ? $node->name instanceof Expr\Variable ? $this->p($node->name) : '{' . $this->p($node->name) . '}' : $node->name) . '(' . $this->pMaybeMultiline($node->args) . ')'; } protected function pExpr_Empty(Expr\Empty_ $node) { return 'empty(' . $this->p($node->expr) . ')'; } protected function pExpr_Isset(Expr\Isset_ $node) { return 'isset(' . $this->pCommaSeparated($node->vars) . ')'; } protected function pExpr_Eval(Expr\Eval_ $node) { return 'eval(' . $this->p($node->expr) . ')'; } protected function pExpr_Include(Expr\Include_ $node) { static $map = [Expr\Include_::TYPE_INCLUDE => 'include', Expr\Include_::TYPE_INCLUDE_ONCE => 'include_once', Expr\Include_::TYPE_REQUIRE => 'require', Expr\Include_::TYPE_REQUIRE_ONCE => 'require_once']; return $map[$node->type] . ' ' . $this->p($node->expr); } protected function pExpr_List(Expr\List_ $node) { return 'list(' . $this->pCommaSeparated($node->items) . ')'; } // Other protected function pExpr_Error(Expr\Error $node) { throw new \LogicException('Cannot pretty-print AST with Error nodes'); } protected function pExpr_Variable(Expr\Variable $node) { if ($node->name instanceof Expr) { return '${' . $this->p($node->name) . '}'; } else { return '$' . $node->name; } } protected function pExpr_Array(Expr\Array_ $node) { $syntax = $node->getAttribute('kind', $this->options['shortArraySyntax'] ? Expr\Array_::KIND_SHORT : Expr\Array_::KIND_LONG); if ($syntax === Expr\Array_::KIND_SHORT) { return '[' . $this->pMaybeMultiline($node->items, \true) . ']'; } else { return 'array(' . $this->pMaybeMultiline($node->items, \true) . ')'; } } protected function pExpr_ArrayItem(Expr\ArrayItem $node) { return (null !== $node->key ? $this->p($node->key) . ' => ' : '') . ($node->byRef ? '&' : '') . ($node->unpack ? '...' : '') . $this->p($node->value); } protected function pExpr_ArrayDimFetch(Expr\ArrayDimFetch $node) { return $this->pDereferenceLhs($node->var) . '[' . (null !== $node->dim ? $this->p($node->dim) : '') . ']'; } protected function pExpr_ConstFetch(Expr\ConstFetch $node) { return $this->p($node->name); } protected function pExpr_ClassConstFetch(Expr\ClassConstFetch $node) { return $this->pStaticDereferenceLhs($node->class) . '::' . $this->pObjectProperty($node->name); } protected function pExpr_PropertyFetch(Expr\PropertyFetch $node) { return $this->pDereferenceLhs($node->var) . '->' . $this->pObjectProperty($node->name); } protected function pExpr_NullsafePropertyFetch(Expr\NullsafePropertyFetch $node) { return $this->pDereferenceLhs($node->var) . '?->' . $this->pObjectProperty($node->name); } protected function pExpr_StaticPropertyFetch(Expr\StaticPropertyFetch $node) { return $this->pStaticDereferenceLhs($node->class) . '::$' . $this->pObjectProperty($node->name); } protected function pExpr_ShellExec(Expr\ShellExec $node) { return '`' . $this->pEncapsList($node->parts, '`') . '`'; } protected function pExpr_Closure(Expr\Closure $node) { return $this->pAttrGroups($node->attrGroups, \true) . ($node->static ? 'static ' : '') . 'function ' . ($node->byRef ? '&' : '') . '(' . $this->pCommaSeparated($node->params) . ')' . (!empty($node->uses) ? ' use(' . $this->pCommaSeparated($node->uses) . ')' : '') . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pExpr_Match(Expr\Match_ $node) { return 'match (' . $this->p($node->cond) . ') {' . $this->pCommaSeparatedMultiline($node->arms, \true) . $this->nl . '}'; } protected function pMatchArm(Node\MatchArm $node) { return ($node->conds ? $this->pCommaSeparated($node->conds) : 'default') . ' => ' . $this->p($node->body); } protected function pExpr_ArrowFunction(Expr\ArrowFunction $node) { return $this->pAttrGroups($node->attrGroups, \true) . ($node->static ? 'static ' : '') . 'fn' . ($node->byRef ? '&' : '') . '(' . $this->pCommaSeparated($node->params) . ')' . (null !== $node->returnType ? ': ' . $this->p($node->returnType) : '') . ' => ' . $this->p($node->expr); } protected function pExpr_ClosureUse(Expr\ClosureUse $node) { return ($node->byRef ? '&' : '') . $this->p($node->var); } protected function pExpr_New(Expr\New_ $node) { if ($node->class instanceof Stmt\Class_) { $args = $node->args ? '(' . $this->pMaybeMultiline($node->args) . ')' : ''; return 'new ' . $this->pClassCommon($node->class, $args); } return 'new ' . $this->pNewVariable($node->class) . '(' . $this->pMaybeMultiline($node->args) . ')'; } protected function pExpr_Clone(Expr\Clone_ $node) { return 'clone ' . $this->p($node->expr); } protected function pExpr_Ternary(Expr\Ternary $node) { // a bit of cheating: we treat the ternary as a binary op where the ?...: part is the operator. // this is okay because the part between ? and : never needs parentheses. return $this->pInfixOp(Expr\Ternary::class, $node->cond, ' ?' . (null !== $node->if ? ' ' . $this->p($node->if) . ' ' : '') . ': ', $node->else); } protected function pExpr_Exit(Expr\Exit_ $node) { $kind = $node->getAttribute('kind', Expr\Exit_::KIND_DIE); return ($kind === Expr\Exit_::KIND_EXIT ? 'exit' : 'die') . (null !== $node->expr ? '(' . $this->p($node->expr) . ')' : ''); } protected function pExpr_Throw(Expr\Throw_ $node) { return 'throw ' . $this->p($node->expr); } protected function pExpr_Yield(Expr\Yield_ $node) { if ($node->value === null) { return 'yield'; } else { // this is a bit ugly, but currently there is no way to detect whether the parentheses are necessary return '(yield ' . ($node->key !== null ? $this->p($node->key) . ' => ' : '') . $this->p($node->value) . ')'; } } // Declarations protected function pStmt_Namespace(Stmt\Namespace_ $node) { if ($this->canUseSemicolonNamespaces) { return 'namespace ' . $this->p($node->name) . ';' . $this->nl . $this->pStmts($node->stmts, \false); } else { return 'namespace' . (null !== $node->name ? ' ' . $this->p($node->name) : '') . ' {' . $this->pStmts($node->stmts) . $this->nl . '}'; } } protected function pStmt_Use(Stmt\Use_ $node) { return 'use ' . $this->pUseType($node->type) . $this->pCommaSeparated($node->uses) . ';'; } protected function pStmt_GroupUse(Stmt\GroupUse $node) { return 'use ' . $this->pUseType($node->type) . $this->pName($node->prefix) . '\\{' . $this->pCommaSeparated($node->uses) . '};'; } protected function pStmt_UseUse(Stmt\UseUse $node) { return $this->pUseType($node->type) . $this->p($node->name) . (null !== $node->alias ? ' as ' . $node->alias : ''); } protected function pUseType($type) { return $type === Stmt\Use_::TYPE_FUNCTION ? 'function ' : ($type === Stmt\Use_::TYPE_CONSTANT ? 'const ' : ''); } protected function pStmt_Interface(Stmt\Interface_ $node) { return $this->pAttrGroups($node->attrGroups) . 'interface ' . $node->name . (!empty($node->extends) ? ' extends ' . $this->pCommaSeparated($node->extends) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Enum(Stmt\Enum_ $node) { return $this->pAttrGroups($node->attrGroups) . 'enum ' . $node->name . ($node->scalarType ? " : {$node->scalarType}" : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Class(Stmt\Class_ $node) { return $this->pClassCommon($node, ' ' . $node->name); } protected function pStmt_Trait(Stmt\Trait_ $node) { return $this->pAttrGroups($node->attrGroups) . 'trait ' . $node->name . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_EnumCase(Stmt\EnumCase $node) { return $this->pAttrGroups($node->attrGroups) . 'case ' . $node->name . ($node->expr ? ' = ' . $this->p($node->expr) : '') . ';'; } protected function pStmt_TraitUse(Stmt\TraitUse $node) { return 'use ' . $this->pCommaSeparated($node->traits) . (empty($node->adaptations) ? ';' : ' {' . $this->pStmts($node->adaptations) . $this->nl . '}'); } protected function pStmt_TraitUseAdaptation_Precedence(Stmt\TraitUseAdaptation\Precedence $node) { return $this->p($node->trait) . '::' . $node->method . ' insteadof ' . $this->pCommaSeparated($node->insteadof) . ';'; } protected function pStmt_TraitUseAdaptation_Alias(Stmt\TraitUseAdaptation\Alias $node) { return (null !== $node->trait ? $this->p($node->trait) . '::' : '') . $node->method . ' as' . (null !== $node->newModifier ? ' ' . \rtrim($this->pModifiers($node->newModifier), ' ') : '') . (null !== $node->newName ? ' ' . $node->newName : '') . ';'; } protected function pStmt_Property(Stmt\Property $node) { return $this->pAttrGroups($node->attrGroups) . (0 === $node->flags ? 'var ' : $this->pModifiers($node->flags)) . ($node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->props) . ';'; } protected function pStmt_PropertyProperty(Stmt\PropertyProperty $node) { return '$' . $node->name . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); } protected function pStmt_ClassMethod(Stmt\ClassMethod $node) { return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pMaybeMultiline($node->params) . ')' . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . (null !== $node->stmts ? $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); } protected function pStmt_ClassConst(Stmt\ClassConst $node) { return $this->pAttrGroups($node->attrGroups) . $this->pModifiers($node->flags) . 'const ' . (null !== $node->type ? $this->p($node->type) . ' ' : '') . $this->pCommaSeparated($node->consts) . ';'; } protected function pStmt_Function(Stmt\Function_ $node) { return $this->pAttrGroups($node->attrGroups) . 'function ' . ($node->byRef ? '&' : '') . $node->name . '(' . $this->pCommaSeparated($node->params) . ')' . (null !== $node->returnType ? ' : ' . $this->p($node->returnType) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Const(Stmt\Const_ $node) { return 'const ' . $this->pCommaSeparated($node->consts) . ';'; } protected function pStmt_Declare(Stmt\Declare_ $node) { return 'declare (' . $this->pCommaSeparated($node->declares) . ')' . (null !== $node->stmts ? ' {' . $this->pStmts($node->stmts) . $this->nl . '}' : ';'); } protected function pStmt_DeclareDeclare(Stmt\DeclareDeclare $node) { return $node->key . '=' . $this->p($node->value); } // Control flow protected function pStmt_If(Stmt\If_ $node) { return 'if (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->elseifs ? ' ' . $this->pImplode($node->elseifs, ' ') : '') . (null !== $node->else ? ' ' . $this->p($node->else) : ''); } protected function pStmt_ElseIf(Stmt\ElseIf_ $node) { return 'elseif (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Else(Stmt\Else_ $node) { return 'else {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_For(Stmt\For_ $node) { return 'for (' . $this->pCommaSeparated($node->init) . ';' . (!empty($node->cond) ? ' ' : '') . $this->pCommaSeparated($node->cond) . ';' . (!empty($node->loop) ? ' ' : '') . $this->pCommaSeparated($node->loop) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Foreach(Stmt\Foreach_ $node) { return 'foreach (' . $this->p($node->expr) . ' as ' . (null !== $node->keyVar ? $this->p($node->keyVar) . ' => ' : '') . ($node->byRef ? '&' : '') . $this->p($node->valueVar) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_While(Stmt\While_ $node) { return 'while (' . $this->p($node->cond) . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Do(Stmt\Do_ $node) { return 'do {' . $this->pStmts($node->stmts) . $this->nl . '} while (' . $this->p($node->cond) . ');'; } protected function pStmt_Switch(Stmt\Switch_ $node) { return 'switch (' . $this->p($node->cond) . ') {' . $this->pStmts($node->cases) . $this->nl . '}'; } protected function pStmt_Case(Stmt\Case_ $node) { return (null !== $node->cond ? 'case ' . $this->p($node->cond) : 'default') . ':' . $this->pStmts($node->stmts); } protected function pStmt_TryCatch(Stmt\TryCatch $node) { return 'try {' . $this->pStmts($node->stmts) . $this->nl . '}' . ($node->catches ? ' ' . $this->pImplode($node->catches, ' ') : '') . ($node->finally !== null ? ' ' . $this->p($node->finally) : ''); } protected function pStmt_Catch(Stmt\Catch_ $node) { return 'catch (' . $this->pImplode($node->types, '|') . ($node->var !== null ? ' ' . $this->p($node->var) : '') . ') {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Finally(Stmt\Finally_ $node) { return 'finally {' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pStmt_Break(Stmt\Break_ $node) { return 'break' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; } protected function pStmt_Continue(Stmt\Continue_ $node) { return 'continue' . ($node->num !== null ? ' ' . $this->p($node->num) : '') . ';'; } protected function pStmt_Return(Stmt\Return_ $node) { return 'return' . (null !== $node->expr ? ' ' . $this->p($node->expr) : '') . ';'; } protected function pStmt_Throw(Stmt\Throw_ $node) { return 'throw ' . $this->p($node->expr) . ';'; } protected function pStmt_Label(Stmt\Label $node) { return $node->name . ':'; } protected function pStmt_Goto(Stmt\Goto_ $node) { return 'goto ' . $node->name . ';'; } // Other protected function pStmt_Expression(Stmt\Expression $node) { return $this->p($node->expr) . ';'; } protected function pStmt_Echo(Stmt\Echo_ $node) { return 'echo ' . $this->pCommaSeparated($node->exprs) . ';'; } protected function pStmt_Static(Stmt\Static_ $node) { return 'static ' . $this->pCommaSeparated($node->vars) . ';'; } protected function pStmt_Global(Stmt\Global_ $node) { return 'global ' . $this->pCommaSeparated($node->vars) . ';'; } protected function pStmt_StaticVar(Stmt\StaticVar $node) { return $this->p($node->var) . (null !== $node->default ? ' = ' . $this->p($node->default) : ''); } protected function pStmt_Unset(Stmt\Unset_ $node) { return 'unset(' . $this->pCommaSeparated($node->vars) . ');'; } protected function pStmt_InlineHTML(Stmt\InlineHTML $node) { $newline = $node->getAttribute('hasLeadingNewline', \true) ? "\n" : ''; return '?>' . $newline . $node->value . 'remaining; } protected function pStmt_Nop(Stmt\Nop $node) { return ''; } // Helpers protected function pClassCommon(Stmt\Class_ $node, $afterClassToken) { return $this->pAttrGroups($node->attrGroups, $node->name === null) . $this->pModifiers($node->flags) . 'class' . $afterClassToken . (null !== $node->extends ? ' extends ' . $this->p($node->extends) : '') . (!empty($node->implements) ? ' implements ' . $this->pCommaSeparated($node->implements) : '') . $this->nl . '{' . $this->pStmts($node->stmts) . $this->nl . '}'; } protected function pObjectProperty($node) { if ($node instanceof Expr) { return '{' . $this->p($node) . '}'; } else { return $node; } } protected function pEncapsList(array $encapsList, $quote) { $return = ''; foreach ($encapsList as $element) { if ($element instanceof Scalar\EncapsedStringPart) { $return .= $this->escapeString($element->value, $quote); } else { $return .= '{' . $this->p($element) . '}'; } } return $return; } protected function pSingleQuotedString(string $string) { return '\'' . \addcslashes($string, '\'\\') . '\''; } protected function escapeString($string, $quote) { if (null === $quote) { // For doc strings, don't escape newlines $escaped = \addcslashes($string, "\t\f\v\$\\"); } else { $escaped = \addcslashes($string, "\n\r\t\f\v\$" . $quote . "\\"); } // Escape control characters and non-UTF-8 characters. // Regex based on https://stackoverflow.com/a/11709412/385378. $regex = '/( [\\x00-\\x08\\x0E-\\x1F] # Control characters | [\\xC0-\\xC1] # Invalid UTF-8 Bytes | [\\xF5-\\xFF] # Invalid UTF-8 Bytes | \\xE0(?=[\\x80-\\x9F]) # Overlong encoding of prior code point | \\xF0(?=[\\x80-\\x8F]) # Overlong encoding of prior code point | [\\xC2-\\xDF](?![\\x80-\\xBF]) # Invalid UTF-8 Sequence Start | [\\xE0-\\xEF](?![\\x80-\\xBF]{2}) # Invalid UTF-8 Sequence Start | [\\xF0-\\xF4](?![\\x80-\\xBF]{3}) # Invalid UTF-8 Sequence Start | (?<=[\\x00-\\x7F\\xF5-\\xFF])[\\x80-\\xBF] # Invalid UTF-8 Sequence Middle | (? $part) { $atStart = $i === 0; $atEnd = $i === \count($parts) - 1; if ($part instanceof Scalar\EncapsedStringPart && $this->containsEndLabel($part->value, $label, $atStart, $atEnd)) { return \true; } } return \false; } protected function pDereferenceLhs(Node $node) { if (!$this->dereferenceLhsRequiresParens($node)) { return $this->p($node); } else { return '(' . $this->p($node) . ')'; } } protected function pStaticDereferenceLhs(Node $node) { if (!$this->staticDereferenceLhsRequiresParens($node)) { return $this->p($node); } else { return '(' . $this->p($node) . ')'; } } protected function pCallLhs(Node $node) { if (!$this->callLhsRequiresParens($node)) { return $this->p($node); } else { return '(' . $this->p($node) . ')'; } } protected function pNewVariable(Node $node) : string { if (!$this->newOperandRequiresParens($node)) { return $this->p($node); } else { return '(' . $this->p($node) . ')'; } } /** * @param Node[] $nodes * @return bool */ protected function hasNodeWithComments(array $nodes) { foreach ($nodes as $node) { if ($node && $node->getComments()) { return \true; } } return \false; } protected function pMaybeMultiline(array $nodes, bool $trailingComma = \false) { if (!$this->hasNodeWithComments($nodes)) { return $this->pCommaSeparated($nodes); } else { return $this->pCommaSeparatedMultiline($nodes, $trailingComma) . $this->nl; } } protected function pAttrGroups(array $nodes, bool $inline = \false) : string { $result = ''; $sep = $inline ? ' ' : $this->nl; foreach ($nodes as $node) { $result .= $this->p($node) . $sep; } return $result; } } PK!i$php-parser/lib/PhpParser/Comment.phpnu[text = $text; $this->startLine = $startLine; $this->startFilePos = $startFilePos; $this->startTokenPos = $startTokenPos; $this->endLine = $endLine; $this->endFilePos = $endFilePos; $this->endTokenPos = $endTokenPos; } /** * Gets the comment text. * * @return string The comment text (including comment delimiters like /*) */ public function getText() : string { return $this->text; } /** * Gets the line number the comment started on. * * @return int Line number (or -1 if not available) */ public function getStartLine() : int { return $this->startLine; } /** * Gets the file offset the comment started on. * * @return int File offset (or -1 if not available) */ public function getStartFilePos() : int { return $this->startFilePos; } /** * Gets the token offset the comment started on. * * @return int Token offset (or -1 if not available) */ public function getStartTokenPos() : int { return $this->startTokenPos; } /** * Gets the line number the comment ends on. * * @return int Line number (or -1 if not available) */ public function getEndLine() : int { return $this->endLine; } /** * Gets the file offset the comment ends on. * * @return int File offset (or -1 if not available) */ public function getEndFilePos() : int { return $this->endFilePos; } /** * Gets the token offset the comment ends on. * * @return int Token offset (or -1 if not available) */ public function getEndTokenPos() : int { return $this->endTokenPos; } /** * Gets the line number the comment started on. * * @deprecated Use getStartLine() instead * * @return int Line number */ public function getLine() : int { return $this->startLine; } /** * Gets the file offset the comment started on. * * @deprecated Use getStartFilePos() instead * * @return int File offset */ public function getFilePos() : int { return $this->startFilePos; } /** * Gets the token offset the comment started on. * * @deprecated Use getStartTokenPos() instead * * @return int Token offset */ public function getTokenPos() : int { return $this->startTokenPos; } /** * Gets the comment text. * * @return string The comment text (including comment delimiters like /*) */ public function __toString() : string { return $this->text; } /** * Gets the reformatted comment text. * * "Reformatted" here means that we try to clean up the whitespace at the * starts of the lines. This is necessary because we receive the comments * without trailing whitespace on the first line, but with trailing whitespace * on all subsequent lines. * * @return mixed|string */ public function getReformattedText() { $text = \trim($this->text); $newlinePos = \strpos($text, "\n"); if (\false === $newlinePos) { // Single line comments don't need further processing return $text; } elseif (\preg_match('((*BSR_ANYCRLF)(*ANYCRLF)^.*(?:\\R\\s+\\*.*)+$)', $text)) { // Multi line comment of the type // // /* // * Some text. // * Some more text. // */ // // is handled by replacing the whitespace sequences before the * by a single space return \preg_replace('(^\\s+\\*)m', ' *', $this->text); } elseif (\preg_match('(^/\\*\\*?\\s*[\\r\\n])', $text) && \preg_match('(\\n(\\s*)\\*/$)', $text, $matches)) { // Multi line comment of the type // // /* // Some text. // Some more text. // */ // // is handled by removing the whitespace sequence on the line before the closing // */ on all lines. So if the last line is " */", then " " is removed at the // start of all lines. return \preg_replace('(^' . \preg_quote($matches[1]) . ')m', '', $text); } elseif (\preg_match('(^/\\*\\*?\\s*(?!\\s))', $text, $matches)) { // Multi line comment of the type // // /* Some text. // Some more text. // Indented text. // Even more text. */ // // is handled by removing the difference between the shortest whitespace prefix on all // lines and the length of the "/* " opening sequence. $prefixLen = $this->getShortestWhitespacePrefixLen(\substr($text, $newlinePos + 1)); $removeLen = $prefixLen - \strlen($matches[0]); return \preg_replace('(^\\s{' . $removeLen . '})m', '', $text); } // No idea how to format this comment, so simply return as is return $text; } /** * Get length of shortest whitespace prefix (at the start of a line). * * If there is a line with no prefix whitespace, 0 is a valid return value. * * @param string $str String to check * @return int Length in characters. Tabs count as single characters. */ private function getShortestWhitespacePrefixLen(string $str) : int { $lines = \explode("\n", $str); $shortestPrefixLen = \INF; foreach ($lines as $line) { \preg_match('(^\\s*)', $line, $matches); $prefixLen = \strlen($matches[0]); if ($prefixLen < $shortestPrefixLen) { $shortestPrefixLen = $prefixLen; } } return $shortestPrefixLen; } /** * @return array * @psalm-return array{nodeType:string, text:mixed, line:mixed, filePos:mixed} */ public function jsonSerialize() : array { // Technically not a node, but we make it look like one anyway $type = $this instanceof \PhpParser\Comment\Doc ? 'Comment_Doc' : 'Comment'; return [ 'nodeType' => $type, 'text' => $this->text, // TODO: Rename these to include "start". 'line' => $this->startLine, 'filePos' => $this->startFilePos, 'tokenPos' => $this->startTokenPos, 'endLine' => $this->endLine, 'endFilePos' => $this->endFilePos, 'endTokenPos' => $this->endTokenPos, ]; } } PK!VV'php-parser/lib/PhpParser/NodeDumper.phpnu[dumpComments = !empty($options['dumpComments']); $this->dumpPositions = !empty($options['dumpPositions']); } /** * Dumps a node or array. * * @param array|Node $node Node or array to dump * @param string|null $code Code corresponding to dumped AST. This only needs to be passed if * the dumpPositions option is enabled and the dumping of node offsets * is desired. * * @return string Dumped value */ public function dump($node, ?string $code = null) : string { $this->code = $code; return $this->dumpRecursive($node); } protected function dumpRecursive($node) { if ($node instanceof \PhpParser\Node) { $r = $node->getType(); if ($this->dumpPositions && null !== ($p = $this->dumpPosition($node))) { $r .= $p; } $r .= '('; foreach ($node->getSubNodeNames() as $key) { $r .= "\n " . $key . ': '; $value = $node->{$key}; if (null === $value) { $r .= 'null'; } elseif (\false === $value) { $r .= 'false'; } elseif (\true === $value) { $r .= 'true'; } elseif (\is_scalar($value)) { if ('flags' === $key || 'newModifier' === $key) { $r .= $this->dumpFlags($value); } elseif ('type' === $key && $node instanceof Include_) { $r .= $this->dumpIncludeType($value); } elseif ('type' === $key && ($node instanceof Use_ || $node instanceof UseUse || $node instanceof GroupUse)) { $r .= $this->dumpUseType($value); } else { $r .= $value; } } else { $r .= \str_replace("\n", "\n ", $this->dumpRecursive($value)); } } if ($this->dumpComments && ($comments = $node->getComments())) { $r .= "\n comments: " . \str_replace("\n", "\n ", $this->dumpRecursive($comments)); } } elseif (\is_array($node)) { $r = 'array('; foreach ($node as $key => $value) { $r .= "\n " . $key . ': '; if (null === $value) { $r .= 'null'; } elseif (\false === $value) { $r .= 'false'; } elseif (\true === $value) { $r .= 'true'; } elseif (\is_scalar($value)) { $r .= $value; } else { $r .= \str_replace("\n", "\n ", $this->dumpRecursive($value)); } } } elseif ($node instanceof \PhpParser\Comment) { return $node->getReformattedText(); } else { throw new \InvalidArgumentException('Can only dump nodes and arrays.'); } return $r . "\n)"; } protected function dumpFlags($flags) { $strs = []; if ($flags & Class_::MODIFIER_PUBLIC) { $strs[] = 'MODIFIER_PUBLIC'; } if ($flags & Class_::MODIFIER_PROTECTED) { $strs[] = 'MODIFIER_PROTECTED'; } if ($flags & Class_::MODIFIER_PRIVATE) { $strs[] = 'MODIFIER_PRIVATE'; } if ($flags & Class_::MODIFIER_ABSTRACT) { $strs[] = 'MODIFIER_ABSTRACT'; } if ($flags & Class_::MODIFIER_STATIC) { $strs[] = 'MODIFIER_STATIC'; } if ($flags & Class_::MODIFIER_FINAL) { $strs[] = 'MODIFIER_FINAL'; } if ($flags & Class_::MODIFIER_READONLY) { $strs[] = 'MODIFIER_READONLY'; } if ($strs) { return \implode(' | ', $strs) . ' (' . $flags . ')'; } else { return $flags; } } protected function dumpIncludeType($type) { $map = [Include_::TYPE_INCLUDE => 'TYPE_INCLUDE', Include_::TYPE_INCLUDE_ONCE => 'TYPE_INCLUDE_ONCE', Include_::TYPE_REQUIRE => 'TYPE_REQUIRE', Include_::TYPE_REQUIRE_ONCE => 'TYPE_REQUIRE_ONCE']; if (!isset($map[$type])) { return $type; } return $map[$type] . ' (' . $type . ')'; } protected function dumpUseType($type) { $map = [Use_::TYPE_UNKNOWN => 'TYPE_UNKNOWN', Use_::TYPE_NORMAL => 'TYPE_NORMAL', Use_::TYPE_FUNCTION => 'TYPE_FUNCTION', Use_::TYPE_CONSTANT => 'TYPE_CONSTANT']; if (!isset($map[$type])) { return $type; } return $map[$type] . ' (' . $type . ')'; } /** * Dump node position, if possible. * * @param Node $node Node for which to dump position * * @return string|null Dump of position, or null if position information not available */ protected function dumpPosition(\PhpParser\Node $node) { if (!$node->hasAttribute('startLine') || !$node->hasAttribute('endLine')) { return null; } $start = $node->getStartLine(); $end = $node->getEndLine(); if ($node->hasAttribute('startFilePos') && $node->hasAttribute('endFilePos') && null !== $this->code) { $start .= ':' . $this->toColumn($this->code, $node->getStartFilePos()); $end .= ':' . $this->toColumn($this->code, $node->getEndFilePos()); } return "[{$start} - {$end}]"; } // Copied from Error class private function toColumn($code, $pos) { if ($pos > \strlen($code)) { throw new \RuntimeException('Invalid position information'); } $lineStartPos = \strrpos($code, "\n", $pos - \strlen($code)); if (\false === $lineStartPos) { $lineStartPos = -1; } return $pos - $lineStartPos; } } PK!v%v%/php-parser/lib/PhpParser/ConstExprEvaluator.phpnu[fallbackEvaluator = $fallbackEvaluator ?? function (Expr $expr) { throw new \PhpParser\ConstExprEvaluationException("Expression of type {$expr->getType()} cannot be evaluated"); }; } /** * Silently evaluates a constant expression into a PHP value. * * Thrown Errors, warnings or notices will be converted into a ConstExprEvaluationException. * The original source of the exception is available through getPrevious(). * * If some part of the expression cannot be evaluated, the fallback evaluator passed to the * constructor will be invoked. By default, if no fallback is provided, an exception of type * ConstExprEvaluationException is thrown. * * See class doc comment for caveats and limitations. * * @param Expr $expr Constant expression to evaluate * @return mixed Result of evaluation * * @throws ConstExprEvaluationException if the expression cannot be evaluated or an error occurred */ public function evaluateSilently(Expr $expr) { \set_error_handler(function ($num, $str, $file, $line) { throw new \ErrorException($str, 0, $num, $file, $line); }); try { return $this->evaluate($expr); } catch (\Throwable $e) { if (!$e instanceof \PhpParser\ConstExprEvaluationException) { $e = new \PhpParser\ConstExprEvaluationException("An error occurred during constant expression evaluation", 0, $e); } throw $e; } finally { \restore_error_handler(); } } /** * Directly evaluates a constant expression into a PHP value. * * May generate Error exceptions, warnings or notices. Use evaluateSilently() to convert these * into a ConstExprEvaluationException. * * If some part of the expression cannot be evaluated, the fallback evaluator passed to the * constructor will be invoked. By default, if no fallback is provided, an exception of type * ConstExprEvaluationException is thrown. * * See class doc comment for caveats and limitations. * * @param Expr $expr Constant expression to evaluate * @return mixed Result of evaluation * * @throws ConstExprEvaluationException if the expression cannot be evaluated */ public function evaluateDirectly(Expr $expr) { return $this->evaluate($expr); } private function evaluate(Expr $expr) { if ($expr instanceof Scalar\LNumber || $expr instanceof Scalar\DNumber || $expr instanceof Scalar\String_) { return $expr->value; } if ($expr instanceof Expr\Array_) { return $this->evaluateArray($expr); } // Unary operators if ($expr instanceof Expr\UnaryPlus) { return +$this->evaluate($expr->expr); } if ($expr instanceof Expr\UnaryMinus) { return -$this->evaluate($expr->expr); } if ($expr instanceof Expr\BooleanNot) { return !$this->evaluate($expr->expr); } if ($expr instanceof Expr\BitwiseNot) { return ~$this->evaluate($expr->expr); } if ($expr instanceof Expr\BinaryOp) { return $this->evaluateBinaryOp($expr); } if ($expr instanceof Expr\Ternary) { return $this->evaluateTernary($expr); } if ($expr instanceof Expr\ArrayDimFetch && null !== $expr->dim) { return $this->evaluate($expr->var)[$this->evaluate($expr->dim)]; } if ($expr instanceof Expr\ConstFetch) { return $this->evaluateConstFetch($expr); } return ($this->fallbackEvaluator)($expr); } private function evaluateArray(Expr\Array_ $expr) { $array = []; foreach ($expr->items as $item) { if (null !== $item->key) { $array[$this->evaluate($item->key)] = $this->evaluate($item->value); } elseif ($item->unpack) { $array = array_merge($array, $this->evaluate($item->value)); } else { $array[] = $this->evaluate($item->value); } } return $array; } private function evaluateTernary(Expr\Ternary $expr) { if (null === $expr->if) { return $this->evaluate($expr->cond) ?: $this->evaluate($expr->else); } return $this->evaluate($expr->cond) ? $this->evaluate($expr->if) : $this->evaluate($expr->else); } private function evaluateBinaryOp(Expr\BinaryOp $expr) { if ($expr instanceof Expr\BinaryOp\Coalesce && $expr->left instanceof Expr\ArrayDimFetch) { // This needs to be special cased to respect BP_VAR_IS fetch semantics return $this->evaluate($expr->left->var)[$this->evaluate($expr->left->dim)] ?? $this->evaluate($expr->right); } // The evaluate() calls are repeated in each branch, because some of the operators are // short-circuiting and evaluating the RHS in advance may be illegal in that case $l = $expr->left; $r = $expr->right; switch ($expr->getOperatorSigil()) { case '&': return $this->evaluate($l) & $this->evaluate($r); case '|': return $this->evaluate($l) | $this->evaluate($r); case '^': return $this->evaluate($l) ^ $this->evaluate($r); case '&&': return $this->evaluate($l) && $this->evaluate($r); case '||': return $this->evaluate($l) || $this->evaluate($r); case '??': return $this->evaluate($l) ?? $this->evaluate($r); case '.': return $this->evaluate($l) . $this->evaluate($r); case '/': return $this->evaluate($l) / $this->evaluate($r); case '==': return $this->evaluate($l) == $this->evaluate($r); case '>': return $this->evaluate($l) > $this->evaluate($r); case '>=': return $this->evaluate($l) >= $this->evaluate($r); case '===': return $this->evaluate($l) === $this->evaluate($r); case 'and': return $this->evaluate($l) and $this->evaluate($r); case 'or': return $this->evaluate($l) or $this->evaluate($r); case 'xor': return $this->evaluate($l) xor $this->evaluate($r); case '-': return $this->evaluate($l) - $this->evaluate($r); case '%': return $this->evaluate($l) % $this->evaluate($r); case '*': return $this->evaluate($l) * $this->evaluate($r); case '!=': return $this->evaluate($l) != $this->evaluate($r); case '!==': return $this->evaluate($l) !== $this->evaluate($r); case '+': return $this->evaluate($l) + $this->evaluate($r); case '**': return $this->evaluate($l) ** $this->evaluate($r); case '<<': return $this->evaluate($l) << $this->evaluate($r); case '>>': return $this->evaluate($l) >> $this->evaluate($r); case '<': return $this->evaluate($l) < $this->evaluate($r); case '<=': return $this->evaluate($l) <= $this->evaluate($r); case '<=>': return $this->evaluate($l) <=> $this->evaluate($r); } throw new \Exception('Should not happen'); } private function evaluateConstFetch(Expr\ConstFetch $expr) { $name = $expr->name->toLowerString(); switch ($name) { case 'null': return null; case 'false': return \false; case 'true': return \true; } return ($this->fallbackEvaluator)($expr); } } PK![W{~~)php-parser/lib/PhpParser/NodeAbstract.phpnu[attributes = $attributes; } /** * Gets line the node started in (alias of getStartLine). * * @return int Start line (or -1 if not available) */ public function getLine() : int { return $this->attributes['startLine'] ?? -1; } /** * Gets line the node started in. * * Requires the 'startLine' attribute to be enabled in the lexer (enabled by default). * * @return int Start line (or -1 if not available) */ public function getStartLine() : int { return $this->attributes['startLine'] ?? -1; } /** * Gets the line the node ended in. * * Requires the 'endLine' attribute to be enabled in the lexer (enabled by default). * * @return int End line (or -1 if not available) */ public function getEndLine() : int { return $this->attributes['endLine'] ?? -1; } /** * Gets the token offset of the first token that is part of this node. * * The offset is an index into the array returned by Lexer::getTokens(). * * Requires the 'startTokenPos' attribute to be enabled in the lexer (DISABLED by default). * * @return int Token start position (or -1 if not available) */ public function getStartTokenPos() : int { return $this->attributes['startTokenPos'] ?? -1; } /** * Gets the token offset of the last token that is part of this node. * * The offset is an index into the array returned by Lexer::getTokens(). * * Requires the 'endTokenPos' attribute to be enabled in the lexer (DISABLED by default). * * @return int Token end position (or -1 if not available) */ public function getEndTokenPos() : int { return $this->attributes['endTokenPos'] ?? -1; } /** * Gets the file offset of the first character that is part of this node. * * Requires the 'startFilePos' attribute to be enabled in the lexer (DISABLED by default). * * @return int File start position (or -1 if not available) */ public function getStartFilePos() : int { return $this->attributes['startFilePos'] ?? -1; } /** * Gets the file offset of the last character that is part of this node. * * Requires the 'endFilePos' attribute to be enabled in the lexer (DISABLED by default). * * @return int File end position (or -1 if not available) */ public function getEndFilePos() : int { return $this->attributes['endFilePos'] ?? -1; } /** * Gets all comments directly preceding this node. * * The comments are also available through the "comments" attribute. * * @return Comment[] */ public function getComments() : array { return $this->attributes['comments'] ?? []; } /** * Gets the doc comment of the node. * * @return null|Comment\Doc Doc comment object or null */ public function getDocComment() { $comments = $this->getComments(); for ($i = \count($comments) - 1; $i >= 0; $i--) { $comment = $comments[$i]; if ($comment instanceof \PhpParser\Comment\Doc) { return $comment; } } return null; } /** * Sets the doc comment of the node. * * This will either replace an existing doc comment or add it to the comments array. * * @param Comment\Doc $docComment Doc comment to set */ public function setDocComment(\PhpParser\Comment\Doc $docComment) { $comments = $this->getComments(); for ($i = \count($comments) - 1; $i >= 0; $i--) { if ($comments[$i] instanceof \PhpParser\Comment\Doc) { // Replace existing doc comment. $comments[$i] = $docComment; $this->setAttribute('comments', $comments); return; } } // Append new doc comment. $comments[] = $docComment; $this->setAttribute('comments', $comments); } public function setAttribute(string $key, $value) { $this->attributes[$key] = $value; } public function hasAttribute(string $key) : bool { return \array_key_exists($key, $this->attributes); } public function getAttribute(string $key, $default = null) { if (\array_key_exists($key, $this->attributes)) { return $this->attributes[$key]; } return $default; } public function getAttributes() : array { return $this->attributes; } public function setAttributes(array $attributes) { $this->attributes = $attributes; } /** * @return array */ public function jsonSerialize() : array { return ['nodeType' => $this->getType()] + \get_object_vars($this); } } PK!||4php-parser/lib/PhpParser/ErrorHandler/Collecting.phpnu[errors[] = $error; } /** * Get collected errors. * * @return Error[] */ public function getErrors() : array { return $this->errors; } /** * Check whether there are any errors. * * @return bool */ public function hasErrors() : bool { return !empty($this->errors); } /** * Reset/clear collected errors. */ public function clearErrors() { $this->errors = []; } } PK!ZAMnn2php-parser/lib/PhpParser/ErrorHandler/Throwing.phpnu[getLexerOptions())); } /** * Create a parser targeting the host PHP version, that is the PHP version we're currently * running on. This parser will not use any token emulation. * * All supported lexer attributes (comments, startLine, endLine, startTokenPos, endTokenPos, * startFilePos, endFilePos) will be enabled. */ public function createForHostVersion() : \PhpParser\Parser { return new Php7(new \PhpParser\Lexer($this->getLexerOptions())); } private function getLexerOptions() : array { return ['usedAttributes' => ['comments', 'startLine', 'endLine', 'startTokenPos', 'endTokenPos', 'startFilePos', 'endFilePos']]; } } PK!CDD D (php-parser/lib/PhpParser/JsonDecoder.phpnu[decodeRecursive($value); } private function decodeRecursive($value) { if (\is_array($value)) { if (isset($value['nodeType'])) { if ($value['nodeType'] === 'Comment' || $value['nodeType'] === 'Comment_Doc') { return $this->decodeComment($value); } return $this->decodeNode($value); } return $this->decodeArray($value); } return $value; } private function decodeArray(array $array) : array { $decodedArray = []; foreach ($array as $key => $value) { $decodedArray[$key] = $this->decodeRecursive($value); } return $decodedArray; } private function decodeNode(array $value) : \PhpParser\Node { $nodeType = $value['nodeType']; if (!\is_string($nodeType)) { throw new \RuntimeException('Node type must be a string'); } $reflectionClass = $this->reflectionClassFromNodeType($nodeType); /** @var Node $node */ $node = $reflectionClass->newInstanceWithoutConstructor(); if (isset($value['attributes'])) { if (!\is_array($value['attributes'])) { throw new \RuntimeException('Attributes must be an array'); } $node->setAttributes($this->decodeArray($value['attributes'])); } foreach ($value as $name => $subNode) { if ($name === 'nodeType' || $name === 'attributes') { continue; } $node->{$name} = $this->decodeRecursive($subNode); } return $node; } private function decodeComment(array $value) : \PhpParser\Comment { $className = $value['nodeType'] === 'Comment' ? \PhpParser\Comment::class : \PhpParser\Comment\Doc::class; if (!isset($value['text'])) { throw new \RuntimeException('Comment must have text'); } return new $className($value['text'], $value['line'] ?? -1, $value['filePos'] ?? -1, $value['tokenPos'] ?? -1, $value['endLine'] ?? -1, $value['endFilePos'] ?? -1, $value['endTokenPos'] ?? -1); } private function reflectionClassFromNodeType(string $nodeType) : \ReflectionClass { if (!isset($this->reflectionClassCache[$nodeType])) { $className = $this->classNameFromNodeType($nodeType); $this->reflectionClassCache[$nodeType] = new \ReflectionClass($className); } return $this->reflectionClassCache[$nodeType]; } private function classNameFromNodeType(string $nodeType) : string { $className = 'PhpParser\\Node\\' . \strtr($nodeType, '_', '\\'); if (\class_exists($className)) { return $className; } $className .= '_'; if (\class_exists($className)) { return $className; } throw new \RuntimeException("Unknown node type \"{$nodeType}\""); } } PK!Ca)7php-parser/312955067da3aaf5cf995776e252824323450273.zipnuIwPK :Q nikic-PHP-Parser-658f1be/UTNo_PK :Q* nikic-PHP-Parser-658f1be/LICENSEUTNo_Rn8+=56m{%& KZ" hHtN㶋]qf޼f:Oiߜf k8[R|r{@r3}`vz݂1e;7=#4cFijm|ytc3OÜ OO s6@3Y8ip!v cCQ`v?S޸úPAh#6RoGГsnf#a\_Ķo`'w8ʄ7;!A uoOCt319;ߍۉWP befDwO`E g£kA᫥@.!s&~2Cx_m鐰yMtBl]̎+W|`^34"(M؃V)5 %!⅑B' 43Y@(JJeLh( lJ7ɗ2f)h q22sUUj(eR9[-p:N zU4.\8 UfRԐ(E_D*)j\0"Lo}Kp'iĖ8^j#Mm2#ABѭZ2nxh1^ZFdaRuedYܠڢXʱ5EjOA4?F"CS,XjC͕F(:kQؔZதy8iGȊbI+ك$ڗbܽ;8۽`PK :QMQk3" nikic-PHP-Parser-658f1be/README.mdUTNo_Xmo7dDR.iP@]lCwc]JbZrWN# Y 3~NYQtۿU:Ku)ݵeY~WZ9׮讱^t~vݦ&w£L1\aXqr azILmeu?'}vU0T>(*u"+18Da\*(#BHQ$9&dQ[Z)s!Gј-(Ruz}A|.3S NwrhЯRLP8C΀$,L sa|#լ apN+D@*n3F=39\P6!LjABYbXB$SO Ҏ9^cUB'Nt:3)r~*VӌE.g2A(0j%k B=L]3]`Y/O잉qn=?d6/glD%Ie:*.e*ޤ֦*hĵP4 3pfO6qJғ)'`~ ˅ml~7 B$.;?~|}$WwH\:ӎ`+̥Iry=Gth|y,ZzkڝZ.W1l=hr@s[,.DؗTX}q_;UԈW ?8JmKw[Nj!p;}u$m) ȥgHA/i(esA۶]i'_g v`T*7zuwE׋񹺪kj׎>mnYU * TeLks&QSZS*uM Ye.  /u"wyw_QFo564ZKΉL@II%^;_T OFyFe E pih&/=\6ZbYMUVXCe?GMV nE/0Lꪩ>Se}<7J,=h ߪDdszI#Ѯc_fBr1?V7^CB@ʒ6cv^q˟5#|MezB감oLp(7o=DEv#7{nHiVMHnM껓7)$]wu֫]q{B箅^w&Cjs8ITJ#x#!6% ]7շJ)7zSC"!O> ;wؚ <زhT;p!>т4K:kjzZHO%Mh:*Uc?$u n*Lx R9 i)m|L*fo:tddq dr kHQP<~_LF_i&Dptɷy4P8SVW-\h{)B5# A" <04P/O?^ǿ+)"':,>𜘭7(^LM>Аl6a'ztY%z=͕f"f2 Ւx>n@:* bd*wnْ_rEZXơD,t--d7BEB2^]^^aЁDk8n%0SI}˥΢8CDպ6\"VI YaDG68FzcI$yadX.e&?b8mlgi#j5]ZQ`lՅG;0 қ6U$F.Nbv!]r؝^&̲|!leia"?DJv#QY.` m" e外뮭xґC;> vǗIS\p9P9Qb>p><23 KИ }:̩?` u`?K`2>u]]ouIqAGL3<[¯mpz6z,t6K9K{78'"oGzdK0\UuES">nȝ-xãSbЙu!]j%ծz]) Lj[M~ }uۑ3ͨyn6HKw`y.\۷=r}!t M?IݡLM%q4MIM&˷c _x;AeY, vB<88yE&@ 8 YnITU"187b7[P$u-_N|͞g]xdwϩVWU5 !n&BUp0>(X1x4a |N[UoDelak"=00\ 3@V,Iv[BWIJ"q+(+glG H6Ю ˻ V['  s,:q5|ur1fMѼ$BEe TrkvI5Irz6cEUǯj$۵rܓLV\yi,Vן>7gusT{Ao&%["Ҋ1"ߘA7(!EK@ot40o}&QUa WF񦩫59w8< @={9}ZƓTWs#TTOО;$< B$("Ve=L]N(cW8z68qG*<.n G@o$%.;:-tG -'HEM~9+&1Tnz{AOolnٳ)n '?z!=?PK :QN0& nikic-PHP-Parser-658f1be/composer.jsonUTNo_SN0+N*Q(EǁđRu,eU66wMq \6}쮽 %,Yr,,fTXmN;sk=\0C5( R{?Dk 2@>cԅqo# ݱ{H@0^TܤqmzRU҇4f6|twt].Xl t]YWႭN Vll:J/nf`'1'h$ƹ_VM(tcvNPD^c^F ?TsGGR~iLYEEb79J:U4/PK :Q! nikic-PHP-Parser-658f1be/grammar/UTNo_PK :QeՒ* nikic-PHP-Parser-658f1be/grammar/README.mdUTNo_T]k@|ׯطŖB PJBi0mIZYOwʮ}t4Nٹ]lC@:BhA}בe |(n~:43Zx^ew "cۣPEVvUk((prh F1&[(ݠ|pxI:h\`Gx-BxPEKצގ%)lP*$bI1>-OD{v7ϲ2#/71$6X:ebͼE1>@<\Qs :R3)G؁曱\- (,P<<_ܞ[$/iڲDb┱t3b,b^*[C_q9/z2Zhe'ɄKfގSprs Z(ۺ{[p~58:ۯtpCpPAR\Iu #`ŢZjGE8T76vSA.F[ W⑋/c z# GhM:[Q?Pwh=l6;骾%r3m:Fbg%ZHHԀ;M\cXW:CLcT zd\K`8Le`ynPK :Q-ɚQ  0 nikic-PHP-Parser-658f1be/grammar/parser.templateUTNo_Vkk0_!piiRu׍Yb"d$Wwr1}GGG?}:Pb[)91!ӝK jkth! ]gnw#_!^/(^%&'7?S֡?j7axOpG # Ym/!uZYZJlK`m–Y!~H6E,v[&7{i 4usqEAq0O'4~ſ CC_+%v{c? N;zwֻ`Qw8]LXiȤ}"Mst=D)-h6]cZdzq{=}l:#-6/& q sӷYSK8U}1t&ِ ²\^ p4Gpz%h69(|:exSԫ Cɯb'ҟiX#J;O0bxU0*UѱDG~lA 0Hl ͪA[Mwdz7 q\] =.IA9; |afG"i hK)RT|t΋o Ouw88.+92珑o[O$p|~ ;<(s4R78]G?y.9mC:@6㇀6Oo8OЁys(?v=/S'|1x( I6rOyxZʟ.eVt jOINAC7@po:8[F7'Gz/J[$/u#~4 /1p@$2HKnѹԝ:ʵTg` Dj"l J rmU r]`NOgh4\vuX&qUÕ G>϶H"W'~cp)cЊi-!3؃oBuPKH /@=~d SR~?Tw4#h\%v>4N3f] xj0א) _IB^d7xh^]zhv:YH?lzx| r^U\Ȼ: #ژ5*Ga6 tD9o _QcN8eu}XQzՄvx: 1Y_W/>WoO=͉@\.X,|sl JKrSH iaeJϰo\(,^(;?(niнkwׄg>7oU V$ʏ%\t8B _Ic-)[7w:y;HŁD@rc2C qL CTAVGJd̨~y71ixQkdPrh~7yBɳMDWm؜"6?RWޏ+UIh)!%ח![p' J)q-LIyKmt.q๔8&q:iVr{U%d$Ufͣ iVƹByM@TO !AeUKM[&&ĎCߓt'ymaj߷pMiܴ d, (e=W8wnS>ti\(|Hx^ZA&V# Z*=eXBb]uwh~Rь*r8ztq U#6fئ(:7Jpx^^CԞF3m Tg3UTlSRZVT(תa /qI8IG%j/ <@l_ yۂE|b{`<)kakQ>ϸai.jβntcQ4 ̇釄 ԱUsʜn(,HEVȇ:s "@N-~Jd?&yѶ0?#U[[u"_) -fV)O;L8&cߑ-q?t12[5\zZ U槫8aE+2];Qv8HiOvG I WڸLi]Yaf0gi1 3Xaƹ]ql0?ffܟ0Ӈ&w]iC!IzPZao)*H\3np  &^&< Rq @50~3DRk-*qK38awpxg:ʲeXvIQcgi} o5bZx6`l^#y֊4wXPcL(ɬ1x&晰!l9qa! 3RBPFD;ϮO(oc*IsѠfpgYsp#ƞF3 ٠\=t#T#uR #^J1\Vtc 8]%۳)pzÉj5ΑMR}ۆT$.z= &R(T•r\^EncIv)Ua/> >&:IA'SӸLqʷ`mTfAs.`V($t~#|}L(&>-InW,aӱc5J @_X?WpȠН(c9$O5D;2Uz㮮`=_nVOtHG]@DxoOz@Nϰو 'RF|BXk#xXkS[UjS6l}DI7( #B}ں)zTA;tin7LQYxX[h{wSCs-cHNp?5Zڹ!Y.O0-v0|Ǯb;]᩾Cv nD=:/wqyd%8s\ UhiҥYʖv͓xpL_Avt M)IL]izؼa9`-ʭq@}Lˇl[FbNN)SR5keWԦ-_b30𢡊@q\(ב;߹ȁ^ZxSla LJ*$zZQM%-ėD76=pY ,0]6 9*lx>O32c1_N,;+%d{ںj Xfe>j̊`U'oSmZE 'TCOqXDR-a0쓝OѰ`D /m</q⼼.zC$[8V d;*_o/!ȆIX<=NcwjXAZ,2}Gh xgQ9twG$]nď\X) PڽPx~]`@? ur# jjӥD?|?E(9F$V#l WbC0󖔽 O,ˮi6a@ؠM,'a3-uq^?ֶp.WHvx|zxt5CPf<ümn{#i@=5Zb\0&͎2ޫӻSkf먞e;QeLE:~rReOffG|m`vVe* F[$[. 뷚8( o5qQڟʶ$?5mI07mI05mI0_4mI0ϚHc)ےtq T`)R`&P%z})ɺTY0(ʶ2RՐlKnN~mκ- X38Y˶4PdƪD-T]ٖA8Tֲ-^HU6(cՑ$շ HU9JUWK%I,,ٱCzfH7G[Qt9א&Br1u͹[1yԸvfr/i.rNV9vSqcx"0#ƒڂ>kXؼZKAl/Մ:Xw4ҞrOZwE'MFWtTꊊ)"$;Hdur}w,(W(a_Ȗ0!1g!9Iez/y*|:PBd:U' Bm{9D a9sJ8d\tDڭ')faZCV[(Y2)-v{:BH=S(sF1,v2(5ѫ.(Nmà]%YSiF@Evj^L_?N-CXJ绬|A5KgmsMO hZ]-͚mT-~߶W) k9Rr~l\;pv%)OD5Xu#Oۇy)d](BK'_p2S|l [Z/k\Rɰ" Wүk^3jLZ+dZOgĿZh)#RSEgLSo PjRoTc3~6c3̶s7R'A^,PQ$FWAjb2p_Cz!KC ;jv]ϋqF鈻Q%UͅM;|@*-!ۺ7`9z2S\/-_J|B//bfh8N QԻ Egxkl ]+Ftnh_Brr,J|nJ7qͶh - *gPK :QIa ' nikic-PHP-Parser-658f1be/grammar/php7.yUTNo_=6WpsIڮ{iOXWYrHS\Zm^$QKRI|ݽ&$!IwH8/ 3hIA {5ޣw))v"71H*G}Uݠ-Θ@&iА&,Y.#F G> y9X䷼<zC "HEܗ;8PIDq 7ȷ. HuHo_.WIǢ t5$8wK}%ޓl1䂔:pmut!mt3k DVk bz4ņ >s"A,Flbo WL8ӯ^!R}Dj轄4?cWKk&j[C_HDv|C$>qa7$135?zy8<|]|JyUKA E2wJ*ſ&9q$j%"(8" opc wBwh"N'S8AI4"ҷ!i N}d g>Ƈvv]V_dҺYC?.EML")#$\R£F f >MAT^oXɺj4.lj^tE+ Mg[Uv qNvz6"`vh@}T/z% .=T} 93ܐu1 Cuk-N t=E *tPh9f`EIH!^ CP{p򿃞~a";H2H}fL` Q#,L\ YVƐY2H*7~C\-ӡB9~subGr P9EhL&'M^*o$;|lӈK|ckT8r W燇/J5A*l.ͳiA5e'tt M ][8mŅ kO1T̯\5bvA]b7,=^m.AN`/?Vx>V1Q}pNx:Mm""$'<3;1hY)9ld"46`N [rq۫"PWp }0KVXv XkBl!BeN7- @3NFыV4F঑N%?mWpat"^gq3] hF{9v#zއ(~EsJO%tidP3T["M!%AZ80BsY26/QFS$w =<++|@ CW%JtĄJ/sg ^yun#/v8i w)>Bh\/0jpqs\2sS" 9ȳ2ZzZͅqcsꗐ3YǪ$$B ,PGV$H AKL.ʡ!QYhܗy9z]nɎ/q4N87d{_/2q@*{rr1!CPs.ERAP3e4_8h\eLqbٜ=VԪ*/V % +m79*EeK+%5b߶ljwܠBJk$c&x˭jKV;OC<Ҥf0F 5e[>t_8LyAVL.O)Q"X, * }!ėR7` 3Y 26QtRTDN)k.B1!C`(2EGZz$85.6и^B6[IL`@ ĭ(]TP{!$)eo7$ [f VY>UG֌bao++kqҥh݅*-oM9XKyVPg_ިiV\7yLKW,ɪ!? T!n!|:_.I0_ѧD̻(1!4iOUđoGS!hy?wz<(I><$C"YD^RĔ<.e#J0K6yH'mӓ3*Kž%"eəNW_ȥGx5qNAW$?<I8),mRTԮՔ4R-ud54n\ *CS6%<@cZxTĢ JMK)4cxZ(dw*N٩$?>t%,IYϯtP=y)€).8Z/T:bO@hxI/  gPrwPٓꦭԝ *h̛mB$_Yb\$:j,-eۚyiY׶ IQ7CA7 I+D[W`Y} oNP;gLtV /uB[YpviN5HyUr؝0cU/Z&?M2V[K LH*1|/&rSdWiyѡNNo kWtJwȅO٪fУKާV5G뜞%sf]rĥfcX6z |Fv[mtبEu^4> ՗x1Hj› ;M@cjwhUփ.&8Zh 8C}? QT43Ud,UeZQѡ˸v))/ZF]yEqU) :/[E~tcY8/V yj8e줕IdSq?ZD Tif91a#sr${hۥ&h+={ݘG뚅,5*wʀ p+ז)PxubZBp $悶sh(*Ϻ Ģȶ\]WGBzp eAJClQS(C_d u'lJu.-G JS!+ܫM?8:J{{ 홮1Qma;Ұo#Xj*8*]3yM2VF(eJЖvYAIHSfW匱zФnkQ"ASyŌw+ە^m?TJ!q\{AI<7nBXgu5\@S7Dvۋd.(vٛ]4WC`rqI_Ën.#xE񔣙j2cAat_=[ZhjBtvZbR4nhNcj^f0 -xhFٌft=ps3Qh0K\$#bܴze7d3Pۯljh.,fEږl Tj;vF-#B-=t0>2δ'=WQzW,@2b K+F4FDoM/gѢ"hpk=vMs4ZєrO khJ 4e.AoM) M) ?7k$hnMHJvL$W ΐ) n'<$YN8I&V́qmtFT [UBy* Dlw/e芵.^ 8ZF_L+ZhAh&z(իaEUwiہ\RAB%w M:A; "c"<y.R YYa]ڀ臕:BtiCpq9~؛"/nPٛtr9=GzBELHAv'l#`! FڅeH> EJᣢ(Gk<z/t -e J*n2%lRq EjUDvzi W*{+7QhrAFV&Qp|I ypA۱5\\CirrQ8gWKqt]6&+;k^y>.3:ėYD Burs- 'N7(SSԬs_U$ +fo> 3J,R9E kH)/̵vKE m svRoO3 vqi& rx6\l7*14YWEu\^E9Gv[Mew <7lW6B5wղl+ nP6ձpxFvZff֫T s"6)ت7(mn Û^iSLGjKF421_ݸfmݺo<҃߻U0iE!wHU_&}_/]#1!k؈ɻXHAx# 4w% Pc ý,x?c^ʪ~ƜTec$pDxwVz$ _m@TꇺkEcJUrhp]LY^Rm;ɤ_ǑoCd,j#ڧ5,W㼤M~)4RCdB$c1adž0. G)e"i1iU1Nv;z@k@hZAЖ*pg^m}8"/l4۠x -aЃ,f|oun{ՍW[$[DD"+n`,r7` UEd7.ZxXyf[`!yR5ݤo.GA9\%`q]ž,"\Fi>e_-`;0ߠQ?7aXg4NA@ aroyn&xI=}?@\nmmEt `]/^,/[u8,ti%gѝM!/J. <(_~= Adk| *aaM@ "Phr:9D8K`prEzY'1y#ڻA`x>,^.E^g %"<Ց/(ыDV8J~ԧ/Q̂+%%b\b՗UYkp\JJZˤ^5} ɪf #AUڟxwBq9g'B ~Ei][$$dɐhWG8JjY?8 fQևd4bz ܱ &.qQ:T*t0qWmFv+!f@810 vat{,va'uҠa/vh;&"M.j$W *  4ݫl4F=n\ G$w=Rfa J^)${:u?Ef՛˚?ٚ]UBW]xi*Ƅ@Z})*QKA5 j/ԴPZgAK5 yf׎)lBгr+ 闥#T[ UBV .FO_bK ҚqO/fHOE ftd; |`&:T.JUP\zTZGϟ%p+f;A]AմgDPa55'C +xCӌ}*~tV;U?,'_w33T\wD6n Yr=RYݐAXYY,g:) o+"WPx莓}~ *㵙<䋢0Cxx nu=~ hȽ%^r|7ŋO FJdB|;'|Цְ(m`9X ۑLr̰(WxtvmV6U`wѠ uT т9â̄Zts)5"ˇ祟k7B Ј.&*tKIpT~OlK 䊫5 (P#ME(Euu%Ujv5ѥQQBMr=Jqza 51m> 뵆`?lOHSVJjT YHjtac%e9xJz(4cyZ\87,7KaͲrX |8Z#,PK :Q 3 nikic-PHP-Parser-658f1be/grammar/rebuildParsers.phpUTNo_iSH;xi |lmQ)H0 &;c9.Yn ] {-u0J?7ZgYgE]>fG':)zi dG0H[H1$6m/b^Z kL.ǷeIKeЊb/T([3KKn"<=r d?pLrQh,R(b_ έwo6-Y;~{k5%As KjhQ!̷=_[ϑ &5'sH #H1`XQdϮ]';VKp%z2w=e,ʝՈs =AO/G_<}%q\''[oz'1qprv~tf~_ aqФ&~tsK?ů}e2iN` Mk5tM`kwl0`Nȑ d nA ? o#.8JH.Gƚ-,{1}q 0x8:1R$Xˆ96Aeti 5uq4tC \3LCr|.F[|vI[_C. Eg iJH"f7DoVLU,6fM@.K\Yѽ"7} f  b8v16?BKj[ޱsx+8Jvϖ'};mא8W>LK)5]d#,jm; %RSqpl9p& dߘ}-t-+U=_/D+*hԢ2"w*tn!FHH##Iuk̀N2uM}.rc^`Tbgs|n̍! vE"CI+ɠL<џ:\ ?*M4 0שoR+뷔4bI$&UmNuO/i8~NޟanA͍7) Ô$J'R Y}bLrB*3 }Nku(!6ѳ=adK\?&ex1<>NΌ\%fdVbQ7"F¿V-W!ߗo(uT>E>/Am `l VS<¡ᱰ 5c=.Á01ԍ<:!0T1R}q2Z*A+}6d)އ~yQ?LQNt%^ 8 NrĽ! q3)"/BgK1D~ y!;TSZ?լbǎǓށ cF0xX5Lmf6U'zIZZM ,!8EFN<+̫JmRh5m=L(17f@JgUÉܝ# In̈́d5[WYmE6s8r5t{eю} cX]._>pLF.I'&eYpMp3У̤P@;JGvw1PecGʀ% <;V _Ϻq2[ ))fB o*4&&1 ь_O|8хdf-yZ@΢F+y- OoC&PPً[;[ ש㿢:֪>fR<<:. 핦I&ELlHj'Ύg~zR#/_>@+51 DdI=epbώ03qX5 ^`Ae|Q F..5qEW1YƦUA2u+2U^_7vcܒrL\qǢ? B#Uܜ9 9'b)8v hH#PK :Qv ) nikic-PHP-Parser-658f1be/grammar/tokens.yUTNo_uUmo6_}Hdki0thdqH*8RKv{,񨬀_ǻ^xs-r8+;iײc"c??vQ^u~j>ݢEUTg>/%;SO{`Οrl?]iwv(GWvm}^7D^݉F/. :@5Zg]- ן'?%#"d\e! 6BBMwdFc0%ޕmBQDwLgQN6yKh l `M’_h5!ZWQԃ7w@~^  @9_"[l!*1y ƶR $Ϛf8 r7I~؃:,KPn]3gr䰥fdHcꑮ" `k*‚ 8O0c2OIU 0ACsYqxIAMgBASRDp`* Y?B8$H"˹_H M 4Aa3IMxd aHnKɸ%Jfw-[^Z/0^w9Ԏ`*uB+"Q3kՆи0sp:lM<ӤR/x#U[`y;-­SAiOFmIG eHn!>R4x4 T5/:_PbSVJ\Dvm@UKiy߷߳iahդgϪIgyQA ,~i+PXHL#sa1:3UMZz 8/F+֙v&0⮚- ,T|4H)*+lao$rL= N[PK :Q nikic-PHP-Parser-658f1be/lib/UTNo_PK :Q' nikic-PHP-Parser-658f1be/lib/PhpParser/UTNo_PK :Qm2 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder.phpUTNo_UA 0D9,.,nx)^j~~"4ԅfGOfLEF۲Q' }9:!BJ]UQJH$psOg pSWc7Y!:#vvx,.Q_PK :Q/ nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/UTNo_PK :QFÛlN 9 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Class_.phpUTNo_VIO@W(@{MڰH"'E{M3c-YlO6ym[!AL8,SSZ$T$pȯ  yoTArє^e!_[H􏨄w Q4pɲ<44v=6OK>Eb1Mh*dEdDW=# FA I6ğHd*YX poO=8H4%`(T#Q sC(!@.1ʇA1YQ`Nw"Czr/S/+l", x2y=A#BK 0 ,c/8DqB5YN& $ Y"Fv@M߱tp|;&9KIn̜hoIr[NeR&VW6*k*{a.OX"Vzp[3$|N͞\f&vM?O63jvVtNj36ki}zio :kvL>&.VHTT<:,"{c7sP.x)}e6gc@s.m Es. nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Declaration.phpUTNo_SN0+Pi%@\[ʳʭ b)q,Pٴ+>Ύ77w>`Pg*`LwydENH^iUW*f|-i??~`Ϙy $h},뢊m>o+Y>Hܖ ؼt}ͬtWƬ9xDr鴾!ˌbōAvPCpQU;28qjƶ pd5I|n⡝ 4YUKQ֩4Tvuq{Ry6WkRР,-ipO uYj$D݆@^'\,{0.~@7)ߪa=\rOJI ZsCθ[6yO4?PJ{t'S`)ܢ99g ;b>:6: S 4NhBot6Ǧ(5ܑw ІTASA"q /u ! #h%:=Ҩ=!ژy;l?fT+Nl$T; 8v;wO_t F˲8acCY6[LH5a|BKfؒ!|彗dޢb)|02XYxAM\M" X8zNb|6fEQoglİOjnʊT)f۸Qo @PLdi,Ӱ-%h"74ڍ olg; CW@}xǐ b`LbJfe]Q%5ýȋ=fӡ]ox,PK :Q3`m< nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Function_.phpUTNo_}Tn0 +x(;HW,mCQt%AXt#Ԗ mQ;vZz|||:T 1ؒͅQ)B,Hm%RC(EU.mm{c yoJbTS k[SR&ԲP/OeJ”P…-3ZXz˼j:0{Ђ!}JQH?J~ T\n)>Sw./6RUJ'Pw4;_k? '4f툳@Jrd2ɇVp7ث8ӿz.|KS\^~3Ywb3c:]pn'W?lɍ#N`k)נP[ LOMu/pݹ)ޯ !: &#jFJ|Cng ~5}I;?PK :Q!= nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Interface_.phpUTNo_Uo0~8UL$I[Um *d ؑg'$Nh:i(>|y>s1HDOiz9[6pYpL*OE()Z(g}~=miRuw"3MJ)5ʈ8ly%t"ɥh a-jgtr` Ҍp:Y^^DQ㐜¶,~Rm: |W2#t @u`ZR)i@TT %,@{.8QW76鬀JLH)~O&asYӢ&Qtaac IED*J$lW)3ymZ8,si3ͫۑik.d7dV#UڛǭϘ!¨[2 sY [Ikc ,VcZZG:6kJ"(kR`&za\mm %¿ ?%ҴY[EhrW7L^JA_G=]̍=x9Ix;hu1P/iv*!󵣉I},{οڎT+;G*ѫsV-GP3'_IɎ n;n CcFﶠi PK :QDb 9 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Method.phpUTNo_WQo0~WܤJ KW!A KI.jDӖﳝBժ>w#"p G#b!ZRa$8"6ċ&݄rą<'{:xhm>%81 /t2'AlAC6wX[D<h tLqm]b0̩:\s~bCY>K~:81Rv˴/Y@wNPUK0;Eg Omp2aC&$0yj3NoExc>&w;#Q$Y@%¤ 7 u@J^-%f`wi3qqP"7 P6Ir8ɯhثeMSO%wD%8< wuީ;03c}"K Flq2e:6XZ1F=0|(\QhcRa," O7d#Zko>WՠNwfM;=VM"_64bUx i2⟬vLW[q5!l4}a8PȔZM!HPU(% ͢|yd~{$F¨Xٝ |s{,,TMuLjhN lK'_~BYBڹQ5Q ؀VT|r4v#){)nWⵅt&^jZ ׽cW|9/9>WPK :Qb!= nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Namespace_.phpUTNo_}Sn0 , zkR7NEvK@F-+ɿMA5@b %RO6Hm%R cь%~uv#߾iOWhs) bh&d-<'߄ZZx \RGTF} B8d!h3v`s,X֤/6;?y7P2IiRȜN={LR3K)sJ3eotI4mnKS\ѢB]rO^%6@MG4/Z; o,vTr 9kAM@;%9Fh2vs:n$,-}4jY 62%0i@G{5P޿:$_.9_ُG.g[&nxe [FPK :Q}?Ȣ 8 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Param.phpUTNo_VMo1+FBIRPJrBB; Vޕ%&c.RZǼy<E1r4FjԮs4AX&gaGLԓB5>[9j{H5Hs)*kQZZ@#יEn13ƘBZ*/]Z2 KL.D"P?UȄ$)gg݋]9[cB @p`;'(< ]Y4 wE wՙ?dj^. TU&LRIg0 n&TJ8 a/aMxً;R,,LI$#g9xv4B2:(S$Nd!bZ# sra+PtʤδFF3zn'W覕GGju׆`c+!Mn؅Ξ@LfsoVsWΔ,Jsf@ݼ.g _S[@3P'~`)0J1[t)=S =}[öp 9y+2k fҺ\oPK :QI ; nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Property.phpUTNo_Vn@}+RJVT܀HMb7/iN{g|6Q¾ vv93ޝ'2 Mq"SCQCQL}GȧZGWtCQzX8[ v|I͆uE6O?*@1xAFu?-@)Ђ=_WwmEЇGU6]A6LX;8g\zdb9*, 82$EAz$;y2Wh`/"sORx+85Qp)83eM^gn +J_"N|"zv!m"& ~=:Ff``x_ qs=#0݆a!6)K)JٜVӠp}ϭṛ} lf)K鋗#*UOn SHaDIme24詘niׂUVgadHD&MwnA=sa|Pєn^eZ-䞢ti0 'ɣ[VUj9 ׭\-RYi4V;+c/PK :QjB %; nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/TraitUse.phpUTNo_T]o0}ϯHT-c &OTyMc)}Cm;vZ'*xt}|}y{ y4䴦_ śl$5(n uôARO?cPu#pF+,1cV3I-HV k2& إtC x l!gfQ##4ڃj0=bUѽF=9 +hrF&?ڇRrۚ;V^sˍt)t+o,C^@L:BX-6[;%d߿ЌiVמ;OAZK0V [#ԹM]vԫHXR/咼|C?Z[qNpv+H##nǼ!}AyqjKOǪ5ipt0 E_.HcΈ /nz6H,19t0%g^sPK :QzXE nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/TraitUseAdaptation.phpUTNo_WnF}WL i(WMA؊`(Z7.^DR#~($p/s̞.fb1TjP(3 ,ق b!Qfs99F ٜ!vnTrLJX խI2OqaN3z4 ,8c9=Mnsˋ]3&X &jsʗo:op#wDYHa50#vYqw`'q{6Ay wܢk}n6`DM]aT1,f @*JwaIIK`ВYJ]+g#B*w\QƻIafG-riL1iMLw'|i3^{WCКUsw>R)^amzĭ*f:Osq/PK :QT@BD9 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Trait_.phpUTNo_TM0+F+*v+CZ Pd 8=B[@BhPx޼yTh iR@? "DxLG Rj?{: F׿(#R IPE8Nd9aHҚu796WH3$NA7^ N "Աc[u>t:`X!ծ #lꄻJMeqB/A+(CP>TJ5Dۅ0o+rjSĽ &md߫>,(E]TjU1s H5*V͋s qZʨQU .cyyE.m6\g":Ngj< $vЍV+q=:8pws {ɡDϠ C,$Ste1L<7J^O z]7e!kKȜߪ3ݻIsN#R䄦 uw*|nԛj2%G?Ύ&מ@2P |N.>Nay& t~l@w4ngmr:=O/e >(I٩hJif&S<>nMsZJ9}$CT_:M^^p4'ory,KW+C,SЛ!*A7lx6m+bY"˗r%܏^Q? ?`>wI|-f+ܪ5Գ\CβɬuF#l@!KYeN}1rl)@ڽ좚/1!ZEG`uJ|N@ S]^y #Zq31rD.,r݌ 9Tzqp0nZ]^$CE=VX8$|$8>4,mIcHFl:5W\0'NU'ҷ@eqwRÔR[{@ aBN9HꝼWmgiq4GGsYvd%@v-Eg݈k^V`ė)ZH(V',h_RXp͐.1/ۢM]at8eAXٓ C9P3&e2BfoSQ K){Z3WxLml[VK 8)e=ɸZ/VCuiyp1W_A~5E[argBl0+cBO*Hiڶ wսgSv}[m V}PS 'c_]##ϗxF@W7 !S-sq9i*\WWJD;ƑXgEvޓ2tHєQz7CB;{T G?**FVzHwDo4rX7`jTYO-u]v'}王'mm]~yaY辧\Sj hr` Z^JO?PK :QK#9 nikic-PHP-Parser-658f1be/lib/PhpParser/BuilderHelpers.phpUTNo_ZKs6W3Sv8:uNjڸ!x 5G.@lP^BovP~8ɖ \C_]LWGBf2s)r߳i FZp)(hXEGi`tUI&qtxp0bbJ˗ܰ!RD% SK8D K X`U0;KOl*Utm('17 $yh7B2HV)Ƴ@FZ-K-}LC/2\ڃ;X;U/N#% v, >fajrPڼ='W3)Q^v+ iaݖ\ b䚲B~;箫y8Ð g+vTc 9b)qZmŬ=J(G5b܋0BpL$(JoQOEѠy8DS5G%y׬1ܓD{Z,1zOD`?ߊXD/C:RDvT EnсIiSr [NO ]zb֏wl$oFچC]{:NOB~.)'pҠ4Z!8=R`EfRtXͱ6&v;U&oK!UF1eOyf^]&Wd޸kX )mv WME cLr-8_g)txCg CH`KKʊ^s; k[]j VvCxWx;k,I8qWN[GD+SQs0Wqz+]:NEwFkT505]*~P}:ު|A֏%T&9鳾hž+A lorē*79a^?'Ԧw\ p3J+8'@ФOtAic=ٿT?ɳ89Y3 /Pc>SձV[,JYi2̩e*f tJpCLɓƚItfd B+p] 4Bl$VCswŠbJ3KܓBuMrx㺕H5P~>qut0\ܗP6LQ ZuG~PK :Q]5+z2 nikic-PHP-Parser-658f1be/lib/PhpParser/Comment.phpUTNo_YQo6~U'i^%C P-c-R/ߑ%J-I"}wd, l-Qh ">yrFS)5c` $y%ҐF?tAG<?dp5EFmȠ}4K~mXЪ)ĩJw]rqR`0?&41d1)kj 3 8 $ o 6L)$COI!66)B |6}<.ҳcO'YL|mg\g;tTJ,_4Ț㥩j`LEhMR3$lW*c֤m{3b -LkKK\Ϛx3µb++`J$nZIC $ʤ"]"3(|1GpdIU6usf=X(1AH鲐vނa-ls\ '=b^әL-4"S""Ot6rMuCر8p iqYOKﱾ%3:p<K*b <*ʷ/ 8w瞻 #sby5 仍tam 1O7J5lJ!zwD&% Nt%qޕP"t,ܮ5:0F|F5a﹞{ z yD=s?5 ksM,IW,HvC MMR`_+TjT .3[iEQb/'=h]+K_W+läcrcBj3ͱ -mXy Mb'J٣nĒRSWbα CfXCg»H%T .I7}P\PnGkMI^aǟgFΑk}Ӟ_3_-+?4bߋƣk$9/J|!; ېpD'X@ekڨmnѬXldaYy"bEtĸTZFa`śE8'GUCF2}c H҉9 ÊVix'{M,\=$K"#{/3ޛw,ԟЈ8Uz˟-%tZyI}Yc'^ߴi-JO}uD7?tYqK(59$ǘK:#UHU>R63}շ/ZZr%sX@e.T'px 1g99FraH}TIuXN1g/F/'dPNv֘Qj ^lT*&֯."!9aP !D_qKP_-JÀ"*+ۇ|EKE[Z<]]l12DPK :Q/ nikic-PHP-Parser-658f1be/lib/PhpParser/Comment/UTNo_PK :QXg6 nikic-PHP-Parser-658f1be/lib/PhpParser/Comment/Doc.phpUTNo_/(PHIMI,J(.)L./,H-5ԴKM-.HLNU(H,*N-qM+u+'+V+`(PK :Qo 5NVG nikic-PHP-Parser-658f1be/lib/PhpParser/ConstExprEvaluationException.phpUTNo_/(KM-.HLNU(H,*N-JI,.Vp+.q((r-K)M,sHN-1R+JRRbB\յ\PK :Q>~(#= nikic-PHP-Parser-658f1be/lib/PhpParser/ConstExprEvaluator.phpUTNo_ZYo7~ׯՑs*rӗ5ݑDZ.HdN{g="oh7YZxz_yz_sm@%rQpw㓚7G `X"cydZ0FJ o\* a!,D!3]`9&d[aW*lhM{`d^bL-%.3ByF "ڨ^[qm®8>)ĝGB?Йå μ@rcwt΢ub,Fl JJU\5/4wRoȇvY$!*;!)h d8J!S42zĘ_=]LX r^0U%PCuYB,IEn$X"rwRH$X ) bâ DZ`,]!Ю%p/>{ä¬:/=P)P'`$Z{+2GxyU{SaC7)6H Uה>JZaD.us.%#sM IEY8 n2"@VW:.r: Zp:kէ:Չ֬,t(OFWJ(F쭡UbQdp>[[]pa *n܍M(nS8$ و]i0V9dJZJdF%[Ǡ)"M1%<^[rӅz0,Liď V\IC!Yi8{5 V(=(!EihpESD=_/zH}2) ?Ջ;zoNfz(44 MU>cG$i7?dts]vܻ+ w?NK51q3TLdnŵLL/j3fx F]Ok$裲 N.a@}uy)(~j&n+f]iLirVSbNӼB3cPtx|[D4e i~74.fָ֧Oucc8}*)\?v|z8184jz*\Mt~qK4۴,kxZU)א]lzNi6=;.D=A[Xy{kOH(Q}w{^Q}pM%Uلw|-X(dDJ8:; j\r JAoQxz]5quq85Ľ/d BKf=Agng\ş!%ْ;9d'zz OSd>>v`uyفeu xXibͺ5ko9cN^ ҎE㉥tJ{ZP+y Q뤫N뤫NE/Q7dҁ5gvukIWMLkb2 cU&Aq&;xCs.~R5tw>ڂNŐCr 0bN~PwyPK :Q#0 nikic-PHP-Parser-658f1be/lib/PhpParser/Error.phpUTNo_Xn6}WLXyݬA.Abv(XH*NͿwxхr[~-qs ό28#FJKGS"s u{>G{E>sS{/oҮP}ohLۼ E=b |f4 Exyn.awv1L$T!\&Q]ڬ=~1mIk]t ,>_7[.iW}{mRycNv:ͭr0jr)odW=d/᱉3VMW[Q:x|n{(úf,zHƕkM2 g~<'L&Kx93seӨm\Q&"79bWoiEmhUٿl&4rɮ5_x9Wt/?/SD O_no[(&M΢D1>8,4܅t⨅f>9,2)~I\P#͑C&`9ܷ{>cJV,bjLĚ Ɂx4 Mp5#`jצ-/(+S/hH@OE#Ouմ!LIH'uyQl$QBex9ws㩩+6s<ߺu u# 0] 01Z+YSȽkaɢ,YG 6鲳Y>J9pӈׯYBP0Ryn-֓Er,CƆp\RWTֿPK :Q CU7M nikic-PHP-Parser-658f1be/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpUTNo_UMo@+D$Ф%BJ-f0V]w? (5T.6o̼RkZrV*Cm>VZeLu=Sֱ}=[Jܙ%OO؞Ya]8Ұ@/3;ZȯVVʟזA)tNx~G7+)m2jpb4aQ@Scu˴)L<;9T/0vXfpYete82xEJcIғu9VAg249)k.sܚ Ѹ+T-x|1bC]č^2M1-1]H(@T!mÓîL ]u:N f9z{XYSᮈnucJ7w_GK: ` S׎SDɄ~1-?hײeYHikV%mͲ.+rMA |D[Y6lt,kȉ k-ײd\$`5Ar\Kd׌o}g85)~;}p:NAx=`Gt) W7\߇P 1J1 DyuN<PK :QfU<"? nikic-PHP-Parser-658f1be/lib/PhpParser/Internal/TokenStream.phpUTNo_ZQS8~W1Lc KBe@d>'PJmٱM]S?@Wշ߮$ ԋcKHbeJ|S&Vtepba߸4El Pytu c`׬ 6WQZA _W)?c6v.b/qPBaPπOj8#F C ZMnd O8-(7ڲv/GĺFW*T´ =}@Q9N~h$(Rxk[xԜUl3)\k/p97[En 4Ahk@KV~I^ ccJ4Rka.5eZ2>0Wz26X"b- UH6HUnN<r?gɇh,aǎ^a٪5@k[4&qzzx  #{謃] 5H,Y24Ty6a; {tg60cJ_]]Z<ۜO6'ҦYoviM׶tFg#{̩M#}1TbzCC,V痵V-_Tڼ-A󹕢y}M= K;mau)ݥbOC=e3wQ@ZZm2:TyA'pCx*tەZZ٥JMQV bvx5슏>_RԥbF]uÈ6x|YoI ˜^J "fAsE~'g$azq+L܆SIVJO @k_ooS^V!4k+)ׂ0NFE;OFD(&䣩|Gpʕ;efGQrgJP9`P<: pnЄd22"Boop]Łc̮XUi86ۋr y)1ӌ*AS05xX勇u6D[zOQShVDl!*kU23c=6Y3M%uJBsBxGSt+§Mgi D;TTp_sTnq8`s0ƺ1u4ڰZ2)/8{Ӛe![FރgxE%!fQMbt-FAhh8cۙERӔpe^nMu3mY0wtqg~֪ /RqՖVwܒ5T_HEк t6ǡY][r憈-XI ]}>jܻo长\֟GJhTϽkZi,ᨃ]Q/o:=vlc+i\W>KF"FCp<fY<rQ񾞘sߑӉ<6?5vM8n4{/PK :QUՁX0 nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer.phpUTNo_oMjZ`ĂyN#XTG'!Nzt-%V֍0X 3I1Ǔqwtt nd~O7Uw0a'w>t.7θ{dGɿ})͙.@9ھǘ{AB4KYB?x |/Fђ۲q>s}NKR:ip d^֝[]b jmL-ԍ[4"BBN \δ+P_-S 4-HZG%" >YLICh@`sq6q {~S=^rs(t tR(-]j eEx>0z =KnKύG=[;~)1;Li~&c\6z˗7s 9e8:Ӫiħf+"$&۴__fT?s 7^mBa&LAXa]041L<8 od/7L.W}!`8M ϸNQ e^{ Z"hhİTg8(C҄0PB4ȫě=@lVd,sy`hLcBUT&/>n[ZÚiH&3a</-s xuu9<>xH_,/r׹|+h,jHT{S@ 1Uь^dbBpe1_|ㅏO+`nxj4k|}?AO d&x捵"g/wPKvHf .lx0^RlDzp UnCe-be '+86a&f'LuL,35OldۣNǾ(&bҰ`5 3\\'UI XԵ6ٝE᮱ӟ٭'V&P CZD|"v=:B,V\>UDă na*a)6^b@g9ok7Hn 8m  "'wbAJ^~%)eB&A]ko_׶?֨jNzJehm*Kֽ򺻁S{4eS@vyكyꁼ&d#25m0Jg _>a6EZcKы  L_(y[ÂB2Bd%pS2L(  cF_`SB4&8zȂFa0#[ePIckй"5 -7~4^E#4Oe _0ASFGhi,g<:ٰJ'Jg*4܄*{@1ͧyC\C8'Is![+yVvCbJ(Q+tC!dj%e`+9?lް#,z9ITZB}RtϏ٢^{[𿸱MuoZUG{ } hzpV:D"e^3@8lϲg.Vd*z2ԁBy\RLXB2#/ b$MZN,n: *mmvRQb9Hx3gzD*#CYd Q8` "IzlM"h;c{pHqK+7oZjDV8} aB<_74hih:נPn><ozE$x|Β8 >H&a塕i [/-Ɗ;O3YgQ\Xun 4fUgk)w\j!=*:(x|rN7 楔H4Ձp96M)p (|rl([akjd$OrTZ5XDԂ/m{y4JSzǽQඑ_2[ҧ#pM&˕Pjbt!vsNU/m62`]D\'ީaiO>8d-:# MX(B M$)@@a0- a.tԭ@`FGFׅvU#u;&fwE#0)&CsMnں(:d;ͤ [Q:ukc.=^ +좖o-.FvDoe&pŞRT8l)Mb|yR%Uq嚕]5WƨVV Z~ %29%`$Rր\OH^tA%7" hS&=Pe Az]sL_T|Bf4Y[eJ-,x쌑N)(כН%- "y'rǕ+:v0Jr"w:/#{@pBBSE*möPթ'2y3V M9=j__ݣ N=`\a K^(?΅VT `h"f_5"(YY`\[UfUJڰރ`1O`TgL0b(|C<}<@&F$3/)F1"UzE(Bx9Z jjf[Bƪ+ðp>bHJZEb2Ћ$e`َqem_.3$mBH #슉F;"Oa/XQ/O/h$łc#Xu)RJN0h(`E.@`1aXRA2Ep57yZU1a6jPlf15bZu+SMVN&evԺ )#XzVVQdNl1 NͺoUf45HQ "׌ܱI8NjtHج(ɛ* !6$`.V!jhUȍHfmMZ{ +lg3O-*0 #pųVUu(muYN}yޠ;"KNT[%g9,'grՐ.?ɬ$DqؗeN7UaжN`&pd:|BnqDZoI\Zլ4r_UKm~qʎDfnEH6P Vcs(Qh+%Ԝﺑc?Aw9{;: w#ty9=;b?ovv]XwfYtw8e($8dzr- K8n*@wɷ&ފE/ _(ftL#EB),-P|*T |(3KFK71n$Cb['ku1<\4T6"8 uvEYR7|U9 76(O.}2׽>')"бMJ|rkpR JJQӪh㉜ t@9t/|ђhP3Pe9f!?>y}_Oo~݇5 6TFf Cf'yNMd {\<5AtHN?;,3B671Usj2w J!@ܯ'F[QN"9ׂܹ9S< hhpN=}^I[gb$/[=Jk닁3lNwj{Ob|} UDSJدΥ/_:EN=vx|;; X Zt> C<,i/BP<1"0`B k?ѫ]Ez!6Pח&{@M^c0޹qBBs(*ZoU#c%IT +1X㢷L0:ZLwzIWgSB?V.DOy;sU*7YKQgd3D5 & S<ؗ5; cɛ%5!Δ`Lb k4O +K]ւL3gԔFw$#,k*U:/d[U?%%oZYA(PrgWVx7!˾C2_N!+QݞMV"䆔w{8mN ,? *!ܬD']^DUᔃsXS$qf2~"8K ji)c|(2 f:氁h>Nj=*V*<rk_,˓vV@l ȯ{ܽ/]-Gp޽h3`ςM77mš~}Wy/rBR,Q3AN^wv8]ij_BBqRoϊB_)O391׿/ϖeF(Vmz /f 쯒f&< މ?o̷Ubk2$3~49-mD|;mX֪ Dl!$<{'\*r2!7?p78c?v,|tG dNoȕHZD RXI3g\"-\eȋF\^;N̄Lo[-ۼähT ްo:]+s&)ӿRbnUJ^߇& JJyΠ[-"2?%JX@z@o9Xy. $:Kȼ䉱i63(D iQU aӟ]`r^ئ7GGxǵKP8ͨe#_݊˧ R -pѸKIŨzkr"gaD7_D EbdpG"sQָ&)9G[4t톸zPskɂ R{!4@Ai8fssQ"=H!Fv0X9Xi5~]AeV;G_ TT:ɊNs  o].[-n<")Z`Q\ĖQ8xv5F;c_ZGܸ2C1k6 Y#h Ic f3'" o"ibta|ǿ&kB<8h`)x*TY]3zkkU@"5 yvFZ}t8&iL'Q`wuL;}O'g}=?Yk>y /[$VꄱVQRr")Af9?/"2Ӊ4Sff3S&DÑl1 d@2L"r<텴Wo8e:OiN@?u˞&k\]vX$&g6s-:r=FV g4%y:8"PT!q3AY4>E9HXA4(O񫒠sNK:Pg=dC/[;cWIV֯ag+uyud$;3M_ݴMAh`s`x>p֝yy6F'ECuMlzdЇx5]b&dx^2aB12m>p_& tҿ]< l0pEƙ-^v+ dž؃~ x0>by$i[?PGӴr M[\ϱO90*9{ҙ=F_ GKΓ,gĕk3ӵ9Eo9l}vuqm¯;z:(3Vڜ?hVҥ2S,yӔț|mp1wQw-m6p[ tv[,%\(k_Mcos}N0:Aaz0[ꯆbn*,ʭ؄#wwp7(7>٥Jlvk*j䳫гis,{.uIX;sf}fƣXuElvˠl2&{uwU+^o3`xPvm ۶hqx E3umQ ]> ?PK :Q; nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/UTNo_PK :QjP nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpUTNo_TMo@+pSHU" 3UAkC19d`ϼ7X,0ɘDOiMj4NG'TKi1fR~Q=ӹ$dژ̟K.Xģj"w/BA#jOHrH4PO<&mÈD]Jq! -d9!$}<ϳT,rYdn7r}x7e _eEˉ l6-QT}?_R%˲ p d+z$/9&jnFHXa8"Tuѭd\ `UKpR^T[>od!K"%접g0ƹ]z=B}`> f*'fl#XwŢIS0jN꿎S!xZ֐YԚUEf>\p,#2δyˆOV!]CΎ(Cux0f]+PK :QEJs(#X nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpUTNo_SKo@WL#l4T BBTMXbYcnz;|ryfS. ^oq~HGd5vPb LH\3D3 e Bߏc3aUV8+5[C˺gܷAR`Ί5pS}BJias3{ƶ,\q8DR P~N\s;i .bF{՜8)B*+:~d'KNG58s1w$8G\2K F?,Ph\sRT ]F'5~0gn4z&AԨoe77͖LIe֍kԔ*emݎ)gFw,iN골_Ot83ӎ<4bBd@:sPK :Q.niW X nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpUTNo_UrF}W]%ٰ! 66ueSImQA2ʊȆ$BȸrQLewv,K9Y2dJnpA<Ǭ'0,b\D/epOq0(v/ n_w?||t];VcǓYO}oc-p^i5~*,޹~i>tO4F0TsG$.5&Le$N)OLܾ\XyIVUN(0AF hPi9ntP]= Ml n_Ru"Z 9Іq!Y;څ^Bk<((Ձ)ŖP3ٛTg>/i7 #jќA-C95>8?J:M k=$\I-a&6B!(HyY;~7Cr0;]]e+[V3Te ;bg6c bFfi0gA Ft0h4M3CKQ"=295jK +X( K`zSـZ* hlVɸ5to2oFO:n2)lתebԞNQm89)p/=Y;~8jYj=(&)N>G8OHvٻQ쨸3t:nLmh+kU>:q^TQn+g;G3 6{⸾׺;u7PWZ;y٣ PK :Q N nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpUTNo_jA BxR Y$,lV!ɴJ;VATj$yu]m (/1d7(:|r˂6y4jIRs/Lʓ! mnxwo~ qY{U$!XCȒ 6:a FLpek^<N7&;^E;-ϓ^-dvPK :Q2W-N nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpUTNo_To0&EABUm" dX vd;-C ߽{w._U )ؒJX6Cqt:6iଌYQZlKXn2"tdVIu4,*oC1KTD(ȴڀz@_Cz`?+]=ճ|k]ap< C]."ìuJX8<C[*b9B0 *E3&@:G O3QT1KSvmmF:߇/adƄ1ddlABgRuA,\`^"%gl7%Ym%ziN"ZmNƮC og=9_{{mnWz0!t> hn<{F('AϷg6yIG~p|ͬ@%$>T'܁L͚R糳{oT)fov]wRsaSP'$@ TReE[G/peXx8ѻĻٻf[Zu-.÷g^SV"X1.bMc~ f]wv;뾪fؕz>}P)6N1twv>Vݑo#܌(u_-kGmvSǛ]O}{c4Y4ѷwɇm_S@㑄=jywUcͶÚ+UQr%0=ә|jo6S+5cdn@tsίy)q@=C1=*?oPK :Q5ZF^ nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpUTNo_Wmo6_q Z) X#|ҒARy)J[\ !Ȼwov,1L3::ՎnʤByswhMӱ$Dem~@vddkL\Ik J6>z8R>_pN.c=*H~|$/ʤGUWaDu/ӋI̩ph`N}sR[:{lX,#ON λ}; Y._w`$ y'.Y*B֨ITu`xlJHԉ p8< ~~J=j)%^ 0^bclj'ql7^2"ss <>5 s݃nuKIM(5YAǰeQ„x[zEKJN" ;l XԤs3kwζyWBMf[^v[AI,#-'?oq qan(\#tO}J[ut'?x •«WPnU=F;޻8IRi%Xy*;֒tr:Ѳ{zis:epj()H_%J`:{Kc7\<)cr RLF 圤k_lBJd|moI&$lbAa*!9cTSlU5xi\D̴ؚCЊnV=d^Ƽ7WSA͕O+P83mbYF6Gt?ju݂yڌ^ Uo̿\u߇@+*2n[&4xݲؘXy\ ӮJRU# h $;ڧ5ȑA,òp>N92k{m>PK :QOcgL nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpUTNo_QMK1Wa",^bAzSA< ;v$Lbw٥PdJ.tZ^3ʘؚvj6W-bJs>SgNYW-K`{j&hH'xH C[Cd tFll hˑG-DD$oIb34ѣoڢ TwFʼn$X,$Ƈ|S(0{Et2q.4PS2aojPK :Qlv &6 nikic-PHP-Parser-658f1be/lib/PhpParser/NameContext.phpUTNo_ZSH篘Pdmlؼ:+mUpl4:9kU)X"XJN{ fٜ|kR.ȢVTH-or3VVcVjɘݠ4ʛBb.$MeF﫪E4g Yo0f-n T PVZ$YۚVtnȵS"JRuY "r-M+yȳ,6E" 7`s~>蝣?..| }#(hgfO C߂xBsLp"`' !k#!0gJc^>뛝f,KZr2T"V-s/Z g\~(;^}Nn4=drz믝2M -oHBu_Ʉ#^#]O DY,-πy]!5UEwDRw3 P˕i*3 4jKZ [ d bggdJ /3LQgD9l˪ vb9^Q5[`+ -,P_7kEց> 6e^>߈Xr}3we&1@w\x#ɏXLر WIJ2٨9Mãw*I"#˪  &(J!qQK RŒ!;34vDEA(ϊ ~*&6Uс1ÑB'$񋫀3V=V"/U৴A')=2+ٱwSX 5Vsq+—J[QQ ge^}Ul@ #H J}f4qk>x;-^m4>dXz\@VtOjѻ(a% hE)czpn9ݽ=I`b ֙T0Zo2sG/J"{)RJ ]㺽XhCtvVS~ȯ'ĦWU bxV²M![NkU|u.;qVAN `r#xJzV_). 7͎:AϧhCj}rQXsbht(ls `U6qh]" 3ϡHh]AՏ5ٸ{RA+ >d~(=7< Jb[]&NØlB#l*.Q!}vx:$;_u7/Ѯ`bUVH#_S&>$ õMpBDY ludyi1 ]|W"|1$`(=ȌXml )`Z?g\UjMj̐my%I, ?ĴPFdIg."k݈WwTW,º.k5}+۵e@8G"aSަb4#%L eb!4hhIxbMG7z9v)B+T+<} ,C[Sζ#'! T%dI&)VfP= {Rlŋ?KCBȃ-絜S5iP5A<&QxujEINwUՊMNnKRGcr"NHItw ZIQ6vhra7:e93#GKVڰ88Zj1zw2'N刐X..N894QbphvJ:[  +Ⱦy3n|.WJ䶑qs) !s0#E|'=EٔjH0ȼ銖tbPĬJ[\<4 ɯrmz}ggh:^dWFî{r ϬԅCS Zh:j;T! 7ND #"^ 6>8߽;FM=VusL(Q6BNW:ݳ@: )dMث{s|PB|ۖb~ bqjuԟjC.Ƈ?%0lL{ rT41}̴DZ5[2 bK޽=BȲ5h&Sdz l >R MPF)#2b߿ʛ\BNOjOU]")j,iX/$x,koT؍zy8Y.O[mQݭvT,ޯ*ƈẔ Z ~y$dA=a` ~5j`ĕX 7F^ɽ')O!{zA0pFE*Ap6yA̽H]A>qXPhOLJv4zHCSUHdMP Lh'l.n`R5T bkim"V)-tӪ3 6M \bP&M'{sv=領=E+\m2䌂m9^5gWX0V|պDPK :QV)> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/AttributeGroup.phpUTNo_N0EYTC-@V".D1MԱ@TA4Ƒ}q'U*(Q X]q٣f{lxF!*Fm5-g(')rKa DBrgŋnm, \u$IoÔ iPP@GBuW+LZ0 7V0˹)?_[` +6dyj^NkV@8֣r;]-njHRV8.O>1*߂h(h/3˘f{N hueo !Ih3稂hyb8vŰڌz$snz~6;/IUwqSp~Ӥnn Gcx9[*H 'ZpӸ5/<ߝ[)PK :Q)^]> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ArrayItem.phpUTNo_TMO@+`BTW+Zc<c衚f)BH.Je7ogJ+1ʙT"Rd<<  1J BFaLdw&<2&6Z0"8Xc=ۆ[35fq2UT $+K85\@ЄhN~DՐAȋ~aW%'u$0N"ȌG;jP-x^1 WH7& :h;ق7j@[ wB<3Э6; Zi ,Qk)5N+#uMFp+K9} ,ZpsR z jf|k_e6:!]GBP[77=cޯn%uhڝ16t TZpX՟oUo&./=6yx7\t%~PK :QJيy; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Array_.phpUTNo_un0yBʢRuE*E1$jp,۩@-^/ [D|޳ABp8\3":m?tD0 R6@\>LWx)E9Z@VD9?jKA d_M`VJb\P!=:M"ҪbM%Z÷HסfAo3$Y2}鍀e@V C3Ӈ6!GK, j U5e)7lʹL;ʷv5]RMLfEw=ǼXǸ.ݳU!ժhB`4wzI8'k[9,gz"=wovȒSFΝւ{Ntڈjؼ[ n?PK :QEj B nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ArrowFunction.phpUTNo_Vn0+v"i@7EaP&*I51{ɡ6ҋ%rޛo~wWnKH1əıҒ'z%(*UmB).?W*ܹ>V[TddP RfEc*we;,>4y./o&!"+Z,8 \(4OAxYhHn ]VpU+m adIUlٚӊ@o2=$1-a:Q2 $I.T%g?KhO pxo2X$8LLO 1 5J5LҝȒXEBm9bϼNѲ,žRb:<k$29.4uZ jԗ5^'0#J8m/v}nBozsYCC$kԸZ4j\ݝt僜`ڙ2"%-I@V3<𒫵fc37'buGJ<V'/֓WJ6TEuTP=m̴ Ӷ^7N: dq6%OLCtmJIObG+GۿXjiIŻ^Ύ +c}[q=NUVm}]{^F kPK :Q$2Q; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Assign.phpUTNo_uRMk0 WPH]e.m 5-}Џ:$Em$j44VWdIIܒQ(5GmH/g{=-+Tk $KE' LP7B]aQ$*Wԕ'Lz|j)v50ڒ Ց 5nBљ'RB]QQk<t,ee=k8Y};)y.n4[LDS&j9vS rM)dgqn ^kV G:=d}8EU'-OAXkI X^= j֥-a2"5`WKԆz~?(ܹ`p1N~(, xYiu8/%A2 Ye0rـș7Z$!F:0+hjXY$CH#{?ƹBu:0A=/FZFn erV' Χ]լV݊~qhӖ"@m2Xm&Lj{R\gB ł.Ra߅OAZ'7cGzVKXŮSBMMo{PK :Q: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/UTNo_PK :Q4)̚H nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpUTNo_1 0FlGWHWX(19@+nG΃EKpFyz:/"}G Tt` iXGٵt If88y8ƒ,(HaaKAE2咊60R _p^@`5˚IVԤPK :QW!G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpUTNo_@V4F[$!%xlv"[_=y3=52&V$:͌ B!-<5<&4Q"C^^0gA1 b^Qv-Р^$ ́/8Q#Xͮj9~U!G37PK :QF%H nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpUTNo_@V4F[ !xp ݽ1XɛYo%vc"jOB,_QyKył\@\D\O Ӈ 8(Z`f@k,܂z 9%)`* |ibQ,:ѼPK :QwyF nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpUTNo_@V4[$!%xlv=4Ծzfv ZteE;mE(MQCz, r}[q}]RECNP!NX 6F>x1@zK=y[XB?pF-f=jVEV~PK :Q@-tD nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Concat.phpUTNo_@DV4[$!%ln=$N;/f䎡AۀhNk}3aƐ}ueǥ  VCu-8Q"!灜UQ7)w-=rZX95,סzl6|PK :QK֖A nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Div.phpUTNo_@DV4D[$!%xlv j7SGР-c&i/B٭˜`(dBQiY`uoÅ/6D蟀bhҼ P=~Т^ӕ, B ?pFWET'2PK :QaC nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Minus.phpUTNo_@DV4R$!%lv=0N;/of䎡A[Lxf6/!BeʎK+R]RT}K7N`ԿHPc@j| p|3 ~ h1ә,稅8G0D!;*XL PK :QMA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Mod.phpUTNo_10ۀU4Qep$!= 6E[ߗ݁fԌDv&vE(MU+Ahj4 r{ DE\ﯔ$!` z+ȡtG&xW \=%1bYVQEef5PK :QFHbA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Mul.phpUTNo_@DV4R$!%lv=4N;/ofwE7X\xb(!De++R_RU}GWN`ԿHPs*yHxG$Ha+y[XQ?p`B-+*j=+lfPK :QkB nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Plus.phpUTNo_0 D|7ڑ+t`TԴkŎT$zOn䁡C7ڀhN[}1a[VƐ}u L6Cs=]9Q"iC1 Hښ;xDr'% ~`N@`gUfBYPK :QeЖA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Pow.phpUTNo_@DV4V),Iyp .۽1i30 i/Fo깲A04q" '0_$m@5>'EjҼ p =S?tt%/` 5. 1dJd/3|PK :Q8G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpUTNo_10FۀU4($@ -\݁:M=,IM+L 32X&ٶJ fu368 aEKAGo 4 2dqUQs$լPK :QZH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpUTNo_1 0FlGWu,^@M*nGSGРu%8#< y ~ 6eG: VǑBu`v֟)" εrqQ7 ^ ({gވ&PK :Qsii3> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignRef.phpUTNo_}RMo0 WTЮcݘ]ڦ]UibhF@}IBa0~yÓ,$0%QFqj2ӻ8٠" 9#JZL+׭Tnck+A4rQ䋨O8K+T(&@20$Lڼz?s9^pC/p8y8ؠ0 \ O$QdSKOD2gЉT J";%8I lꤳ!hM?H{E01 |9|L uJﴝ/죋hm7jw?їBcy!Ğ4^FVOz1ԡ0;SVv߰=ykPF6ٸ5RR6I6$]m|ɞj4FRi>j[R M}8ƕZO &8XvAosH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpUTNo_? @ l]" cXj.䮠HWN2<^^~-Pi`Xpa8S =kPQʍ\Yʕ%-c#rEMK3 ۷##h0䌢mla *5$:!HF$}~k `{uPK :Q!G<G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpUTNo_;0 oCHXi%+U!5%Rq,'ZwR݀<ϛ_J4 ք"t~\"}C dWδxJ-KXҥ7Ĺ52:+\[L2N|+I(g97PK :Q{β?H nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpUTNo_A 0 ^" D=Fmc-,8dmw!|o E8&&aI+EA_x%b+OZw:t?bMaIlGtsM&a1NazTr%j!i|ضyJN[~ǷPK :Q0tް<G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpUTNo_A @+f": .0 JSCo;ax{5V2γV=oT#H*\C..Gm$ZZ6cΣ,0½ (}F[Zq[HM I>raocA}+>7PK :Qc?H nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpUTNo_1 0lGW؂ӳ 两"ﶕꤾݻﭷTd|`B:BYƉVѓTYMd]%wJRk~xWi%1`ЖfxDhƪ CJ28>J((аExL~"CI#1w|/PK :Q[J3C nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpUTNo_1 @ *-X(5փ,n[M}CjW]mĻPQ׋Yb *[]9()1Y'+mʽ1_KCR^ϵwpo* )W` %U$Lducx3ob$w PK :Q /A nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Mod.phpUTNo_1@ ] 0Q!ёGKhzw =0oо~!P1rnB@KR! -rq*,=qqFQ0znX 2OAoVpF9e,]]6N`1y6tsx Ι˅ QPK :Q/A nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpUTNo_1@ 7Wј8*$:p M.7 ׯ=5V2ֱVtݭT#hI*\E.]ű'.H2 FoZ k[ޡ,,CDjwoӝ]Fu|ѵn601g*J8o \ʀ PK :QӰ:F nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpUTNo_? 0|sҎAZABjr^.ݴR7 7jC-Aӌ lTr' yT a^s@.w2[4 JZҏ`%F]`t$8Ggz JAZ<lcY A]^t.sѪT/PK :QCJ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpUTNo_O 0礎jt,m 黛*n8*kIvF i c6. A8Tt]m1܈ =%bRRFek130]A5g \`J=!kJ'SC_6R`GY6^<~<ЭlPK :QӀ/1B nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpUTNo_1@ ݄8UHt$!Q<.M}C@5Aьx'&NrB d5e9?%槎8?ZOi4ko@[⥯;hG|ҟPK :Q >H nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpUTNo_? @ ٪Vc״=אAE^uRߐ!bM-Aӌ/lr!4U3za^G.v}v .6idCZiptG]DQ8u@;hP2BsnM05($U>x `oPK :Q ޯ7E nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpUTNo_A @+]S :º+(O-U0͛%Gj*TF2γV#;X+[t$BP&!<'m%)? m`3YߌVpPO Ys]kFX{$Au~ ~,FV?ٓxPK :Q0FL nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpUTNo_O 0َZc (V*8pfk:4hfL5Rˍ0R)HD\mJ\m|+'gv &Sw=(5pވ<(!kxg[0-%Y-cFÄzVVG<PK :Q=G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpUTNo_@ {n*HBΣ%x4]1MС@A֌kl}G(&rB \*hZh.!od!ב&%֣+z)½o%ojK[#hJl;X*Կ!oÏI~>BPK :QF/? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BitwiseNot.phpUTNo_uRN1Ẃda"Do@6Mt 1mw7 sh^lJaOli|?%[$#$lmfŴ*q3㎮!^^(iŀ;F]>D6&7E<OHX Xl5^eMI| q457$KG?)̿QsHH'W+#j%+a[as.]swQЃ &j8סbx)ʸkXpiRx"'CT{_qŸ^f}IZ:l{~Yz~5T,R!?NfI@lPKFdX;ܫ̰D.%I4`6AU!FܸԪvO ,],=kauh R? 1E%5 EOU ~thnha@;P߿\0gy?H>\ {Oੋ3[g5lFAm/PK :Q6 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/UTNo_PK :Qg,Gd@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Array_.phpUTNo_} @DLJ[ eMA߽GXB(}YG{ rsZln3qsu Nn0ΊȝHS% ? F`lM6b5PK :Q ໒? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Bool_.phpUTNo_}1 0FlGWtp,m&*noG?;J'V_r֍1=Qyvֱ wcwYR8El d(#S 0򁪆CaXƨlJߖ-MVPK :Qpn}@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Double.phpUTNo_}Ak0 "nIa,et@p5lcɐ2g'`}W}zOzOEISb7|qH,/$'vzc[EG(q&†C=i L| am=$m Ԧ@rDYC o)U KXi3k bXu]#|9ٱUأ~u1I+8X['}j:Hՙ%y LRMrWPK :Quh > nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Int_.phpUTNo_}@DV4PP\c\.{ iof0ώɫW@9rOON ڦ=?4è Yb|3PK :QA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Object_.phpUTNo_}@DV4V),Iqc` N;/opC7Y\G +Jc}u@eAse!V4BA- (N c B;;g==^ C{F !K M49+jVPK :QA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/String_.phpUTNo_}0 D|7ڑ+c(TRv"'iwnw>'hяeeLporv,mjʼn&(:EܡbhriR(>+C} 60Q# 6KfU+PK :Q2@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Unset_.phpUTNo_}@DV4PhGr9H%ÿ{˛9h Oѫ7wUmLp/rq,u,ى&(:E.ȝHFs!? =F6K&.XjPK :Q3D nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ClassConstFetch.phpUTNo_uSn0+Ѣ^KSzAH 8 Nd;-#QȻ3;kL4 XspyQ"|EDYf n\x!Dz rv K]J3j%RK'<`Ƚ?!~C &( ,뤍\BdnzW2/" $pҩ9͵2r"ȱT_͠r,Zn:x"9B oI89@}ZZ+85ǴjGlQYI{nJ|xme4'Dצ5F6" kV` a Οkpؚj'rjU!8}ohȿóN-o.Ly~E}PK :Q[)v; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Clone_.phpUTNo_uRj0+צnSB!ޒ`dyYhPd7i 4j_UDp1] BcJ&ԛe[-B",Vbx0(Ki oYXn%Ӏ+[4 vrC VV›t=>k,:)jr&ܸV [Yyi,ꗕ!/vm]C|MLUvI /ʆ&yĮFڡ8>hX-ayh;槛'GEyh<_PK :Q[2z < nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Closure.phpUTNo_[o0)C%VF[V&MUUV"$DMm;$}l8 !\8;q,(_~.'#) ({8eOwyH> KY 聎/e8~ĿQ`mQ/f!8-Lphs9~8P19pADRIOB.(YE +4ب9|Iق2ޕw KN{:l2IaX8)w81OO\ga9+搰y~եB-'6Zq0J;IYghHŴ.c[ѹҘ:-GqVD^+Oɢg OL~p52ωXT > dvTTmX Y+ArIT h4^Qbuh f, ފV׆ɼJx hs{0=rq8z\VtAÏ΁|\eW| ੉s27Q0OZl[WLm.Ri+VPK :Qz5,y; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Empty_.phpUTNo_uRj0+צnSJ!ޒ`66زУĔ{%MAƚhϯPQRt'H"862M)6(ݺ-h: iqn!VQ)X5BwQ/łl͓(_H=.L^W f Gxo kVȹD1p0PFRĦwՠRb3ԶѤ(*mXô;:Ke8sD26&wvCW3]V񇿸$cp F:0{{Tۮ!d.Ia:p?冇p<PK :QG}: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Error.phpUTNo_uRN1Ẃ(īJ W4ћRځmtt*ÿ;-Ksμyvn|a/0Ysz (ZcJ#ׇs1a3E+.oO NZ!?EڍYڦ^ 9E3}%:&pWPK :Q 61B nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ErrorSuppress.phpUTNo_uRMk0 WPʮu^K%8Rhﳝ,!{ϲ^e)@^3HiIJYv@%GXrH!mMQubQCk#%ãFQجؘ& ?,j$S_&+lY>a=0@jºy}\2bV%6 (#b'0mg >j]!xo4^w ] h\LtYǷ~v 7Jq9iizmr`KQ /AP [yˮr$d6Z'>PK :Q }+v: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Eval_.phpUTNo_uRj0+`צnSJ!ޒ`668#${%k2֌fF}}XbetTL㎔@F"^%!-n=**=69A/ퟅlMf{~/TrH'hj!uj>[n &qܺ?8(qיtbxAE)!jۋhRQDl`O19"9;?`IkPWz|;cO/F&LhԶ륏3KFrXEN- znmGkk?wc zPK :Q+,1c: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Exit_.phpUTNo_u_k0)."T6q9f2a> TJL3 iȟl~%i:\Yhi%Lc٩eж!ּ} PK :Qh$ eU= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/FuncCall.phpUTNo_uSMo0 WTЮ@h;" iV*cmiBKJ{/v"rF+"PiYR`j0JSPX,9ۼu'жRf8]vҌ }G`c$0"mi`qty䀆 800\Cb{ZuiDʚ<Gn` m)V|&$]g 긱Gmb8Kvݡ)1 .mg4S0; \z,Cyk'SXoL#7L}o-|LۋkԝzpzL#x^gi#9cl!FxtOþEc\u8h^_PK :Q9̓= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Include_.phpUTNo_u]O0+`A 8.HD d)]%ka nm0[v眶O/l &8E4 1"n8m`qA,b2 "QRD@X:gTH0OA-;p|p&(4Qt<[0!ױqiAlW' zT-e&y,dPqDT﶐>Cmr!oZ( bM8G;h ~$lj("뤻!pQӢZҶe$ e|[D<(*^]hW7M`\D_܆7[X8S׸׬׼쭧YtunyE-qK˽PK :QEmeD@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Instanceof_.phpUTNo_uSKo@+%ZZC/Ƥ!2 .ѴQ9,d{*3 )-S#r}Hc$LΘ"Ti}/tr05ZbCfcNEJ`oFr{nA ]]m994d L J\0)" 7C)cqg+wdQ<ہ33mf*5i6B[1][ $ ;ywvPT>m>8trhG];=VѷaKj re=:JdSK%`Zp ]o+D/ 6=az PK :Qu\3z; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Isset_.phpUTNo_uMO0 >LjWW`q2Mq٦MZK8A;Iڲy*$jԔѕ0)pE7 TsLz9k Zlvy˗2 d2!Y0\Q u8[uyM (Ji;aZaPj;M'uS7}6~ I[ иn8GOEQXᴻvbJᅐe7P'X m)+~8QI'GzZydwCqMj U%滛#ao~&!PK :QF*P: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/List_.phpUTNo_}KO1)@īBCHdS,ݦݝvwy 7^i(/ Z#V ߧ(Rl-P3.`cfP*u ^% U xWnHư2BT dDI.eݼ:AAbC/V J%)Xj *km@3֗ ?ŝq0K;+E!+`m'M.^y۾^uӤ:a2KulWoNG޹we-ps#,4ꇦCz#h &qųנ淒-[.PK :Q 5&; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Match_.phpUTNo_Rj0+mRBuǡdž@{Qd56IJXI%+NHvfgvVz|E*5Ӆ>IQ6\I8l+8fQō#ɍZN5^I)QsQ* ~gMq ^yDݡf`()bs2FYoM"mm/#[Ea 0f :XCm3w,tU cOD(CJu9cٹadȵA)qVd ĩ?OyLb-H ur;PK :QxFl? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/MethodCall.phpUTNo_uTMo0 +|D[uv]}aU6V(2рv~~2+!A3m&2%pmQ#,rɔF^ Je>ܫtz*' J#DkxBɜ9Ah x&}0bʔ`qy"d Eh*3[?=D}w7S2WW[KRm i=gVInD!Ni)2/ԼcBLw}N^M1 =(S};P\p$`9њ?ע7n ؋-p3XmHۓC;17iu6r`-tMp ?;įK )*3; J/TJ*#c#=<4tŋ58j;O7lX/PK :QSR9 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/New_.phpUTNo_Sn0+P)hQMiAWDo")q,/-Tgy3? q K,3ybDL4(`XqAfdvd\{[ 9JBs|8I`8XBg>Wg`?`A2PvU&HfXoA&T>BZB(Ųl(`TU@5郏kç qTމJn# =ՍAD<ʕ6l]C)I4=@tVwПfenG>6t=7V<&*>NNn&n`PAJL͍('ƉT:6ܶf]?5Kj-~f2d–|PK :Qh-G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpUTNo_uTMo@+P rZPC"ŶвaMwgyo=fvT %83V n3ڠY_WIM8S<1mP6u/yg&{]#LGʊ@"'a|D[Ţ* M/]-pL KP%3r Pܸ\ _| D)1b#=#.BP+㾞j16$Wyg.u0͎Q"e'^sm?l^Qt ܾ229΢VԊI-͉8BYXF1˶en }{R|q<bP R5ɢ0nAv]kE%ڟ.#<#(:`%ԑD;zSjʝҧȦ9ߓPK :QJ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/NullsafePropertyFetch.phpUTNo_uSn0 +|TЮc ivAHvTJ%{~N'""͉ĞҒQ@5-*A(<s"HqKu%ӑxOkfhR0+\5e!Pj4Te 00`C$9BV)(o+e3 7~t>I88"6ƌҚ}!1T+ k <9] l+ke͡mɮDJAMJ ӔiVp)ZӜj]rj !ORcl *Me>T+vuYE~.C7H1aT\MTa'-1AQ&4YTA.%EhT-i};GY LKPK :Qukd2y< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PostDec.phpUTNo_uRn0 +|@*TЮclLۮi.0UnAF3&}II`C"/=;4+%VR֐FIqM֠" /MI׍a_wR3Z ).-b򓀏arEM ۪qE])y' :%0I h&; z/RBN̸G,PK :QL4v; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PreInc.phpUTNo_uMk0 :҄meu:.m 55=ZF|Џ:8 yZ㳮4$jdR4>G5`V!^L7%-޶}ݙkO4fLJm-@E)L~|!K,jtT+j)`/QީfӚu^>ȸn4Doz&DfF,x)KiFa l׉oDBi\@g0_&Ў$V>(saN)E?+3 /:L3shd+/{\8!?48j=qPK :Qر+y; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Print_.phpUTNo_uRj0+`צnSJޒ`dyYhPd7=H͌V*k )IB$R̃@d!eZ/ {,nb W^`kaʟN@:4epRx k&`sa̅dz^ ,ϨL)viۍh$xF["ka:n6;";]`IP ݿ0DlH[ԟt_tj4ęj"mF=X_AFcPK :Q-čB nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PropertyFetch.phpUTNo_uSQO0~W܃ L_//n!F +M[t-m}rwwG'""͉@iɨNncdJ0ĜHr1+R\DM%XS="85QTHIvgtmxR4ei:7ǴJP1aݲ!ź:ch}ZZo+TT `Zow͞-;oL; U>}oIeCk-sSN4\!>xPK :Q, ;> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ShellExec.phpUTNo_uMo0 > CЮclLWn*7hE QL|HoBANBM] ">ǃ !V(fҋ6x[qDfTU !3p[$j@qc)P1mUskYU )ԆɯOHs+]}QWU2kSu ҙ{jmpT:H,4NYC y^r+muo+Byt⡃>2cꙢǷ+Ņ~p+<>oxN[+23bxi k2VK5.\@߃~ɪaM[B?ijzPK :Q4}g? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/StaticCall.phpUTNo_uTMo0 WT@lhu CH iHmt ]?rh+=?$;f3JKNu/S yܘmi3u8'%m;1EVI\aV+raN.ghG.% l8`:Ќ T4<ΎKdR, 7_'!ߨ{Q)XLOyޯfA&|V<+tQqf-̮,RxH#pSE*E!ȣr`JuD{g4`2T+`z@ɴMĭOMh &ٱq;ރ莣e_9 ac3|duIt%^nx^3IVIMȇ*u}M~)чB=]EaS9OPiE9jqx͎F~AK2KCkY6ڧ"r6;**̴|' f6PK :QFas.; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Throw_.phpUTNo_RMk0 WPʮu]Ka%RX2g;ɒ`ޓgYHȑWLaDZ\g$x$B."TE(glВPWx(rߪ;{IO Z@2 ivUaZ[_Hֱ vr=w-Ka 陡9Δb'0mG3 ^*m#Bq4pӊ RXochuQbK?}QspjCn[ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/UnaryPlus.phpUTNo_uRN0+P)mT\)"ĵ*8K)u-Z;>l3Y 5jѕ0+hE7 AZ5^η-vJ;5)2çDOk@;C`pqu8 1W[ 8u%`@b{%VV}@y#Bܵ;Sq9h#v{rx_ 2a}Ir,Q&0-oy&EpWqJkH[Uq8v#X:Ǝ`ȠR45/'#\6s}r5̧͒-~O]"cYi"˽j'~ KmOPK :Q?:9> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/YieldFrom.phpUTNo_uk0W"dsn= jrɰ %ik{H }JȑLaDZ\Hx$3E*^*7t-cDU`j(r~1J~3DE%@WPBXddea xuo&`}uu:T2vM M.ΤL)VÐiFH煶BVBVX^Ҕw6#wbCL.z[Ӊ~|.7tࢥ bxhj,BG Wϭטv<ˍq<z~PK :Q]G; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Yield_.phpUTNo_}S[k0~8B^9ƞ"l J陖r_6t2#LB5#Yg%;{D뺫Mh\V.;6K,Gc8; #@`-rl DO!﷿o:\;hz!,*Dj^]j\avsO h~tf@w޴?jeHS1–3d f;"WLPK :Q!$): nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Identifier.phpUTNo_UMk@W 8:uC)B18Z*i],K.:1͛;_ʬe. &dvi_KɧUiT p"ENU]1AABm B_lRp# 0 zG+RØ E1ez[VhX)A[G?nsV eʕmQ"u)*Q*O&0HĄ:5XSɔܚ̆z/,N 93 |Sݟ(;f*ax Ue4UVZDò֕˥'m@fg}xzҳD Ms訨Gj厉߼ )nVF}'Z?3sާ':Fh\GPK :Q/m+8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/MatchArm.phpUTNo_AO@9 jڃG&zYٝ5%,Pb^Hv|2P ^1-BxV V'Y-b\P;m *Y3m22@ C^lt B*:>i 'NlV|a5_&o) @=iVϝzޭX6Pp1ȽiZf5$iXPq<ԨhOqUG^(f.0!o6-j IЅ b~nqN .{\PgPK :Q`/A(5 qS JgvNk.RSRc}! 'ΊH%:Ż')hdL2mM{.gk&19v.VIs둱4)6~` ιT!aLtAfl.$TG! Ԋ kMfԴ^ ght\\=P)wkL^^Nc~Sd3GV+4s΢C.i` 7و*Iبl="t}N7O-?'In|ĆQzs(l!\O%P! #\uF 卧1PՉ=W#z )@DgkDŽEpEZihB @8L80j~(.&[oy.7R]1e@ F77 B("\ȓ" BN-Xs(~~U4.@K#1N3=V\] pslUg\U|jl!+JRXiiƪ[lp=Mrf Z@MB  x0TfWSUH!\ {V^2`xLUҢ}au;@( p s J4=νs S_-V%AX35S|yv&iI[/z;.V7WkU|7ұ+7_re;e=PS=FNo'DfZCC8&KZyAhNuqdFj̛ҒJ]Aޝ(vz(v#F˗ SNd;nYm;BxsOO|2Ǔ~LsV– Ys}jk']6YA3%e'dU++ `N+Գ >8 ٦t5!=Sȗ} ]1aZ'S$jROt:. X3ET3K1/DU"/ m G0U sB[ʃ0Zahjnt׵#W~x]P F]::_皫NR|]WekS;YS+u{Y}:8|ۼ&z,4[;ߡouvz^:J+lz:hh֠Vtm2ڋPM}l*ă_43hmR1,AhC]`BR!vϤ&ik1wb RYCQ$UWD7\Y;NF(4Uq66|JщKU02C.fZP×ޜ}b0nb<]۸(?#md]{lxtJi›GcWвl B͏PK :Q1 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Name/UTNo_PK :QaXOC nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Name/FullyQualified.phpUTNo_j0@9@z= #cQUrQP+! IcfIʢ H5 ihLE*dL°(60 7G+|dSsPf=9OuU] |Hjp X1i ѩS^#Y-aÜ:W W҅#\"KO](Oq~d&iW?w mhm~qH&j8+]ENnIEJ T¬( VW#xm@s;<1B>.TV 3*9%Rݷ{+L^o0x([~PK :Q)FCsJ= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Name/Relative.phpUTNo_Mk!+PtCCE/ YխmBnbBi3#7UYA\2mKFpѬB{uֹHV# jȌE to}g-pJr َ;zn=B%7 _%R|>оK')25*$gڬcRp($/v#4*;̓B+q 'l0 =X!l8 &5:;cP"=Y4ySt/t5ul=VjpBפcn N ҳI]}"X+jΓPK :QX< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/NullableType.phpUTNo_uMO@s GTUD i@7)~DnXM<;}R@Ay"%uO1)9+fYd?5,.2 \ۏ,MUaVч}i-w( ׂَ[uFG>[b)fNtPK :Q3 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/UTNo_PK :Q>P6> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/DNumber.phpUTNo_U]O0}ﯸ*%7 BMi<HIR*Qic{uYCNH+-Yz]S59NNIF᦬oTT>LENn3)a9DU )JS+ӃhDBQ !>Pڤ`5_7ɴPGQptH=(@4rd CQh"ϙf ^GCVg ƶ(i*yuǦCL!8ӑ%} jw%\R 8H dӭT$ŌXQ7^ʝd)cP(x Գ Q͗JCo@ jjiPg˭0k@Fў49F:p})i(%:-we4)Z-λv|m8sB(Kv04!̗=VGokv\ ékscv7ֆ̬#NDt{KFr/}~Q7 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/LNumber.phpUTNo_Vn0SUIM]Y&jDrD Id;hwa6K`tn9 33mD䫉z̸tw~9 lȄzg\֝.;QRA>xH(ԭ_-TEغ` Bt^8tzOxrx6WG([|wgMqzrEҁ;&C{qC[ +'C(}%%`$!Av c`k ?)8+>L[A4aqš4^[L'CLM ݆.YVa$_Y,W I5o5"TPu* ,nKY IjLU).X!Mƶ;ESߢ?ֻ%L<: n֟[z{i,ys:~HJA+ڴe0KCx0]Rw帨.< +M'ST Ko*nq׆0eT0%ޥÉYζ&V,1]M+mXun3' kD͠W(GQ`4cF!7M}/t* · hyU TBj5/뭃=o*< {oj(mv#k嬂V>;i[&5ǧ z}T78 eQ[ĄLֻ+E E8k#Πi*f<(Ћku.S[@3|5;ߛ%ctڜ sU~PK :QT!MA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst.phpUTNo_uOk0 :;PqAq$8ƖaeNҵY3_=IOPlPdԒ3>h8BaKV$Tzƒ٥]AD/aQ2x{kZv2*, j+,l : =nG?k4X Erd(j; oGժ卷;%Y&Oͣk5||0΂To]"KCQ gCM'NIOˡ *+*!MɃxKQPK :Q> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/UTNo_PK :QTzAH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpUTNo_A @+fD0l뤂.oUS;˼y`Z5^ZN9tOC$ZމTEk il5Ua:˦S٠مb3d#Ñքx 2w n^+ ryĩX,9o5DXQ:ٿ]Ÿ|\p PK :Q!qp:E nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpUTNo_10ۀU48H:4K;[ Iny}ٹAUcbo4K~:*IF(W(O˼ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/String_.phpUTNo_W[SF~W2J"6S(Ĕv4@YkA8޳dBN˹߾7 v$犡Ҩr76yQH\ WE0k JQ<@I4U5bwCsA+z icy&*XPz܀E<8^_3p{y96g'yĻ_Sx5L@G3!Ry$q_|υ"&z!u"ic}(:)1X#]_QkH2MT*IJ䩳:SiJN`U-~|h%?;yzQG9"23 0Ӈx(,jɴz(SYa[G(Ib8|@1a4H_};) Rf!/53c ñ*3N[z +d( ! Cכ&`9pk)Y@KQ9T{5;CEa5ٚ~3;Lޜ:g)mcv]13w7IЏkalZ7r%AF1i; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Catch_.phpUTNo_Tn0+@צTWD q D eo*׏<8Ό7yzG)9lPfcf(891%e:Hv'Ru#Q,]AzT .t<'.6;x7*fWP-eg~2Df$/ YvtqCմHGխS:Av1,4q%b5}isA$9c3HJ~kS:DJrcifz ^WSo0𐮑iDG~Aʜ[\o-xs+QuݝZ;R5B)z80\!34j8JOM\2,%MhuSYp_3q,7rh#yPK :QvI ? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassConst.phpUTNo_U[o0~ϯ8Hi%+mݢ5 m,Id;ն/ *Cw8) "SqD",A;HlDױ|υ?em0 0`&8bO#A=j pg8,bl ʛxp юM I5 ĉ0a<ԋ3& D2+./ 48qUB"gpbPKeBuW&Y/eme"Jѡ -L}Ț(Ǣ_M1U:1iM#OV MZWmΨ4K9Yލ52&ֽMWn˰c:iGٜ߭VɠgWt#_ĵ<9< Sڔ}(Thˑ$LDAxxX}/k3y8_|ʢ.AC٧7gk~ίL1e\OO;ֹue9?h1]^`JcIẖDZ/*/ !_q{g8y@;B/ 37tqwr.v݂r gPK :Q[1m > nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassLike.phpUTNo_UMo0 WN,u=t"XS[ M7ɐn>J/;iE|^(%d`lȔ~вDNHRy9Ƣ^_҂^m #8 -G\0 Z_,*+՝|E{4CG)k-'&TOppr/L0|P%* :ϲ-dt:Ы$A`hvE~$"<3*ci9;wޟ!L߱j*[-yRZRi!aXB =j̐ͤ5ڠHh.h[aC5bo, 72)Ilx=DouKߒS5&ʻ n7Qic~yVUvRf~Um!fu=LT)Vl/OUSe'QajGr4-eKjI)K.\ARn7M ܎F,0KSܸKԤۚ`  hTn"AyJJ/G^Ե[WD9tii::O${4%}ۍ}hwvWdrJ] 5>m {kxX_4elԝrP'~ԡ{)>AqiRaqĠb9<<ՠS#4OS׫BBI\A_k;^˜θGڇPK :Qs vH@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassMethod.phpUTNo_XmoHίGIPIY*ƶ뤨]c_0E3>;?&q}'&cr"zVl x>\)r',Y{$i#*c W@~pd@O$ t><91Ѐw .II,}O,^a÷ $1b“8<,,w`dF=HX(\V NJ#)U uOf}jKU?a2;[ {1_0OP48Rjpo&18EX K}T>k`P:k`.UӶm7 ĉ+W+k!]+_7#rr:y4˙OH vI*y(z@>TnɁ~4x a+L42"K_@ P-eI+Uk Tz壤Ϋ<%}'nۏƩyYYHWa՚ݞFrn՟GqFa O%+D?Y3l /?OψN7/?;ijs:Su%1Ʊ$3DmIckkCjPK :Q#1Ec ; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Class_.phpUTNo_Wo8غnծ6e.C%V$N.q"Y_ -.}$]`?B w`sJ1E1)1L1UۙxyfX† .ra@^~Bϟswr=~9pjbp8l\&coIAn_obX!3񊅎!̻vƞoWwRK ՝g=/OmpV~>~C xHED|h*fQs%+ q&D6T͝ኈicL䒺0 eb {ѿc r\鵝a)b( $# fjЦ7chjlw܅Xb(J$9$ EH93WGGc>s7s5+u'gћS,ەv^sW~.˿&0 JFBYL5c j,2^# vq]ZJs?ͮέ%_nbji!bID ?DR|prRU} r-sS6f=8`Ɂ[ޟ+T TYW,e6ꄪZfΚU)*?ZqbfluetOLeXdB7y\~s+ϫ*ZbٔL).>BV26i-$z2 w,ޟ׷U=Vr8fB"Kϕ G48K|s<GQ =Z:i].oyopuQڋr"t*' %,yH ,D _>n8'Ͱ<@No] gz/hO[h*qEʎ GϮ:FTq} ]wfU%1 u %l"~PK :Qh4; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Const_.phpUTNo_uRKo0 WT]ؘvGHV*Ԇ(v:R^qj-bN%d$uVZ1BoJlԑvlъ!^" I Ꮥ$`4`thp^31jl(m#@hBpB`A6!zBYn=fiП#;!VUcNȾx̧,ytchs.?@ ~6wOtcr3NlݤnxN %iK^~EjnZ.u S?PK :QHW C> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Continue_.phpUTNo_}j0EYۦnSJ!`dylIH+9rC qaU@^3CC^IG(AGjδAW jg\W)3( ' L?a;픆mr 7PK `Ve0q!n;w ǿ %]T1͚BxxAl7`䶙[B/EQQ% WlwC {MлIaq*+stUqQ?ǝ!iasjc8`,,^w8 E#۟_N]U17PK :Q*#~C nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/DeclareDeclare.phpUTNo_uSMO@Ẃ@PU,`ԃ1!$/B`cY64w?Zh Ρ{ffa7RL2"-UQFwA0EI0)|Kq>S[eZ6#iȤgOZ,pB?w0)2EWaݾzZ_^\46{4 ; O;fZՉ@GCNfo D s"Œ,f^w=4`DÅ2"Z4-hjXiDA۪UyApN9 jCͰQ4x"S}e&?`:W[]eػܶs# >CS+AXEkq8}Kq1%1PK :QY!dq= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Declare_.phpUTNo_uSOO0)LNtFfY2ot }5.n -c=@gq3Z& eA1Ó`*.)A(QTLnWuζk51E#/d~+v<PK :Q+\-8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Do_.phpUTNo_uRMo0 WTЮclLcWnzRF&4c9> TЮclLWn4h%Hؙ@}Ie[=.5(w`Bl*5q8"%HZHE.p=;ҭ.f3*Ew)L j@Vi* t9v[ۜ» t;T #@lܛ a8 䖑(*v~m[k*鍐e5 ]qMj30&ˊ_z+>mrNџmm6_ moQ\P;i_/INPK :Qq^kc4< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ElseIf_.phpUTNo_uMo0 > *6anԆ(q'_JKrh%q^AB` T)D=yHdaq 4zI%|4fZìKO"p-~"0g$0f'f'(d497*katP6H!̬7L|8>E-JXB\gSb`cd5gޟDCͤJpwsi 6h5iKrJN($#Gɟe^B g 'ڨ"1;SW 쀺d S^>1Q=?7`_顇D5| Y_ TC @l/LyR}օ`$3[_V1/A Z2GL,hIb/7߀; +G10^!5(PHFw̖v(O9.Džu 1ԙ `MThfE J ڀ ƏMDx_2]?gl7Bw?3XL7- Hs{b ы'ʇsC屹A׌uNV4.zCpС+CM|HӢ Of(DbaKڱ b~Ny( mgbSpwы_LAŵ| S|rba^ m/)wJtނ l<^œ) w MDmF8{$-KЧ崟:nv]oPK :Q#  > nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Function_.phpUTNo_]o0+E@VFMڇ4Uݴ @(!D Nd;sl'q >=_Ol>Cۥ`DS[uʙ~N<G&`B2"~PGlLά|Hws}5sLh;WUH?U@;0Hb(dzgd>21DX[`㑄*aHyʎڌRyL 揁0R}`S`ۂa5/4UxZxTG5usnڀf iG|yϭU/ ”i_ˤGXR@h3] sR1(疻DvsPȊJvA{ZѾGRS#]3<;!1{kRZuvlZ "${ ŀ@iDf9R@SJ@KQ *D6@ºp0vHO"Pv9hTj~.!gE%vZukW!JխɘjS:h}ϕ:$m± 5#dSFZYl60d:>)5ě0ΞڧU9v(GLsXmv":nFo ɸ{9Q4 jY^ ,D{ᥦþ QyP}o|^^rHS'N.oեϕW+jܲi0jO_nQ Ƒ7tfM s]`{17XW̧p_xPK :QexE< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Global_.phpUTNo_uMk0 :҆meu:ح:viKP52g;Iy%EzEF,8FQp#Hc!`S4$bRb1 {t0"x Ď* iw [4Mm| h$ HAm^zNH&/$Z+W-a a{DTߵ.m8@sNEp VD4즖[v򗲔,k8|YUx!dYѵo|9fvגn.gѵ04vCgM+3L-dn[`{Zx*oX#k&PK :QׂY: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Goto_.phpUTNo_uN0E6*"MUZ9ɴ5J;vj-yq"9SFf'I  -YJo)Mj5+3Z-La\[F5'5n.:AZ2O\ /pa漠\#g 0%>m! ;&9OBvDx)kϦFat!&VM%Su+*f”b;tnj'֐sqKrNQ?k+R_8NFc1@=Jl}:ԏN 6XqC@w9v.:ߐY?[QE*eiG5vz ' [>PK :QYk= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/GroupUse.phpUTNo_uS]O0}߯&%2c|Q\D l,i;1w{Ͳ5{rHh#Y"uT}qSIL!Ir't9S{D_ X.%%s EY"ίz =?D@|i1A`ZohPXnPM@lӸ Z~+tEsVJdT1'KuomQκ(׼Æ+`D GC"JP$I2mI #(Z3-`R];|3$Ūdֶ}l jx jsR P~c\jVqѼad\ `wnYw]U_$Du!tLSk&N4 HT>vV6c&VE1 {1Yx2ɲRX@.;koB_4t#Xzau8Lq^ Gg$ό[[y 0(XGdjay_0` wPK :Qi4&%8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/If_.phpUTNo_TMO0 Wm c ā B1UYJ]);vnm79g;%덆L0rM쇖8NHD-R ( JPeya5#bp' ߭T}F@|4Wa|]TVآRF"9:w^E ')L,r+>){Ȼ%H8hlVhb`| KÈJL))PgE8 &Z #-Ylap׌Eon$UYVozJsQ8ibGfL7 '-W$wt! (dMڒΐt׵%n2O'dGѼV;I6*zC3XvV[_ 7xzhODt2qc[|NA./!§%Eڅ=;3t='F(XƼx3^5['z\~41IPK :QYv2? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/InlineHTML.phpUTNo_uAO1+@QWxD ܀lMҴS"1wPa{iz"Qe#d^)\(F+=Bc̆fc^םxjeɤ* AϾ2[0آ^[эvZ hmv䉩"PF2'*1bm$[h4n(_>4w-d.,7 k8Meg 8%R4=ς߇{ +i'oD >%-°aܥqU>ېm8J\ :X*pYۦ?BŒQTUKtL2>Mm[0L>y3ڄ.j9 4kzy& oE`=J#}sg`v\!7@ V\a_B# ':a?!*__c6՞y !AK\#{oѻSߒYXz ƩJ=Awwڤ]fi)L mh1N&n45Mن6ˇT}yv r7 q0"J4qN͙6W*ՂJryk.29Jzt-4:AceX܀OE& L# f $ÐW6+hMKBotXNAC:&ߖMӬ?ug Lkn9Hf QIV!X}!)o ]#Ŏa@ I;a_N*:0V¤& ݮηH d~4=-^<b~XKXJ^O?PK :Q9? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Namespace_.phpUTNo_uoO0S\ `A Q0!*; K*,nތDƔؒ]ާGӦ@>m,tA|5Kr1FD=#LRRȐ-cA pG#d$ )8&N^|}هh2k p`I8,~4"x=6QCCM;:"/"AS^(@ ).@Lz^# 9K %ח*9Ce5.`! #Qy dJA%{N׈mՇ]6UB.w'W*'XIT`;ʖm6[pSЖlb,mnm1VsoiiS;ۘ_PK :Qu-8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Nop.phpUTNo_u 0 }` 8kWwzQ!/|MCbcKfЬIΘ.$/fi Ť3f %*8O6f68  |i׎SIAT6(N`> 9|WiY?ɿR˪D!M3FžPK :Q7 = nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Property.phpUTNo_Vko0_q'M n_˲RET$.X Nd;y69>{ e!"p FuXE+`, bETSA f K{ "4'.$&jI Ä fb 4PеZ ^BǡšwI:Ho#9t˧Hd @MFT5n =o&1H&ТkZP$S8M@$,Y%S?ʺH8=@Gljy͸N%;au≯LZ1{-0 CRTs+A:ۮY -侵Tjr@פyutUMwL=U6TŒ_j8As$֪̕pFnFo|m8C|ڔ ZEV ,\S*xP"en;%fV :w* s3 h")!x3\Z>3ɢ!|g&z[Rw0Rǎxx~y~uWqc6~}N~pG ĉ)3Դ O.+!Hl½z5p!ėT7dmjou鲽_Gi߸NhPK :Q_wE nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/PropertyProperty.phpUTNo_uSMO1ﯘAWcH0^lKiۏ- Uznf޼7CyI64Wqf7IY$G.b.p2R+eZ4dRP9 ;V!+$듟Z0D/|-):hF:9\Y]jr(^\3Ή.U\XQYZfƾΕʙa?Dؖt6HrVlHc"5 QFL+XT5#%ъMsr ,C_LjG=])9=i=;5jIߍ=PN{M /&`N i-~6}HHQ e{/J !iKf7C PK :QW7< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Return_.phpUTNo_uOo0 > mhױnLӮU!R QL$X?ޓgP.$H}o$J ChfM -+UnUIplKpe0P}jBj AWqFV2LA9]4Fn srnc# ja ^ʲb!j8VI/Mn;GDs&2ۧ ř~F|/쓫Fw{㔧nZ~5Ҥ qPK :Q/bTSv> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/StaticVar.phpUTNo_uSn0+@צi^U/6HX(^;Cbyg3^En%d,PS$F 1-1e*T4g,ZҎl~%}hְ$"4PV6wXV[ADWx7Cn-M.KӍ;(+O/uJ}SPuHle}wPK :QeA< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Static_.phpUTNo_uMo0 > mh16.*7  U젡$M T_?~6PJQ}b|h$$XKjPHmf9ݕr9]ҽ#Aԥ?ל&0`G5h+p¢Zij aHhlQ)=C@d/dl` HGAA;{OQߥM4X_x]\1xkaaٕ(ˠ NcŅV /<%-5Xy%cX62止Ƿ ř~t- WwcrFa~xvNōdk4,ROKW_nˏ~RYҎxLPK :Q[ < nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Switch_.phpUTNo_uRn0 +|@*TlhױnLhWn4h@$MK),F{~~v&K QlQq$hE왖2XrIfj8l=Z>bVLkXpeLڴ7{&Ioj(HW€Z`z5'e뭿or,oH\ ۦ〰ܰf(X>x`7{l9Ѐ|nЦ4 W}A6- {~ǡHmKaA \?^1:i角v !S8mbperg6n8M14J:v1^66]i/V\nUcYqxPK :Qwת=; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Throw_.phpUTNo_uRn0 +|@*TЮcݘ]U!h6bgMR׏ϺА!)%g|HhEJHZHyqn#ea pϨr+wIaN^dHnR۾^[* y@,kT ʩߵ ]T # sѣ c!ݠ%KvdQv^*鉐e=EiM. RXmFpY0碤ۧ+'=p̵C^حO4?}86 [`{x?ͥ[K~~)-q'xPK :QG,%a= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUse.phpUTNo_uSn0 +|TЮcl2i D3 M&Ma9sܼ˽*ӤJF9%(I8rJs ^Бln-ְTXҧpK~ke0F3* ٰH= Z`Z$$l}s!&eM |()ì6B%7a=L HTx\_WpN]mo:ضE*M8Des@sVAaiþԏouLxvIv0[7*7)KpxUJt:Enj'O"wOHnSӚPK :Q!LZ G nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpUTNo_m @ { EnI"=h%E}w-8H3/Yo}1М%X-Wyzj*! B4y$." V.L{^PlB0T 2I`w0,G@+ka&=I'CNR#I՚z3T}PK :QD nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/UTNo_PK :Q9=6,M nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpUTNo_}Tn0+@459#@S HAm|AnADzb(&\'d5Jz`ڠmGi7)b$iSZ3T߄N';V+4ȶ Iw.^jX](+Q…I~pofk-߰FZڒ 0 \Jc֊Ď վV1W"uG(6( H08*:3J8ågtRc[B\8UY60ﵕ(έE4eGYӯ9s}ы_yua'L\DKK F~&}c1 & ճ׽P?Y3ސ۽qf'e5R%<^44tfI_y|ܴbꮠbzJ?PK :QzER nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpUTNo_}SMO0W̡Rڪ, ⴇe+*RX;N6|ȇ=y77zAPCCCF&]DឬƂ`34x=/ Joi*P3,T603T I ?%o u>{2/g#ٱ{yN02(N0ҝp hYT5ȖV}LN PU؛65r-`O-E _8>T~uH| V !TQE0:LMaH=rgҞ]D_uC#FwXB u+c0N\rӰU(v&NJコ~xk 5#6wZ?LIZOѐ4ISŌ7+]䖥* ~dд׭6%|%7`=Ak[ԕ+A"2xinqoӍ5ܜX"]_!q,+5ncIOB.s >Ԃ1+y[g{7H$0tBO)Ntw-wpKzì NОKDia؉E@9E>}_PK :Q[X9 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Use_.phpUTNo_uTao0ί V֩MT$ؑ픢}wv\-B}サ{|\f%<əmcHKnWA%YMӬ2m^*嫙-,W 2 -:ikˋ w XȿR$j(^oZU%n)nCUɵwAIj 6Dwlo`Ãz'ce" 5^R#6MM .X cx$$=f@H47aXu S^81oBIӫ/={\ Ba̡ԟE} 9 ɞG,vB=O|( hR/M.?cF/ Gs &\Bd T)D=NH daSzp,ntEk5|E)PdΪ'{I/j EVP=GmYp\Q9+Bm & R5n ]N. m&bU' Q>!Z1{;Fv [C%Y m5h/4{KSތ6hcУ&$js.uz<OD?:`ӺًNIvHKu3 !m)$b,AmMc7Mݛ`q_PK :Qp99 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/UnionType.phpUTNo_uMO1+@QWxBH2 m|C7w*+4Y6Rl>%5Y`c4hS/9{~8,=Y JnԻ}3±,InQ d)sIw}Bڕ+)&MwB/N!(z+h4Vv>Acp S+aUIi8)0vꬦ34^>L9ԡEg^J{t8΅Bi\kAB46`oQ0I#. FXxijqIKO&myPK :QjF(A nikic-PHP-Parser-658f1be/lib/PhpParser/Node/VarLikeIdentifier.phpUTNo_uOK1skx H)R< 2ݝ톦I-dk-(昼{o&wPSi(ʾw=fܹ;Kd!~[i:; e&EڢسW>Q^[ )XMA{攉:V-2]Ģ wˁd2Pt{xTMZxɗ*jPBJ.$1Y"?-=ն;xZz>:X`ŪԄ h8?0iy9PK :Q<<,7 nikic-PHP-Parser-658f1be/lib/PhpParser/NodeAbstract.phpUTNo_XsF~0cᆸ~5N;aCZ%ޝ{wO"iy1>oWB?]ċC3VKN*F3< :%hb#, j:3r3GrDew[R򫘅udѷ@WXJ[)NHķ^=Ɠuk+lT++Tv+4s xD0\=[>&^ FhEUы4OA) ddvDW ̒ԀL^..(7D'HMDm)G?P1,Gt"1EmݠW$*hAY"yW*8!FQ, Z)>Kmlv.*1 ]TÆ#, Y G;rAerxͬ;Ne bw7i۳nG?__]mđi?xL{I2>Dvaܻsb< DE>6/I/:=YOL;{RBK-h>Ĕo=碏Tڑ) x䨣~|)XFt-}祝G^o?0]&:}6kI"b[5 T)#^!|dђSIHM酀(QZq*H.(\|'`tHLJ۫Fgd_GL)XFyBlGL( *bcp+O](g_C~pjGhv&Ϯq}wğGM@NKxЉ1~ S eb]̎^,K<0 x lx5,$# WoHDCC@,2CSȅqFEb 1{vHUoxUNFGf'MvX c<|JO)K HLXQ\q@!^H:<8}be޵PjBO}{"RSҦUjՇXZ5h|P?Xk'W=:sȡ$/g@z$H&>Qad4N0IR;uAF?';B!|<|\-M ;R~yЧo2\;mR ,Tnl`p-IL.+4̞Ҫ ?`g= 6m_iZO;`ֳJ-"Z S( FQRz'vj6 R`# a(ꑡp;65;FW**%l Z |8 KNN;;kU=7M[ڣiQuvgNiQY&.!CUݥX&3%c+)Pilaz{te$_w _]; ]2P|"<|M'dTPssiZtl'T1ǣl+-C& H(~φ6Z \͇EQ~@^lA:%MA"NO4)fhNP+缑&O$Gl)uNRf⦤4hb.j^E`]LѸ*Wg߯'jkEju7p1:72fwwF~&Bul{ V]7Y+Y,tmxaG[s_{dfg4 qycV{RII/} xxіّYC#xum:)jt愖 Mbi'~X( >vu3Pu*aLލhT$-g4})t2 f4JMO. DNTr4)S9M 6v@(yD2Jl~qm[e+q{TWKmsWn؎ MCDK6dSS@N sVi{!SLjvu"P3=kcv8A3`7f^vP11fdKKg)PK :Q8MH: 5 nikic-PHP-Parser-658f1be/lib/PhpParser/NodeFinder.phpUTNo_UMk0WLam5l ^@K/I:䄥F >Cyyz~Z(Q f^u+|e oi 83Fh7ڙŗ?K |o6v3YtVsL?^v*}-{ENaRl%l1m"oa j,w-t%yTgTWמ3 Pr^Cs-}ϼlV919zP~˼RUlQ^σ~Y#PK :Q<-Av`)8 nikic-PHP-Parser-658f1be/lib/PhpParser/NodeTraverser.phpUTNo_Z[OG~W"vDI(*R qAxwGYlgf!(mW_eޝs?;sf˻tBLHQZHmJUM'3RQ8M?ĻZ)81JrM]`43u1TN ?]zBQtARId8G.DSq BI3aI4)hR ![v+"p lߙAQAYiyG$IE; 1$5(ғD C{mG+^FqgE} n&I) c!5~)dB6 SWo2,Mq fytrzwwaSADR1X@$St&M(%N-UC -R^0%̊ȭ -qU_ibUwKOz\޶05l1zl}kjxU ݔDSTL1پxL@oU"K+5 WUNemm\}QTt*V"T S_Y@)y$jQxq8(1R8 $HUs uۅ=ϣD`%V&fщ S8-Ao<]WȍOLO̜cK:VY8l(&1jro@zvP#*ܞъO KҶ ͵JcAJnOZj WvrI:i=(8+ҬuβcMQW4McT 2Q*dɚ2[ʯl}mktK7?}W,hj\;1х$ wM$ɨm)xs(B I]WZ~UZ͵ V2!x>'WjVAa1 U|BlXΉsɚwHG~7ce_vjhJ|@j27d*#I2-Qq|a8jJÑ%DS¯,N8f~ngp oyІodN=dp/ypOgjxd]/}tr.J/tvFGWQ>i:=pi~ڸ5翟))7J硫jShαw|8߃C5LA*{NSq_gR*y\iu-B'aJw<Zbe[QTrT(C>Mݽ٥]M–#4'L4lo[֣(͡ox?`d1t}˸]6e)PԄ*eGB^"|#7[)42֎s^7)6KK ѪS V²+aU.{PK :Q}uA nikic-PHP-Parser-658f1be/lib/PhpParser/NodeTraverserInterface.phpUTNo_OK0sCы,xLm&"~wA,R\{ܹ΁, +Ϥ~C{ adй$TmGHrĩPd! M] 5 a^,$&`GlA*X~ iX[3t[Դ {;b fT\$GrτE$/`[0aڜ; 'ý+RGAb)$j3gS<5lSN|/PK :QZM6 nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor.phpUTNo_UM0ẂCXj#UM&K*3vkaQ̼{7M@u$st5F H<+C*lj \H+u5' a,5rfZҰEX dn3ߺU*CxւubcAW!Kq'98 hi QE}gL a;pMR2չFoYw`$Bf?}K 4:u>A_^*dΗlHd9~f%aq%UA23ҕgqӮ7{;z!޼] sh_yR +(Q5 s+م8 _0#VR(IYaHtQ6k$SkOV4..iبGjė{tpݤ_q'?f??pM,@ʩPK :Q3 nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/UTNo_PK :QzaE nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/CloningVisitor.phpUTNo_mPN1 +|ԇ(祠;qBB٬ۍ:!v**vEA왉Рl KNw;hºkshճ;W~a(o1y i 뀔`GJiB[Ov@d>1uUɢzYZ˄'lPĴ i%YDŽ(i)rǓpZ 3< 5 Wo1םw$T`Tj =Ĩ/`(d<7uԾ{4GPK :QhłbE nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/FindingVisitor.phpUTNo_}RO0xWŘx0^{.w_1@{߯z]CR '$hW]Yf}-$˺~Σx%):F47M%$Fu t)k8 labh>cv !tqbaL&4'~6̷"B#S%6QLy1\!wM1BJZFIYOx1BxĽ0K{gGq~OHPuwAkL~;NpV űu%>|QZ$Y'T[>Vtb)=v鸓O[`e:E98I|"rߗ:20/* ajӀ 呵KϢ?HPK :QzJBJ nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpUTNo_O0sMJ/UXJ1j#{m $*={o};:JҖN,I8DXf)2+j7"g+?.["g}!,l1܂rn(=u9)W~g*B 4'Wc2>'s% 05Jw"Ŧ(R%2g |ae $2 &>ِ`ij1!pU祒PZ}FZRz6RB&ı .ntC "AqI8k^#VftP# K[Ӷu ieju{%3X{=ZqbK蘜wݮ'NDY5N#5P{ѱ/@viQS}?h AU;oicݬ_Oo׎ ?PK :Q<#C nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/NameResolver.phpUTNo_OFwk~ KiJWi ¦T/$cg{~NX7 ݻUT2ܘDžF?vvby 8/ez7i4MҟeF kuF}5% vIX2]Hϴ p+l| ƐmL %уJ>6vw'=T0Yw"p{HBsU&I$~+3&,"?(N2+D:ZDԪT̈́}[aX14CKE@&{. IXKXu1o5\Q&ֵm1[EMOq eP0[5seɈjsW||Lt&+w5}~xP7HVbS 4RϕzKY17Ja6wt^]'fIs1eioB:$zˉQr_hAb˹GHi* ܁ 7~CIaB "Ud\$a_0w˄*3z7Iedjt/q3`0+S{5\i'7iHՅ4_D" î؝A8y%*V)ItJRnBnάd5\(;٥EQjM\6q[bbY5 I+e׍6*d+I5uzwaYRZiTy.pyO=ѐjܬ+}x(a(:O& Ys`Du86>q~ #ƅ {P(MGP?p)#S:Lu5O""l>C|;a͉AaZ"B)caI˅b뗻]}S}❬]iq-(kj`cΆAlZ^"lO׵%X;!k'N=:mw^ OF$Y.f=4ˢm^>i^ѱ=aSѺ aSXAxd6K*7nmmbIybc.\ [3Y-dΖtT+u#QN'kրt~Z~Zbyk, s}PQ8m o3V~{o8қAH-)pC ]E-@ r8MYTXFPwܮ ,ݸ{UB~aJX ۜ3{߫ x.?qwP5^ .~#o4[ftToyd͊26?+_4ʛ1]m%ܗ:}yԫz`ߜ?=-}ZLH,3mo \y:.Qj68#|PK :Q1pL nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpUTNo_SMo0 W@A&ݻ]Pd&J$g Qn5 ||VWJ53[gwOѮ,fX4UNhl?v3pvTqGtR\p%%rgD]$(84).\y ڿ}Ԋ]-!7J9?%bk;LŒF5ʣ6_9Ϯq_Eb9Qz(qx2T2.{ڃh^HVyo-x~[[ўٿ #3!sMWFCXXfK 0a$noF^凱W ;"-]Όa'sDL\%|ЉZzѶEeS1:\WG-(_v[2;f3`⽑$b;~ϟm:3/|vgVy2Ҹ>Q/kz$ηvOZs{ڪPK :QaN nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpUTNo_Rn0+ "fshh4׊*q[ nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitorAbstract.phpUTNo_nA D )kPjJ&"EeV]{H*R* 3ۺ # |K.V%=;E!.QKgyLY`L 5˶72Ja,#Rc#21xkȉz FE"|dw<:I4Ÿo_Bf^w#+nPK :QT4t1 nikic-PHP-Parser-658f1be/lib/PhpParser/Parser.phpUTNo_RN07tHB 0 uBFr L(8s}BmaZ|V,F(_* H&({@ֲ(ŀ(%hW!Á3!o"Ao,q6 BpME';"Gke+a10 4C3V"B-7e$HQ*&\";4WNBd^mǧ-:eCr1g<*NSZfwgΤj*hM}vwPGuvʧ1WX$K}f_PK :Q. nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/UTNo_PK :QOit: nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Multiple.phpUTNo_Tn0 +x0P'f+0 ؀ ڢPmH%' (Yre7C{|䳯>u % ̍%Y{{ll.LVۺ 2HIß4GOU6*701kl*k/=̀BIcAWq R+$T,aqqZ{ap; D DC-i>bIU@pC=T׿tƀg䬓B+^PWXM+ZV8c?)akYΓ>Hcg8rTrڎ+tǃ lԮ'aSJ< tXDM^sؽ+N<:FPu\plܕZwMM~5BԢa5MJ++] 6͸8 N0հY#̝^?O7r;_$^Tz@Ɏ+3ɭ]:.Sv| \sk8?䔬mdOA26Ulb{'{ {0|n*":-'F9 }i2ʛgkx>Їi{;80MW20LgPK :Q#Z &Be|6 nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Php5.phpUTNo_}mww9P%n|,ElnBRN|,jI cko}Aw8/||a7 B?|/fxy?W_x/b1OGqճ?WfaXv<Ws[%?Yn$M?Z_Gn2>Ln?X[k6_Yobn<{*~/[g*G|[wClO&\xAE,0Gk(|1ƫ,QU,_m\&5*lyL߂A?h_Ne9ϊ^ųKS,WJKXŷ +߮?Ƴǻ7W9_Y'4b&/$}d9Nޢؔũ9J1U+q:=uˇ)50wDLlPn4wWI6 ˔Ty*Ib12fx7şV7N_+\N7o'ÿ>V>,88<3_|}vr|~sqYu/GWgkwgs%Û#(͋ˋRR*M: /F5/^W=>=I±J:U>T=zW5o>>^ ,qAQI.JK.N)󬲧J'oNT*y{dx+6QeeaNDeAtDȊ(cxHJ|0_\]'ɸ?5<*"ǯGWr* Y| %tr~1R5ϔ^(9ίUϔ'S5CeV=C+RX8_VR:7\d@Mk9kSL$b~lTޱH@lt}I@psC7WSҜD>s"ɿHZFPJ&Mk6}nCaK5lЦ ¦ܡܡܡB_"8Dĥ]ńEo]z˨fS&,0qY J E&BӥS>3}ܧ0?p%"}Ї}PM|ND$$"! e"! HHDB"DD$""d"HDD"";d- $"CMX탐R"B2c$3-!m"BӺMc$96IMc؎LD&"Bc$96 6 G;%D faXD$f6Mbf3"d"d$l6'6M"gd;d57X;ζEJ֫>RFGOiZ 'ԙuC\wWb g(q0^ɚv\DFCv1!f; E"uם ONmPŵCjIv+\>_V1>T>Ȝ02ېY@H#Y#O' 哆!J![(">i(4O' 哆 H;$ 鈀tD`K5 h H=qQJID'eGFm'>$w'!(P#T*LB86=w"HZf HX zK+3+X d)uPLV9rl>%آEKr㫁|ƐnƐ8:apBNRRɚ~Tiү H bHQl,KF[QC6ӱFFNk’&԰% P,-wRj Q 8,F#ql KfFFB JT5$aAbPdyͨ X=J%ugR JR4[~7q+ĸI9PR!yd8aDN> Aʧ>94L,IILyH*%lq6?"JL33A QYp*fD1D" >Ԭc"S-,,9[i\IR#jr㤄!t^d`@zi^Bm)^w8HPl:pAa,dXIN"UVnZ~vIO9$wbLNK)p VaЌ'BH6L!'e āxC$'NI(M؂*F 7yKd+P1o8lCP$+jtIzZ&z[ZsB?Tx.II]>:i~- ̇%g !CZ9e<̉d#T|`UC*(QvCh8H&y1~!_ss-NA4B^b ҖHe|j-PLeE{[* g7\Ғ^F/S" O|&W9k( f rSH+q]ͻnc4\2ۅeDȡդgÈH-/>+ ,Hň~Ur3|;?t}ҦK.&ly"+9.6Jed+RYp+#KNm87|Sbu]+rr# ;s~ _*XJ8 zcˋQ7-9`cBKbsYw>fyzT=!dԨȵ%F&b 0 ^xP]dٲY JK pF*{oiJ<5%y"9akMDX`ay#8~ih^ _l H t~DmחgRңn[*b&ugʐ&ɑlQl.7h&w'Oǟ8%ޯC.#D10qz#gu"* N+J}/Պ6J<.=wc-M7;lZ1K tH€Ʌ=3d LdN\M_ڧ҅zlauu4E"cjs\tGylUPo>aXFo-:`XZJrbTO졣zN,ĶE^&ɇ8A9d=\/QHA XaցB$.t(f3̓=)e)~(ĺE=ImD^D`HAH b"vh;VٞU!-0%ty5vCjNN\UcmyqUqX=b7,W&/j#( .r5p٬?RfBk%}'ʲ+i55$y}?ៈfH+KؒTDZ!#iZـ䚠,Ujԕ ]zOb,<)C<Bx!VC, CrrM"C毬;6X"y-[5QW]?V;QǑxdr>W@K ,X ;} Sx`4 nϞWz-J84J=rq2Up*͌0f[(@!P9{]8 ~4\`|6p oxnABCa#%K$Qۍo@T Lg ^@$T Ƅ4qr_VlJq9:.pr猕rud)ˑ<151.ylDn  Wj}(0egT9= l_@WQ)EO˓Rg|5iNXA$*MUư[Z!#x7 09rIQ앜"H#H/$@LiGhŔlPxsB(DA$T p\~&H.0Pq*M@$4 S9F"𳾡#":H!.! 0"E%U<웊< 1M;d:OJ\F{*꓎t x"А^RRS&b(.Fў8~~y[9 !qNzu"̢ؗ?Ք橴NLU-D ԥɔ TlN[ _'Bȴ@ 魦8Ȟ \{ "<r6(<\_LIidS~8Q@]g -=.E) g1)HL MN7絢 L"ArZ40(@&ڔv8^ ' 0qqS y)r!R%UbT( a9>o[# ${Y~$[p^7L:,gFA)vcH`ҫ8OȫO`aN˹rZ|8MC6ai&2^h<݂;!9>E"l,e^&pO6I4Nf+3 g"#:;Ih5rC%#A ظ5NdAaQj8t$9^!'=|Wȵ4Cpq$r2րK. [b0@d,XG z.M,v8Ǯ܍dx: qj);^aɐK 8hP4'քۖ PYIAMDXd̝D>eQwr]>c-my¡"I&}/Av3rٜ.Ma%CHf[WE95Ike'#Ipd0ҫK>u[˅:Jtl 4CAM~yQO >M^P:7ki"4&/Z24 ~p.|QN2l$k :!a̱sӴ&if̴yQzEA%(T*uVC'C?`=nImP@V x}8lC`{qY@' ~IUK4-V`m&ylCAODvZW{(Nc:(%'%PVu`qK!tJ#lnN Nj"0:a-GsC!:DtšlGSԹo>엊E/ܐ׺zW* ^ڎif"Z\J\ g JO{G-} ̨~DEs&U~ DMQ$dY62-`4Ү[i{=-xl#|8 aqƁ72\I!\QqtrpaJ@]W[*2Fu ptOc@ ʅIHr:AM8_a!ON)b'L{Z"UsN'״9-idrD O}9_*SI)u">gb8y(Wr"lyjT$OȠHDdf6}~Ɓ*qDWL[x.6Pc}qVbEڑ@'u H%'OH-DrFf[-e5eNr,EE4E uSv#9f<U~QVrM\&vbL؍,PE"\w*&3*vD"nу]y)z•_ cR"O4MYAspLDPJD%H38^5@{bQ b:1ZPODŴxȑ uԴo)o߸} (`#S;p"!*G5#b6n8ZÄen8]Xq,UXGxV 8@w\.*GrQh !nSnL~,Td́![޶:gWWX7#%HH3DnDY=;+s[&ϫ>)WAa8$*wy".b-W1&JKD!mb!LvXc*"yą^[s~UDpIɕT:+nDЭ!Unf=eKMHS[, IyVbizbz"u,VPy5mM+oQJreYEZ+'u*I9uj^DԤ>k6iCMXזV--Ν'哧va'$gOnh~"OTZȊ?L%ƧrRisJ݊^h&{+ފnr&g+يnr&g+يnr&w+݊nrܭ&w+݊nrܭ&w+݊nb[Ml+mE7&ĶVtۊnb[Ml+ۊn򶢛&o+ۊn򶢛&o+ۊn򶢛&+ߊn򷢛&;{t[MVtoE7[MVtSlE7[MVtS`+)؊n ­覰W`[4zi4p6&&5ҮWB3[go0P3lG[/zm_ZGwO u5~n)}&oJY̚|x\ur43YִjoNjtךg&}=4'g5P LuTx:OŴ0 )&tphMPq`C6{۔꥿ O~}/gӛ˳Q5'JI-<607`ݧ7o3~y|2<}0T[`vvg0sk19_/;]L,?!>b/|s|~}srSvڵ~JVIb)WkEYMu "D -m㥖SIY] bA wEc~ kyxRtXX:p6Q'ΆF[gΆ5ۇɴS,IzA45t2I@yØwyKSAY/招'mC#$m{^ dqߞ7~tME^]4Y~ؗj*yQ5kQmSMzNOSNdP {ӭLxm7LYpYw/gMoh)(jrm2e o?4|k)l6o_I.TcG|˄H }̂jV/2n؝^\-xbnw M/#c%|ߵ-T@ U&x{:je5ʬ ߽6 oEۡnLǓqnok/72ߝ1qc㪨Jv/PFb;aSBkݰ{5|&iv{.ϖϬJtO)h|[~m&Hh\BUlGjn)ܛ'9!߼mZL݆Vb/0ɺ\l<~s¥~m:Bx/ˊߍ5\D/ˊ"V4]];4Ԫ'8RIvNj]R<Ɏv?޷Fo$KNrY'5<'xlnPU0WIs:800Z`;$|&.Rel/޵Yv'uW0Y"v6rySbiAQ۹gPj2{!]@9m.2m.Pf5nMM}FV,"ԊEKd)Y=zv.I>"bijjdu;4#Bu)R[8 Lٶ RcN%nK#"7`Gq XκF6c'VLӶ&{1E xC酢CDh+8"]")u!{u! wJm4Nq˱^pE^gݮg]e.a7[s-35suݙuqZ.6כ'!ȴ~κ`|=qie1tahc;iE[U6iב-ۼY1gbMӼ 5G,A|F4O|URe6[X6 G;S]n`d6~t }/\y@ksN#ܺO=i¶E/]g{bu%ta}U]x41iNj/dEX3xÝusv\3EPFOA&uNXlNf8Sɭ]XU"Y&l% s6tVYfF.ng ip!|ңϨƠ]:mgb~X*-عx_>Mx_{",`>=az6j1-n ]EvkW>9kdS;tnlBBgWoQX#?bqB8(iQY^𨃀W#fi co S@q!dc>doeIhs@L5yf S̳dlbׅ]^vu9 m\: 5.}:Rh<:5lh蚲~UL{ jB-.uVe[wq&o|&Yw@97É8x-myY:z/ofl+-RYèվVh.K5r̫NZJT5%_^\O-kƺϾ=3>n带@(rt`E(rv_]<4|c,;.,W]6'^4u`J] 6 :Vwgs]x(7F4.*M'#t0ui4K7rѦ]j'biGDi+.ZO||vC."H?>4zrwFy"շd77y4j=H駓IZFIOqKpδެ|s5ݬ4ddfMV2})-ՇɻynO < \N^ړNilQۡ2OVgT۴[ N&S+Bމn2eN=Ƌ51Ol_)]ZEVv<0eN 0eN؛5.*]دe.b^-g2T 0e' >WnS/{(&6_eA=sj"V3`ݾ8PuA#N[6oʑR)uXeʌtc2gocG.fVAxO)27777nZ%O7oYݏo0auu7N^P;x/4 ;Ҿ&}4S6,rvnە뢶64Cx.\k#N&UׯE*@HG&~z|aUJxEtj_eBz6hǍ&TIûh)lv;}x`ٳ^ oF'OpWA5⛋Fm0s<݉ox:rgC]pQ-ޔꢚG7UҖdc6'ttz~Ջ|JyIs8S Pۘiآ]% )1eEQÎSh)Suķ;2MT԰tk7ejfkW?hcZxZOZ_}u:0incoA W5owx#oFE+b1o{c]blnΗK.NWNv/vI3aw䓀>tLE0I̔7p=h\œdߣ>7$A.z;TÚp߮4LSܸGÔ}= =LMN5buuMC$ۈ鲰 ܏1Mfd'\}sqym3n%.*\݋xuAp3[l=ut 9uo;g~gv</2m&gχ7}}q=٤C3+r~r{2O4YQǓsr_Lvn#]:y8Tb,6|p8k2^} \ Hݺ=86nwNgubV LHa<5|S{Pyl1m]4"́oCwndQtfJf AwOod@{3%)1@=Cכ)y=CǛ)1C%Û)1⽻)޻)14㽻5ӛ)1}C2͔t.LɌ͔lNLɌ͔hLzw`LɌ ͔Lxod}1#d$.fdưbFf Dz/fdp?+1HWҍC !h.~-GpL>ӑ8}AEzVl3\Vv. J͆=[ōWҸW88C_mqӫF#Bv0ltY5Kj4.f_+Pi tV1tI'g:J_1^gto۾M7zm7ew|;^L/yt5x,*w6+(̝[zbsH쁸[aYrcB0!ɏ1xM}$cw51suV@; 6󌡽ic ur~h.ګ ǤKum.fmCw5Hl jX͠SՓ4\s>Yvo[zvζRTmSVnz& =w)PK䉧o)Ӆ4T.n-:ٯHKC6`~Bk=@i61-%ȡb֚ou&fuQ)w;pZA m4]qMs&o7֨dCϭ10=ܧ3e(m3SxT` {8zj8m=;0"'tkp~kc 3s5Y_PK :Q$<7H6 nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Php7.phpUTNo_}}{F<5p6;'KtYHrf89--/%$g?~ x#9q?-l~4AYF˛trudigq5&gӏwx?Fό&7wn85f.2dzG*NVW_'*#c>{cuTb|?^PcF_}4 G/4Zge^Hj?Lǫ+h[`,oU"z8ނA˯~4xL8hv4~;r߬>όUtb5%]/?޿O_.'725F.?Ϯ+e^؇jL3Cdx:E &- KFǏ!5+.1- g*qJeb~ѺzqzyKq/=ޟg*eBa1-WD2b J|tgD+󿊏NΎNώ7O'9)<; wrtxz}~~g'gWOFR7/NGׇFP範+5: NJ^9U=>>A(q ӿ_*[x,v.Fw8x@ s.V?UDSӳs%7'ǣDߔ|}x4К/BmQ,(V'I=)79ϯ?ZҳX*@TLPH#D,(f*V)^Gkt"77gb)+ Qޟ$%ttz~&kܿHJ^TϤ'grӳ7^vz*+a7o^)1zu*蘴_?ш*DʸҪ:FGߟ#Lbg籼sh\XRꇿ\_T%cɍyyTq\U>Y~q|Sp L "zD'9oϯcPg,ׇ<,.׉rD|*QbtdUxkouh,>|*?}.MXngFfm 9$|-$6ܡm_<1@'LГ!Auc Bx$KPPj;;\O"G.I$3OH>!s$IN Gб5H4rMҴ&}n&1MäM&}n}n}nUj"$!M :TcS&,*` &/z5aB6h40]}>}>mOOS! I@HI@HB$ $!! IHHBIHHBB$hHf!AC9t!֐&!a@̘$3&ɌiHHxLдn$9&IIc$9%"!2IL$9&IIv ȴE$$N&*̿HL0t ɕHHLLL6$a3j2^2]7%fn;NE kJDIytLmˆ&6Kp5Y4*$oX֪A%hSMJ5}2ÁM@v2B1d8>pD\cpp`<)m6$i٤|Rv24%ABBCԧ!x !ʵħXI4D}> 4xHHH|> BB y| ۆ4 !ig/TKKSBħz X!?LKsKsO*i *{$ +9L> Cj0EV75G2;l48BMBJsQ2mۂD[+^y󬬐Za C0By_ꈧ1G:RbW~j񬢪r5R=J"EWs.^$]\ C%UD]\H$]\H$]\pHd]K`gfj*D@4 gQM呡蓡1QuUX-||tl|#V4qQ5 &`6u&.J y쒵o 10<_Xΰ"uԤ1r^ɟ5jHLI\|L +isw.'v Cw6n FޡqAH)l˖}nLAǒ+jn8vH`H\bd8mxx]޸d㾑O$Յ"bjvJw%6 EС!'gB FwhLZ80"Hs$. . ?gARoy%FW}HÄM"h&)ptI3ik&j94"D hsBʩ%!ڐ/|'b"*lL7a)dQ#!_Cmh(-Eb _t KrBZ?BD ="'-$.ԥTO->u/ Ѥ!17dp%|Kjzb0H[ <44BXq|M478dt9L>xdN!aSwM-s%Ji$m飀 Z8J$9;hk:5`Mo$8!~ \"x%rUfق<rj!:4ML1Bƿ]эĴtZ|c |%E{8_VMr'n>>7|كFuUEyFkCB_X xc*o<Ƥ߹bEvq̙59?ڀrqS1sX€X[ ~{aƕ( bC$"D % 22}\)xBJ&g :0{(x&]RaNL0ob2 -L[-LMZ EG[pEщ\gk 1VKrc3XVELBUdB-tc/N#66lt4=-|!-ljMF1dM/1DBI c$2K8.U/V ְu1 8i79RhxKmr'r-u=,$MIbsX PM)"^sC_Qbx5 *ƂMu  F5H .8؍ȃ6a`p*Y ")mTû* !AC)GFY!ĖCʽ42Iia#5ߦ%I~LQ[#0|&cO$(Y",DhTAIq# 󱣈L"䮄D9xuH[?UH#݇tA PA>$QE`"OKA '0`Rhs (l] r+ /B9px@|AQ58 6{rIybrz<~Z9_rW4'b b,Ŝn6q2SLoBΦ4X:MY/, ?kA0s.2Bͺ^LTu-+\ oz%80n<#H1Y 91L c-9$r:C0ϋ^ _*_\^VRAw ߼:bӽwR̩#m-I[H ß 9[60 I9dK.Nڭv2I^ [v)~0kc gp,W+Ɍǭ9+w)Ħ+,%]gtt1,au16E2Jو] -)L !j8s"*8Bup )aVP2: h.f+ H 8d`آQ8>@tjεr̖NE!dxrȘՐ+p,jLl78#_BF ?axD: te 6"2@v“IV21ΣbS\/ycyS;d7f^R'QBOi!⑔ &6.w.%.wQi''aKZ 4“VU9PœP7c[h0sP m--))=GbP!'vRD8<KP@nW24PgIUO I4F*!E$y8`? @CP<9CU&OHi0@rҊ&))CRDHъx fG5i)m|2 ^ - ݇< ƅ|"T8QCH Ey h ss+o mLAOy9!$8QҬ7`)?1a/W8+)@wQ$%וiC_a@ 0L }7?p0-,Pia2HV1<@+ķpCC܋3Ca8?n! >$L=􉺘#A '9 !MEal[Su0tg2tv<< dH=촪qx]xiAg eWЃ`p2(=?Q8_FN;{˷KȄQo v/S$S!"x98b~Icȍs8I@5AK7T> fs@8lMڃ3 HhG. V=!U9s[ #4p# C蠻qޡWM PC@E_r~Y qR HPo`BaAG"&Fq3Ft(I,H\"Ҽ,H Ȼ`PўvzGXJ%- M&/:p2RYyG;.☸)SB iR.&t Fk=䖞L吖!@TJ|=Ι d)J4q" jELCboH3`(F`&Ï@ZmR59d%Stn$A:0 Į1}Ka.L 9$xR$#fA*A~B '$Z;wApxI) ᩮv( CN \18_Ғ!>ϑ#Ȇ;  U$:>ka "|s-?sn1b"Y; Nϡh2aJ]+ J?t[wqxAތvHr [>ܓ𶰸ޙ=%Y  IOxTIq,C^^ !AJ%[W[oy#eNAd6y<±ɑ5 ȓ'-ؠL]`7DhyRQIj!,wtnl=,"x8rv1F !';B kT)P y3 $=/46ϤUfL;q.1"҂K8Idi$?Lk.Tҝ%L᎔oz?cC4cD8ex̐D[X!Coi18-REYa\ɢzAnpISISCeb0iII"@hb~X8" :q[һɰ1CBa^. ݳs,HA Aas$qD Z/Q  t$=h@fr{4ePM`~ǙFzv47N"@2-v,ފf.!VGdI0CBA¶lO:Ŗ4-+ $T% `YNw Oa$t|,yI(X.<X;(8>ihA,#OHBvb:Mj)aq+2#AiC33P.#SB"aRZaPDpn1!8e-aeD[n-<-szHXB\N. o,!AV-$][ȿ!SBaGĐ jX vxbg _). $* 2c-XS(cD)=S?G>d̠ 3 b5Ro#JV#dAO6? \BKT$ ?JsXc#D2CFq@Y=S.&6|pCdaS_!$D1"P4.&3!Xjttb2Rv=KDEgA"-Oc\%#>$C4/hRq5qHz]$xIj4YtIMTwvDo$.F<.?6ET32D բA[xFW*ZOfiefc2Юn)dבxP@¿HQbv"59cټ" H`9X\sK&COgAaaI2 0sȳJ^,g#wbLeI(`P$u7$ML@vI+LPn0`aEs|w0Ca|ˆ})Av%`q! #]SCY:nXæC,qz]+ IJkFz%PNoJYՁγ>hz&t A_oC&vv/15ʜ{gz3Ȯ )! ${CKfK6 HjC5P@{KR珙A=  ?v0̡#!#:fiFr(lmxn ; GL:ŏMA2rV4$ۙn]s4ylѰz9tD(H`z-5AU@W'\P fe;~jnq ${X H4`r4}XݩWXO"i?!DCo+6-ɏ x{R$?icZR,lQE Ɩq&w\B@ɷbNapBeJE! 9*ruTzy'- OA(vT䔉7ߪ *qR7 Ku5B^bN5TeHB'*.:t{*Yʓ2*"XUE˪CRlO^9<7&"}/'O~,kX1/G%\F?Ie2m_!ۢZƳit6h5'|FYm5yo<,'Xq1 }Ui%t uo7CviUEv:\wh8EK7ۃ}4[-X1Yq_t6H{fWs,5hnfV%V˅EURIާ+Cx}TQiGa/G?SV9K_m&%}Qjmڋ^2{QLf/E5&d^tՋnzMV/E7Y&d^t݋n{Mv/E7ٽ&d^t݋nrzMN/E79&^tӋnrzMN/E7&^tۋnr{Mn/E7&^t׋nzM^?{t&^tߋn{M~/E7&@Ћn{M~/)E7覠U`[$zl~trVhQi LƿmTt %QE UmtPfn(j|_-RL8;NJYlIi356)avI^JAu:wU-j>K5?0^L僚F^I/dPע-LJ*:m $Wnzdͅzl[5Xow\t2KaǥJ[_{  CgOWG4LߣEzV(lu u*SM'5/#~rdvRs?Mrn:&kZ0'.e n^\7} Q+{#nrXfH}de?JP >FJӣudv *gUڸ : IoΎNjjh@ɵ]^]ԪpZ\}Ucx%ZAt]MU7g>;YS~xBeZUI#r#:aלv;NyZ9V( |ho~p ly9_\?y{TS78BQUO$LP1Xrjtz*9]elUmvH::2ѸƾkZwo %xA0"T};fcKzkV:e5-7ni @߼ik7x,Qu>,kcu/OjN[]s ׺:u7>^]&~u%>_]@5$n0o7޳duódwǂ5]O34mV+gm:od>-&f7N?}b̺B[owNSd\6aۄ]M4Mb C4PƏA b&Aꟓiv j T L&Ӯjw fj>pf>md?)>C9:־-JʱƗOc_+Tb3G]34u9fw͔6k%u՗WW/;\͛T]w}ukn)좮Hm5Poxq:%,-WMvY%: w;T(jaݭuu"qwvKꨒ ܲeUBVD@|]su3Ի&X"ɇ~覮yh]bh Z.ʴ7TzYuMht>N(CtvI?zXߝ!n֦r_Mf{C-鞐2I?'Obҏ泛qe0QPId:nHkĤ~,پp@Cn-%䀎tTJm/ee_FD/`ݾp@z۞;Ѳ:.qeşNf7-v7|J+iՒ$\Y7GMtGNt.sd6^|L|gbN{cQw!Vf<X7;Y-F6+ެ)tW~-+uaS2`.#L ]6[Ɓ}r+vNiW~P&+ҾG{(sߗ=IJԈ^ߗ]yuݜ5 #d/T&7 us9:LT[#KQټrn,}-1v,(܌Ğ̲Ȁg\F7k7b'[Vhy7yh7.ii"_اQݑ!IcNf񗳛h^};Qtgh_myZܫ~^)GGϦ|qT'i;)lQД#$tQR m)9advnx:LoM?~NĘ)>?; ٺ ѯn>cSG^b+}ץ⭉Ó*z2ْiss .Y@!ZǫgTX up<&j`3u[Զ˘U!%("0I=t2w'ّaˠ"’- KDdՙ[Y5-\-V)~q>YbFZG<[z+yɨʦ)k]h/.r^:]f|E6SZta_bݺq[QyMckԂV*kܥ iB萔1œrRUC.l҅M]VtMMDfos݌x9Vnqtevr7w4bL'Zn-U*Z-Kß{f^_9w _<}jɐWs'gߝjtl"+8Fa o(-oTO{Xk '.5;{BD=޿>nj*6#m5Qz;ڴk׳ At<躘Z`s-TV^Ls޳4a5.k\1N?I:XvMIk]w}s[nisvX{n4k3ղ5r7ڵ%4akmi}jTL.}#ub\]mY^mxjKQ|oE]-jڮ;>n׌jo\_/bqU]mlӡ<8'i&LMl-rm_5vݖic/hE?MK$t#tKO͒]].>j*]vi9-.%Gu{8%cK[۽Uڒ/zwqͳ-.M]sv>OORj[W[r'.tk:?Vr&!4qy>CC ymՍV_sc6+}0aq2@3o|ŷ6?e\F__~]ݲ5'+tO'WO>:ѭ-]hZt;F*DtZ[뚺D dܸck=uӺGd/Zam-!\#\b1p[޵e׵4nZX-]uvszlj*댏҄ukX-":/Z,9j0_cM3u[+Ϗsvkv5kv}ޑmwdeiZ-vvDiua4R^&M(ׁ^])5 {B'Om0=ƄD:ʯkm%PK :Q`x8 nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Tokens.phpUTNo_m[o6+M[lF1T)*zx_E{GC9xsf__'8$rv<}L>%dɫ@Y!s<<'ퟞog_9<|:|Lc$>w{ݒ$$s]xw'MM(9F~tL_~-ˋQύ֩2;}XLKml5\6Snٸ˽+<7t "0UԦALv *t8TA#A'; AЩT:VQ:ϩ U)uVLWRh8mo Tҝĭf]G[TXtq jV.xu>x@U(cvu1Xv퉍M1ua$ i[Ņr(M% ze[Jj5Z \'<;},nO*u>Y,0ȒgIC:>M.QhSQ$C"qln@ku&/u|,BiUު"~ hH+δ0}smi CebwwH*Y:MK)JnѮcDƣM |0-M-'r9@*ZmzץQg3:6RPAUE!h::tv\e;UmBf Śz#`5qn2\ ٛymӠ 1:F6jo%<8{+k(|P(U cxvf 8=7'!5ׇJ堋 x2N$]ӻL@1 C t@( ␻QiQrʻppe}x=|t( aYbV\9/u%O膽&+f )K~]-%KRVԂrW..2c/2ۂVI6gV .ʳWj4J'0Fo|ޒq ;;Lms|Z=YȞ^^`E[AeKetQZ| ىb:l&\cx8?Nфe2M'po<.D}cX=`h/_;9da!9>Mg#(I9cV_YӮ6^bg 0a S{A@ CpЀ#,"L R'O?dhl\h\yg98 \/(Wx§j^2I:\YA@ᖳDrRy)@ ̯tP8zU$~Ѓԉ^9( OwICS9(%FR,yYA ]YWP9g<X ނy|H!H '+19P`QoXǼ(b`)p؄VN_>ʀ&IfEEhLo.gyJ8K'$CQ*aMVJ|mAL P} KpjηؑV$V>`Gu8I%[Jl5:]^d+:]I!eEO'F` $yx:Vo`W-fwg4SN^B; kU^dHM1cF'Ӡ Wc~j45<Yܪ'lTJo8mQ]ҿ @V ,ZyY")ƈzI`7ֹt`3!IJF+EP8F 1'%XeΖИ[o=BеXd&Wn|Zgq: d%QjZ>RO(c]@lQ aq:'Uݒlv#-Z?/1D%l/\.LU0J₂$9vdvsayM/VZdʢ(x)N9˳w)vkÇ fge2><4 j4c,DźZ#s 6q>P>pq1s*7AN06c@>9+FXq %>RłQ3tŵp ~6#_MH_@V >ĝ(lt`9ᇳM.jE\  RNS|IW%rԤ)[k}7<l )\g)&s>q29T>gHVi]J4.Z*Qm`ֳU= 4 ;V{;$^> MhSN$eᦴAvUIFu-6;sX7X)ق+BOIZQ²?H iWB ͫOr3׆ޖ ј'FR)J5*>hv.tvD83\kol+8AJztI׼τ:HLQ'#Ɠ M 0bN0|?JTfE[+ :OhII- Bl$~ؖ7^ Ȣ4+dE;zn- &[khRX&qI0*p*EE"-,)B ?i,Kc d !MlM*V`wD[YEK[,{sS IjS &l4[nz/P\ ɷ_녊ϞPA=6ܩk#_Ӑ(c`b*X Ӻ/f>aIlGd7{wN"Ql>} rP ܽ'Jۏ:W7`,tcnZ摲u1꒴ۍ4fŒ]vJ@ C+P;?<=Gn/hO!P O`M^4*5`3|v1^[&sΞz(#F s?{R^`ZƉEnA. 4 i9#0aT?8R;bѣ]쉬51PX]嗏'`pjnjjo I~CO=%X= Z>_D lS/*ՀؠVUh>1Lu{1!YIIXΑABUlq $J-m@фaVn (b@x/їw: $]=tא*`(W_C13)$a@넴l1=izҘO.[ l\re$tI+&`Cv(Av̮Ј/s_h|pb.@hTiTc <?6Xْù߾Xu!JT;4%`DiDm~yguv{kwd؈cPٺhp$bIbspsnxDhYnA6)p}i5}̧OK-k=*T:T>sJskSE@M1R졋>I 62rs+k{kmM^˜ԛc"2bi ӄ3{h$ъ;ZKaF>6B߽(Rqo!k URiW|_M i ؏kSCP\ cIXmoha*(`dn7U06;P13Dͳlٱs1=NͪKל!+OMBY|N(|Wt>Y-1Y1h}F̪K$g`Ee,ܸA-Q& fVkJ.rvTGՈ!xN bw=fg1dZW]@-:Mxa0NjޤeYЩgE4 -y\ P#,6`eDF&" hd<&&$Yq 3ҞHo<3ga7j/hyٛf9 IӂV/&1t NoK{5 m\G] }wtQC 3^ZUhIƁJ _[XRkaH v:ؐTh=`I(5LIו1xOsAl>eH͋Jeg WcB n=Oߩҵ DmmK=3 ,W+]˪vtp]]7GLҳ>6X)Nu5Lo5 #ZC*D(Cަ?׫t*v<2ϗѢ@+MNtʭ^gk0Olq6(ouQ!Rk7SʶX"9{LAI&.l1w~8胴^T'?V0i<`F1u u3-FӆV e Q11@ŋ(~X2LW]?/̩GWuZ)߆H3x15% HˏjN3A+mw2&NW$N>M ,u$v 9z>atJXcg2@]fr>C##h6|bnfIUՑYZ6 ӫ ^P&ٖ>C9,˰>c ?J&p_0A@bW<;UqpЋ'jo%%ct+^X]%g;;|89'v7P/XD`nOފlw7r!wo Qw -gڏǪi,* &`d`\ǂGE:ʩg%4\Ts#nB۬z)MRV/^zA% c kK𕛲W 8cբĽ-TET`9GҎ`j"[-M %A Xwl@7J^+BD7DNEmP>W*:E ZG}M vjq[bi)3} p؞?Qdu~Oyd.X4.4 _hf>AX ~~Pu&OKp-w@I`}]lMXJx\Czwo `ͯD=&>a.G3Ndb/@d:oۏ}G([}Pi(Op# N26GF$age}}Au`ŁtymHp jcF|-â]koR'b)4wB5=U.~:/ۢ_Ӊg2 ;UvU,:HNXv]p8${{vwiH~7bظh57Rƻó,='%Sm lA!;+/E-v{F[9Db.; ыm6I.PhVȜQs*C;D5qpO{> g?-]jQ -;m%>Jp,b#hE.OW9oץ xsώT-zJo?zwBi~yH{gϟ 7۴y:=zm+r]P|7aHLRU./# |<qYv8]ӘidtIKHkodb!~~BJѴG6Th?@MV@L&Q_Ilw:y6ne+ 4,)"S*M;7獿&L/vѴ>ib᮳;4WN, LBzvJ1 ͜H:`~-:Yݶį*qsVU2@T}7 "'SZj172#h]c} t9אZYET%)6y6Q[6=*ψk')Q&r+Xx(A2yI79?+TZ)4okZ4#RiPE}JU[Ql4 sbT8O }e":WcyRG[jGLrN&өwvVIyQx̻n #XDSBz*J[&{87)+Ĝ.8PO =+L=<*:8ӔGIF*UfB0z?@ݧā I.MOr^3Ol/PK#mN@@!_s;' "韲|YvV ?99hDgʹ Py| Vo߽:z}tQ<ŃLvR-G2_ˎzXՌ*`=j6Hn~f g \.(0ߏy2X!] .BMUH߆HҒ76_YBDz<|?bL1Qw1G'68rObX>߁ :ڪ'L}x@Ĕ&cHi3%!yN}~WyF#2X: V⏛h'bVj351xPK :Qup#N8 nikic-PHP-Parser-658f1be/lib/PhpParser/ParserFactory.phpUTNo_Tn0}W܇IKӀjRJ:!Qj֩r"u,YWA;qJccs9$Hs"WZ2z#Pŗ8Y"L31%R4kBu!7LЂ+ v>8.GSzNMnߚ=/%W\z=x/hT@\G&)@(-dt:Cx` &H2580 G(Rpo: ٚ:c|DygWl>|VvWeN4{@ 9BHY0)5/*;&B3cccNQOѭ[7Ey,õ,Wu&!jm7!/QQHKNmeqw^` ?gWq옂VcǏlԸvRki~f0OhcÙe]>e"Gl4wʯ;Va88<(r{R+9`WIdw㩢,ҿ_!o!d8gbb5}Vy?z[PK :Q5 nikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinter/UTNo_PK :Qzfa53A nikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinter/Standard.phpUTNo_]{w۶?ɺXNr9ױDgٵXJSTI*O;3I}1 b rdSnVa8v4<|g-xlNS+y0> xݝBȟ=Mxe?йNo bZa:.m /4`8R>\P-"=!;,ojSƿDܛL_=cKn;<.|@)<;r|a֢Km!At٬mEs'^DQ.W˰KQ$dER$3sxP\&,D:Z A:#A?[cMbq1)Y+7+H-cD^{7s17XDqXPpH?JtIte|[yP?5 Q&U(=NꨰcrlG+׵]~%rWC:t*P Լ,Yl:.W-s2ɰR!8:e{x,%x4j^",'Gŕ@2 ,%DjP"Ɣxu=ś&íO7DڀR}Ȧ|8zǓ oȞC3jN-4hztrmx251~(3cP68EoJgk[fΤW^裗/_vDꝱ' 0".O+A<IF|+<{®n}b  Î iAȞ<*jC:JJ0s}?8>uodCDz"@S/I#,R'ݫoJN># .#7Q'ş<~ƃ/6_z@LYH 22nl6` ŖCFM#,mymWKԇFni}tmE AjWB4ܟ8DN!bʹU@do4 F0ɜL@\7MU23|$ǣqU$-d8|8"_r%߇#04GSˀ`2NΓ_sh/3'd@1\fHcu(6%JflPR *C2LHnZ2<Tik%{^D$5g^C@x[ߐ.ߐhE&uVo#;EР_c_C"T> f/oSټN/jUտY})ŏM'*|(k5ʬC'ji֣Œ!9-*kWa4 "cfhf,}0c3hE`m'D'BIT_/,\|Ӭaŏҁ|g _]PPjEa -냚p6K3}0g 4bhe>H&eh8p ^'by,x2$siOQ f!Σ44aZ`kbAZćg^?{jS(P la1pбΎ``Mg$A{*(eУN ͙[$6Lȡy{y?n=gR*N-;q\ mi`NbVԡpT(z|􂗎D*s?rTivwizX`i:, *Lg[ 2;YNNU؍V`ʀZ|OHbm+Wi嶀r /ܳuAض4+3Y|RT%p? :!?iXs) !> LW= pno~/ Ŀ|̢c>S*VoBjF97<` kh _^44o3[_9Hƴ JrƉE pxMfI*m&DtP8'I^͜, cmY5NT"'C$ɨ{=[O'9:̝8(* {.s\(A-ڊؼZxp+⊍JBc!'Ae[Fr]U2^BVliAָ+$rmI'MJwhS҄v%aM̫U.|VƥƷv^4Z^擖l\p >ANlYEaUG]_pg浛 dMD k^Y2љ&eyjTRH{SH a ZA"BJ9}/BR{`ji~ee1#nkV @w[rk",Cvi$hÞnRSnR˘FӄCƵ$Lze~}Zӧf?g;O[W0UoXCk* )oTS2 HT$ U*( PA%"LPâЦ%VOӷi' 1%t); b3Ler(VNx,٩oh$JVrxPGUqs~Md I zDDHhɣHY<Y$%_s)n ҆^,^tIkIoO.r橞 ͉f K&bPztH{(yRP֞DQu'Ǧ€u\ >sSLJS:ЃSSDDๆu|B.EDM" Yw3:! qٸ:Xٕf8raJxǑ=uw?qq$Tߨ'oM>EWb> tj:a絊Vi/y}6К<5o=}}L[)€Eܥ\+~GHk_#~WFƷMDsXzKsVWr`-D;+R;q(jq;PrْʉOe|cͰjDzdRea[ k eF2<LG]tr2:D gJs HӬ%i>+eLl*@2+y%T4[NZ7A+]"3K:/vbHS ѓq,%YWVw^Lh/ aSxģk R[v[>Mx١9%չE3>F4 /'wng rLnUHْfAV>bϲV !X%ONC8-ԆSY9w4 > iOASg%,;fRXI+Y2 d ^ ^]f} jjҗр|؀jlmK<ҟݛ?8ԭŮD/jqqQ`cv&ΑxEw*nBbxwZH?oh/đD1Aio0""P窾[x+z,qi;vlA@^.B\ _<O<;~3{' ?Ҕ굁bQS;AvOmrgVA k3Vf~-^Wֱ6U,.)J[1^xT>E.m>Tn(W"-HI hO*#2&C:%\, p9<뫾-聗Wvt^]ٹ/,=cv/{Ρ{7xJ+@Habdt F؇^ծ8),>'ٻf3 WEDZ&oIћ5X!4LT`PRP@lVD0UtjHɅNoAV"iC_8A[]Z eLޑZc?ކ2 5 E tplr,лk?<_u$nGvl%Ջb:zEqU cT{İI|)W&defXIV\*j۱l2"H{(gVw3؏Y4-Z<1.#5»`QMDp$+ơ(4J :!ة8(9^i8nRp#Pz]yA-* oK|`},^|L./Jnn+4?rBK= +8[ģV@mQDpe+G"fna,1+YXMQ(u1m-=KiYqR \o\ugg,Ślͦ\5R qge?]U)^JLws6mHG(eE,G~h!_JYQkIJɥs\UaFUlq[EUMH<Ϛngu*.6aܥ2Z#/ M}S0Xlv2<]>V[Vd%f~Rk6z7~H#U7^5&Bֻ"=O_ʋc8֢qʪ+O"WѵYj2qߩ:mIX"[0Zh>q].^s ֧SZ=b+OfЅ@i< lu)4ѠCZwV"db:kaLux : qWT*3z_AFl6Jbu]\]c qffpZ"fGHO6;⥬ّr_p} =@MZT ")6oœw(wwF t˘4&b&Q)Wz5H6T |Oi( _Cd!y=X{.Yŧ. |5 [ү2"^\#"\{]_[RsYS!$N*tjnw'j 'jt謌F; phR]մqnܚ:HD>G1sbORxb>Ǘ_Η&C-7,qAZөBulWFoǝJ 1N XdhaB3(?`Sf"0g\ LvvK|ąZvlyk<~T:)oa(xZxr[ΩsL  x+/؝Yזyֽ?_<?OWOWއIwk!' |r~0Mb^T*]oWfY|b(iXTFTPigFjt)Vl*,gT5s3S6&.{y(yfH)nnT伙6xBgVgWSd#~qrt.bYB7ڸ+PwCn5' -aJo2af>1 ظ|u5%' Vu._~ɜ6/Y URaͽR4r+gxtZ/IӮ1/D_]=I{"J촞d+@X{=oPK :Q@tE`.@ nikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinterAbstract.phpUTNo_}ksF XR%Ρ%*a,$9-WC ket<0og˪XtOOOOOwOO/߭nWɜbúYsܯX*%W%gYO׵iѰHb1yYMzv7. O eMR+½|ZUou/NW"c-Һ񾽘4f 0_7t$3grV'j,}W feQ7ooή'Ǔ˄^$O'O$?\$Ui1Oł6OnUflΊ:~åDPo`|||$(mZ$܁9O4t9W̲=A||09>4'4' jm$>?YŒ`/u8>70Hϟ''㳋a˚?I1KW5ppVWʆ3}etW_I4};J@Y,5fwdQV&ϒNO(yJ%GH"]eoK.g>[er$OGIHe5;)y`ELC1PY7ЮU r,_X<z.*k@oɯи{/ӛذWe9zSϿWY^_3g";;\;d d/aQrnchOnmA܆^99[xID#F1"@!ֽ1I(Һ| [a~Obbأ\~){QU.ŞLU-s\G]?Uӟ|(layF@ s=y8i;uo-$gY<~b;1~n ˳6$ \>E!^U<_Lj.;8ESz g֠+(q4)8A.w(&Ŝ(&閁r290GdQϓae>/oҼm4a M.$"%EFn"7IBf=Z+9.Ú* es6[# }.mmDb(,ɳя/ow F) /i&3V5)cvbd Iް\{vK-V.wh=WypFpcI K.o"!I}3$ZZI:g80`~ <t-@5=ч3Ei?حifv_g w>yF[H-j| ȬVRwYQط Kmf %_ PX؜jXT򣌊]4p= O 3'6ߘb>JoL%5OMSȤT*0=zrrx=Hes 1߄Cc`O)nw[H9gGaCk C&|5؄asMh*X |rǣhQ._fԨd_"vA_Whx@)6Avؗraw׸|3reuNOt^sf5NFc?öY-(ݐ˭d9pyo劑3Ji9s^wM-0#}1}0ڶZ#P'PK]3z2CN p&Qc9<yK߼'V;:͞g庥.MZR8%ے/ΎyRWEHdSvNgV˝2D6 |r4J>Ϯ yBVgғORh4ծZ9UExϥ,ە|G%e( G洒xEA!NlŋpbWOBI?w oϖ<"Gd0NJQ휢`r]Ls F*W_k(Z 3Se-ETm\ ˆgIK]jDsx!ťun;4|:i,xI_-9É뾯xH7^3Hƃ[h(nݾU6"Ń?\l%7(zxϚPR*!*D^您Vm$ʕSJt+/sqz{)(r m .Om%4lA&B2Igd6tK HxʳJqLwo)͙n{۝J\-%?]a-r! )ox~bqڟb爓4 \SLSPF2NB3ft+N;a쳡Fe<1מ=эdG?:#P-o E$I͚N1>#Wrk1KUY7_e[8DHE/M ²Ƽ y8e9Kk%JN#I ti4^mXA!v+yX 8k~_Bx:/5jQooJh%=$AΎ9(%|R;X|l3*] "~m>닎? 5M7{PXpf4fX,w\߄zo.y+._~/܏ƒ{F7>?F`8p]x2C,!ff`AUֈCəRWr ^T9IF4x@M.8S)iXԔiePDGF$YWp-N gj.#+eYm{/mjQ]Q3)䐴Ny}a؍qMn,KR+f1[DeƎP3$3!pL:i"KxocT-ZB`gڧgiBJ9ỖAYZ|ܴp{qXHD,Wn8C+ŦX0Á|? iq۵!OLEm_5%3D nt>Ik }T^8@4-Cto 9$<{dtãExnPG`iavpA\լ_,5KVV_Ė8ۧ:Jy[^kWT.X/MpWL`LƋn՞]/ J?Y#Fbz⯒ﭥЎ5_mgiHGWLLʤCnlB31d!aa}`$5?K2*Gqr\Bٽ- /˛qx]v%#u;CX/[RE#n HЄYSQr̼,Ykj/!cbE~ 0n\ؓZ!bgu Crr-mKw\t}Fr&ZŸ0:rv-fn}aF!kV/rVd!Մz%Pa }Tjg:,tk-bpzxee+݈pٴFZm"/=R{ d (?d/ÄgJt0/(Mê2i?) V;}Fg󛀾E.J x[_#dcu˃)2f[Jysy;<1c{~hD0O ).-[g}6D0/Ȣj-qɕĥ>ZǙ:G ,0uB{+-Sz>UpHdX:K)8oB?p*V:?9)?5@]Κ{,3bE?(͂uPW`8!i:qqZ'jrԢ0=~eB.`r֞OuL ,=Ԇ8wcmtYsґS#23Qw (JPO-R %jOO0ىk$۩Uq)F Gˈ Π-XK_m҂nYq }h;V!G2zP,BgIOŭ S;t ՚Z W qb `Q{gA QPl-^+dݗ.DJFH$֏T0/Ǯ(y%kg9-x'`>”7tFDBN(w/n괒%=,drDXP,OVK 궕lNNo ^'9kD>!;ZYV!A!"D9S0i;YꎞyN`$n]ga`G20 m?6Ϛs֖Q!1xu˒S&GюP{kwf;ܢ(VBԒN[wt"k?.zO}2;ꠐ ta.u$̲K $D93 j|7C8se1Xw2{>md/~6drF b'gド_hQfc"LHMˆHpv VEo0N.U\K$"vjύN/(R[ ҭ=97g\D*L^cUl2(a$+S4ndR!F>VCys﹊A'43%m^oђ.Kz{B/{c9ڥgޢG[n̿FFoNfD:=ӯ"9t7,SJ֢ =mP-7%Z圩cFwvdKX>rbZheX1N:r k!0p5yP#>!Q?wg |řoJ<Ԓ[C ϘI-4uЊ4c"i͊&>u}hv٩\]1nL{ևR]o?mt. _TeMNجO9l4vGYg`r0L4c.Qupv7;Gĩ?9OM(-)fNX. wUˤN?q|xm=-,CgeT]/MYq3*YݖfТ[#,#f߻ZBm]fixC~K\/@%ӥ4xaFX^J|1/W95 x9U9>Ir]xRM_&"`| l1%?=^wߣrVmƗ!=8mUQO3Fn]Ч Vg7IO]ۑsHO773?N{ 3+_Q/348 OQ[ z_V#ާ"]osP$>g珕/TdrtʇBI9>]hw>!bKga0/:^|_ca [_pE!ar7.}O<9s&`|||}Å:7>Vdxd::.2%EOspr>9d՜L{u>>^_O:pkaOy)3Ub0jAl`kSM`|v19 ia/@ I1KW5󯈀`B&8w x= 5̚N'9}v.Dϝ!\c{ƥG`ʺ{Ú;LͱfS\l?brbv[۟ *!(R>Tv'6xlTΰ PҹY9r׮ mf>_og ?#VQ9m]\N%R{FJ& b* #碪Xȣ'M C?ⷃyMTEQRLd/>fYunثȑۜ,[Y`Q*9JF< jL >3Vk g2(P'j(.cL83;5kO&]UpgFEfG)j-؊uj/'!~}^|*]vGu[HSx=tO&EIJ{9SH+AzO!(I}NI{(+t(Y >~v[; A38h'TK Wзգ/Sf&;A#=<'_^\"KxHOPɈC@CVP:ѣ[N@lWFY >,j(cʦl_|Per5VHȋj$% Ă!$I !eu#r$¨!eW'h:~u<1DRiccl%ƬE+}k?K9(*+M6qB:qTj#wGnzn,>w}· ݀yw%:S>~2اٝ_7 :F}x},0Fe1Y^fST]pzEٙwKXVS XڴH b.p6 0[f+իj6.:R[axw{U9KnA欞1qۉ\.ޝ7k_)%+6ob8aT ܒ׊aڳsPSc}M4uF=4!TWƝwٯ4wTJ-4嫍03(F0 Qg=UW ʢ Pr< <͐qX$?\+(zrXorf>gC~|F}z- MQ3>@:킚=c*&4YtP\zNSdC.IyO7u(z^[# w(L%v#C UHxL_DbWdQ^^rrqfH97zU$>䴗__Wh; ӟȃ2/ iFUm{a먟këKB|w-?{ @x;L} q|XlSɧ}g|`"2[hM*iC5wqGި֐RjX(,MR {U.Hl0U-(UoC; 8qJo_݄dGMaq/.`h2ԉ^ Fzqg%|D 0,Rj΃JzҬy<]a g+vq Bۛ~=; 9a.}6R|2k7ž; NypgЁ/#sNO.'o&=XMl̳\!)zFîl8Vs>|s~sHã/Olb\R&7Ix;*f +J8\s֕Hehng3c$Y;t;va`.Egt i !M-'6}ٞ J0T3;y: ӷ`*!w$Y=%~۽)` -D۬])3\zun0Ǐ=g``*6r`P&m1Ắv1,|ȈsJ-?'ےo9v`_5ݭTVU^x7i_'aUWoU.mP\UE[[ftLn_k{*BN5,Q$tԃNvՒNJIVzcgV JesQ nYlGbУ!_ц1݃&ݍI"z-dwsJ6-F}qWSfjګRs=&װ5?RU[zBٺeFOC7iOVgwD5MԯevPXg;Q44֥4Tm*]OYh[=hAͩ/h"=򢓯7p0'!/[k4aO7$p{[3T0gKQ8pC܂2xLmIotBE=nhUl3=储m< :d1J"SZg`LXu׫oXxJv⡤UqbN@-Gq-4^ rm,v%/$߇iެO\CӲ -2e6BPnT!ݿ[ 8\`˖1[ٮvpTiJ[ЗS GoN.'kvqnikic-PHP-Parser-658f1be/grammar/php5.yUTNo_PK :QIa ' :nikic-PHP-Parser-658f1be/grammar/php7.yUTNo_PK :Q 3 g[nikic-PHP-Parser-658f1be/grammar/rebuildParsers.phpUTNo_PK :Q_־*0 dnikic-PHP-Parser-658f1be/grammar/tokens.templateUTNo_PK :Qv ) enikic-PHP-Parser-658f1be/grammar/tokens.yUTNo_PK :Q inikic-PHP-Parser-658f1be/lib/UTNo_PK :Q'  jnikic-PHP-Parser-658f1be/lib/PhpParser/UTNo_PK :Qm2 Wjnikic-PHP-Parser-658f1be/lib/PhpParser/Builder.phpUTNo_PK :Q/ @knikic-PHP-Parser-658f1be/lib/PhpParser/Builder/UTNo_PK :QFÛlN 9 knikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Class_.phpUTNo_PK :QF> bonikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Declaration.phpUTNo_PK :Q;eH? Kqnikic-PHP-Parser-658f1be/lib/PhpParser/Builder/FunctionLike.phpUTNo_PK :Q3`m< tnikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Function_.phpUTNo_PK :Q!= Bvnikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Interface_.phpUTNo_PK :QDb 9 Nynikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Method.phpUTNo_PK :Qb!= |nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Namespace_.phpUTNo_PK :Q}?Ȣ 8 ~nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Param.phpUTNo_PK :QI ; nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Property.phpUTNo_PK :QjB %;  nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/TraitUse.phpUTNo_PK :QzXE xnikic-PHP-Parser-658f1be/lib/PhpParser/Builder/TraitUseAdaptation.phpUTNo_PK :QT@BD9 ދnikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Trait_.phpUTNo_PK :Qˣ7 nikic-PHP-Parser-658f1be/lib/PhpParser/Builder/Use_.phpUTNo_PK :Qs,%9 ̐nikic-PHP-Parser-658f1be/lib/PhpParser/BuilderFactory.phpUTNo_PK :QK#9 nikic-PHP-Parser-658f1be/lib/PhpParser/BuilderHelpers.phpUTNo_PK :Q]5+z2 \nikic-PHP-Parser-658f1be/lib/PhpParser/Comment.phpUTNo_PK :Q/ nikic-PHP-Parser-658f1be/lib/PhpParser/Comment/UTNo_PK :QXg6 nikic-PHP-Parser-658f1be/lib/PhpParser/Comment/Doc.phpUTNo_PK :Qo 5NVG nikic-PHP-Parser-658f1be/lib/PhpParser/ConstExprEvaluationException.phpUTNo_PK :Q>~(#= rnikic-PHP-Parser-658f1be/lib/PhpParser/ConstExprEvaluator.phpUTNo_PK :Q#0 nikic-PHP-Parser-658f1be/lib/PhpParser/Error.phpUTNo_PK :QE&7 nikic-PHP-Parser-658f1be/lib/PhpParser/ErrorHandler.phpUTNo_PK :Q4 nikic-PHP-Parser-658f1be/lib/PhpParser/ErrorHandler/UTNo_PK :Qz|gpB rnikic-PHP-Parser-658f1be/lib/PhpParser/ErrorHandler/Collecting.phpUTNo_PK :QgH[j@ Bnikic-PHP-Parser-658f1be/lib/PhpParser/ErrorHandler/Throwing.phpUTNo_PK :Q0 ~nikic-PHP-Parser-658f1be/lib/PhpParser/Internal/UTNo_PK :QjF ,< ջnikic-PHP-Parser-658f1be/lib/PhpParser/Internal/DiffElem.phpUTNo_PK :Q_i:: Xnikic-PHP-Parser-658f1be/lib/PhpParser/Internal/Differ.phpUTNo_PK :Q CU7M "nikic-PHP-Parser-658f1be/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpUTNo_PK :QfU<"? nikic-PHP-Parser-658f1be/lib/PhpParser/Internal/TokenStream.phpUTNo_PK :Q?%C/ 6 nikic-PHP-Parser-658f1be/lib/PhpParser/JsonDecoder.phpUTNo_PK :QUՁX0 qnikic-PHP-Parser-658f1be/lib/PhpParser/Lexer.phpUTNo_PK :Q- Inikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/UTNo_PK :Qt)!: nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/Emulative.phpUTNo_PK :Q; 'nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/UTNo_PK :QjP nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpUTNo_PK :QEJs(#X jnikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpUTNo_PK :Q.niW X nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpUTNo_PK :Q N nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpUTNo_PK :Q2W-N @nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpUTNo_PK :QQ nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpUTNo_PK :Q;.6$T 3nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpUTNo_PK :Q5ZF^ nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpUTNo_PK :QyRN  nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpUTNo_PK :QOcgL  nikic-PHP-Parser-658f1be/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpUTNo_PK :Qlv &6 Tnikic-PHP-Parser-658f1be/lib/PhpParser/NameContext.phpUTNo_PK :QNm,/ 'nikic-PHP-Parser-658f1be/lib/PhpParser/Node.phpUTNo_PK :Q, nikic-PHP-Parser-658f1be/lib/PhpParser/Node/UTNo_PK :Q3 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Arg.phpUTNo_PK :QOiF(9 5nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Attribute.phpUTNo_PK :QV)> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/AttributeGroup.phpUTNo_PK :Qwyɸ6 \!nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Const_.phpUTNo_PK :Qf4 q#nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr.phpUTNo_PK :Q1 2$nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/UTNo_PK :Q_i8B $nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ArrayDimFetch.phpUTNo_PK :Q)^]> \&nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ArrayItem.phpUTNo_PK :QJيy; (nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Array_.phpUTNo_PK :QEj B \*nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ArrowFunction.phpUTNo_PK :Q$2Q; -nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Assign.phpUTNo_PK :QM= F/nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp.phpUTNo_PK :Q: 0nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/UTNo_PK :Q4)̚H X1nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpUTNo_PK :QW!G a2nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpUTNo_PK :QF%H h3nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpUTNo_PK :QwyF s4nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpUTNo_PK :Q@-tD x5nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Concat.phpUTNo_PK :QK֖A {6nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Div.phpUTNo_PK :QaC y7nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Minus.phpUTNo_PK :QMA z8nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Mod.phpUTNo_PK :QFHbA x9nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Mul.phpUTNo_PK :QkB v:nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Plus.phpUTNo_PK :QeЖA u;nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/Pow.phpUTNo_PK :Q8G s<nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpUTNo_PK :QZH {=nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpUTNo_PK :Qsii3> >nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/AssignRef.phpUTNo_PK :QTZZ= S@nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp.phpUTNo_PK :Q: Bnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/UTNo_PK :Q&=H Bnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpUTNo_PK :Q;G  Dnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpUTNo_PK :Q ²=H &Enikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpUTNo_PK :Q.Jo>H GFnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpUTNo_PK :Q!G<G hGnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpUTNo_PK :QoRծ:F Hnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.phpUTNo_PK :QҔڧ5D Inikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpUTNo_PK :Q}bz/A Jnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Div.phpUTNo_PK :Q}uz4C Knikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Equal.phpUTNo_PK :Qx7E Lnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Greater.phpUTNo_PK :Qa)FL Nnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpUTNo_PK :Q{=G &Onikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Identical.phpUTNo_PK :Q{β?H EPnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpUTNo_PK :Q0tް<G fQnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpUTNo_PK :Qc?H Rnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpUTNo_PK :Q[J3C Snikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpUTNo_PK :Q /A Tnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Mod.phpUTNo_PK :Q/A Unikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpUTNo_PK :QӰ:F Vnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpUTNo_PK :QCJ Xnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpUTNo_PK :QӀ/1B &Ynikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpUTNo_PK :QjH0A ;Znikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpUTNo_PK :Q<G P[nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpUTNo_PK :Q >H n\nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpUTNo_PK :Q ޯ7E ]nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpUTNo_PK :Q0FL ^nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpUTNo_PK :Q=G _nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpUTNo_PK :QF/? `nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BitwiseNot.phpUTNo_PK :QZF'1? bnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/BooleanNot.phpUTNo_PK :Qxw+9 dnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast.phpUTNo_PK :Q6 enikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/UTNo_PK :Qg,Gd@ enikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Array_.phpUTNo_PK :Q ໒? fnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Bool_.phpUTNo_PK :Qpn}@ gnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Double.phpUTNo_PK :Quh > 2inikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Int_.phpUTNo_PK :QA *jnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Object_.phpUTNo_PK :QA &knikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/String_.phpUTNo_PK :Q2@ "lnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Cast/Unset_.phpUTNo_PK :Q3D mnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ClassConstFetch.phpUTNo_PK :Q[)v; onikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Clone_.phpUTNo_PK :Q[2z < pnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Closure.phpUTNo_PK :Qtq? snikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ClosureUse.phpUTNo_PK :QSC3? unikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ConstFetch.phpUTNo_PK :Qz5,y; rwnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Empty_.phpUTNo_PK :QG}: ynikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Error.phpUTNo_PK :Q 61B znikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ErrorSuppress.phpUTNo_PK :Q }+v: x|nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Eval_.phpUTNo_PK :Q+,1c: ~nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Exit_.phpUTNo_PK :Qh$ eU= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/FuncCall.phpUTNo_PK :Q9̓= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Include_.phpUTNo_PK :QEmeD@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Instanceof_.phpUTNo_PK :Qu\3z; Knikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Isset_.phpUTNo_PK :QF*P: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/List_.phpUTNo_PK :Q 5&; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Match_.phpUTNo_PK :QxFl? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/MethodCall.phpUTNo_PK :QSR9 ;nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/New_.phpUTNo_PK :Qh-G  nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpUTNo_PK :QJ Unikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/NullsafePropertyFetch.phpUTNo_PK :Qukd2y< \nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PostDec.phpUTNo_PK :QHuJ/4y< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PostInc.phpUTNo_PK :Q.r; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PreDec.phpUTNo_PK :QL4v; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PreInc.phpUTNo_PK :Qر+y; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Print_.phpUTNo_PK :Q-čB ;nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/PropertyFetch.phpUTNo_PK :Q, ;> 1nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/ShellExec.phpUTNo_PK :Q4}g? ѝnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/StaticCall.phpUTNo_PK :QvH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/StaticPropertyFetch.phpUTNo_PK :Q6< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Ternary.phpUTNo_PK :QFas.; ֣nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Throw_.phpUTNo_PK :Q 0? fnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/UnaryMinus.phpUTNo_PK :Q*^u1> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/UnaryPlus.phpUTNo_PK :Q /= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Variable.phpUTNo_PK :Q?:9> %nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/YieldFrom.phpUTNo_PK :Q]G; ënikic-PHP-Parser-658f1be/lib/PhpParser/Node/Expr/Yield_.phpUTNo_PK :QS5$D@< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/FunctionLike.phpUTNo_PK :Q!$): %nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Identifier.phpUTNo_PK :Q/m+8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/MatchArm.phpUTNo_PK :QP6> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/DNumber.phpUTNo_PK :QOsLA? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/Encapsed.phpUTNo_PK :Q1yhDI nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpUTNo_PK :QFJl&'> Snikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/LNumber.phpUTNo_PK :QT!MA nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst.phpUTNo_PK :Q> _nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/UTNo_PK :QTzAH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpUTNo_PK :Q!qp:E nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpUTNo_PK :Qi =F nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/File.phpUTNo_PK :Q(deJK nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Function_.phpUTNo_PK :Q g=F ;nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Line.phpUTNo_PK :Q~OCH Wnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Method.phpUTNo_PK :QuML ynikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.phpUTNo_PK :QdAH nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phpUTNo_PK :Q `> nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Scalar/String_.phpUTNo_PK :Qnf4 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt.phpUTNo_PK :Q1 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/UTNo_PK :Q`sB; -nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Break_.phpUTNo_PK :QUnW: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Case_.phpUTNo_PK :Q_g>i; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Catch_.phpUTNo_PK :QvI ? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassConst.phpUTNo_PK :Q[1m > _nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassLike.phpUTNo_PK :Qs vH@ nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ClassMethod.phpUTNo_PK :Q#1Ec ; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Class_.phpUTNo_PK :Qh4; nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Const_.phpUTNo_PK :QHW C> snikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Continue_.phpUTNo_PK :Q*#~C nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/DeclareDeclare.phpUTNo_PK :QY!dq= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Declare_.phpUTNo_PK :Q+\-8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Do_.phpUTNo_PK :QIa6: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Echo_.phpUTNo_PK :Qq^kc4< nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/ElseIf_.phpUTNo_PK :QRR5: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Else_.phpUTNo_PK :QIG? ynikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Expression.phpUTNo_PK :Qh|7= &nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Finally_.phpUTNo_PK :Qje)9 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/For_.phpUTNo_PK :Q&8Y= nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Foreach_.phpUTNo_PK :Q#  >  nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Function_.phpUTNo_PK :QexE<  nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Global_.phpUTNo_PK :QׂY: nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Goto_.phpUTNo_PK :QYk= Wnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/GroupUse.phpUTNo_PK :QFIA Ynikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/HaltCompiler.phpUTNo_PK :Qi4&%8  nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/If_.phpUTNo_PK :QYv2? Lnikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/InlineHTML.phpUTNo_PK :Qٝ+? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Interface_.phpUTNo_PK :QCJ: (nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Label.phpUTNo_PK :Q9? nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Namespace_.phpUTNo_PK :Qu-8 nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Nop.phpUTNo_PK :Q7 = nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Property.phpUTNo_PK :Q_wE #nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/PropertyProperty.phpUTNo_PK :QW7<  %nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Return_.phpUTNo_PK :Q/bTSv> &nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/StaticVar.phpUTNo_PK :QeA< (nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Static_.phpUTNo_PK :Q[ < #*nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Switch_.phpUTNo_PK :Qwת=; +nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Throw_.phpUTNo_PK :QG,%a= -nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUse.phpUTNo_PK :Q!LZ G E/nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpUTNo_PK :QD ]0nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/UTNo_PK :Q9=6,M 0nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpUTNo_PK :QzER 3nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpUTNo_PK :QXv; H5nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Trait_.phpUTNo_PK :Qod = Q7nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/TryCatch.phpUTNo_PK :Qɤ;; F9nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Unset_.phpUTNo_PK :QdxE; :nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/UseUse.phpUTNo_PK :Q[X9 =nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/Use_.phpUTNo_PK :Q]u_0; x@nikic-PHP-Parser-658f1be/lib/PhpParser/Node/Stmt/While_.phpUTNo_PK :Qp99 9Bnikic-PHP-Parser-658f1be/lib/PhpParser/Node/UnionType.phpUTNo_PK :QjF(A Cnikic-PHP-Parser-658f1be/lib/PhpParser/Node/VarLikeIdentifier.phpUTNo_PK :Q<<,7 bEnikic-PHP-Parser-658f1be/lib/PhpParser/NodeAbstract.phpUTNo_PK :QN\5 Inikic-PHP-Parser-658f1be/lib/PhpParser/NodeDumper.phpUTNo_PK :Q8MH: 5 Pnikic-PHP-Parser-658f1be/lib/PhpParser/NodeFinder.phpUTNo_PK :Q<-Av`)8 gSnikic-PHP-Parser-658f1be/lib/PhpParser/NodeTraverser.phpUTNo_PK :Q}uA Znikic-PHP-Parser-658f1be/lib/PhpParser/NodeTraverserInterface.phpUTNo_PK :QZM6 "\nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor.phpUTNo_PK :Q3 y^nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/UTNo_PK :QzaE ^nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/CloningVisitor.phpUTNo_PK :QhłbE R`nikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/FindingVisitor.phpUTNo_PK :QzJBJ tbnikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpUTNo_PK :Q<#C dnikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/NameResolver.phpUTNo_PK :Q1pL lnikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpUTNo_PK :QaN Donikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpUTNo_PK :QX> >qnikic-PHP-Parser-658f1be/lib/PhpParser/NodeVisitorAbstract.phpUTNo_PK :QT4t1 grnikic-PHP-Parser-658f1be/lib/PhpParser/Parser.phpUTNo_PK :Q. snikic-PHP-Parser-658f1be/lib/PhpParser/Parser/UTNo_PK :QOit: Htnikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Multiple.phpUTNo_PK :Q#Z &Be|6 wnikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Php5.phpUTNo_PK :Q$<7H6 dnikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Php7.phpUTNo_PK :Q`x8 nikic-PHP-Parser-658f1be/lib/PhpParser/Parser/Tokens.phpUTNo_PK :Q@ɟ"ٞ9 nikic-PHP-Parser-658f1be/lib/PhpParser/ParserAbstract.phpUTNo_PK :Qup#N8 +nikic-PHP-Parser-658f1be/lib/PhpParser/ParserFactory.phpUTNo_PK :Q5 -nikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinter/UTNo_PK :Qzfa53A -nikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinter/Standard.phpUTNo_PK :Q@tE`.@ Inikic-PHP-Parser-658f1be/lib/PhpParser/PrettyPrinterAbstract.phpUTNo_PKt{Tx(658f1be311a230e0907f5dfe0213742aff0596dePK!U\ܸܸ7php-parser/0863dec1a401ffbf1e6adffc231e02bcd54f0450.zipnuIwPK E.hO nikic-PHP-Parser-9a9981c/UTr]PK E.hO`' nikic-PHP-Parser-9a9981c/.gitattributesUTr]/I-.QH(/*L/J礠' 9{8墫+)J,,֫A)((,ѫKİ>4=UW %&PK E.hO*գ  nikic-PHP-Parser-9a9981c/LICENSEUTr]R͎0)F=V)T'vCbv%o߱ɲl*07ù7O{~}rӸ {IIjzI7x-tcכA5p4{kn3l1<6fgPosCoO{~i]c?ZF=U5ݽȩm=M ezjkO4f@:Lc0ܒvoWoJ&%h9QU^%h՝^gaC[9ݛj?\sQ3W ]ꐳB].zafJ kq F|kp7A``w/Ǹ60t aN~o EZ0 Ԛ x._0݀ZPHxlPYJx+BFėB? A.-! +Fe ,O2e<(cKM8 T$ K,cjfLkED B̈$#lI ##ɲ.#Ωo-”B4(Ln^O 8M0 ^#Kl"dIhHRХ1r*S0< 9K*V,d\JI(%bi)YȌ QǻTP#i*bA}! ">% 0@z36yB}{5GŤo`eGpY8  Hb^،l\YDPK E.hOMQk3" nikic-PHP-Parser-9a9981c/README.mdUTr]Xmo7dDR.iP@]lCwc]JbZrWN# Y 3~NYQtۿU:Ku)ݵeY~WZ9׮讱^t~vݦ&w£L1\aXqr azILmeu?'}vU0T>(*u"+18Da\*(#BHQ$9&dQ[Z)s!Gј-(Ruz}A|.3S NwrhЯRLP8C΀$,L sa|#լ apN+D@*n3F=39\P6!LjABYbXB$SO Ҏ9^cUB'Nt:3)r~*VӌE.g2A(0j%k B=L]3]`Y/O잉qn=?d6/glD%Ie:*.e*ޤ֦*hĵP4 3pfO6qJғ)'`~ ˅ml~7 B$.;?~|}$WwH\:ӎ`+̥Iry=Gth|y,ZzkڝZ.W1l=hr@s[,.DؗTX}q_;UԈW ?8JmKw[Nj!p;}u$m) ȥgHA/i(esA۶]i'_g v`T*7zuwE׋񹺪kj׎>mnYU * TeLks&QSZS*uM Ye.  /u"wyw_QFo564ZKΉL@II%^;_T OFyFe E pih&/=\6ZbYMUVXCe?GMV nE/0Lꪩ>Se}<7J,=h ߪDdszI#Ѯc_fBr1?V7^CB@ʒ6cv^q˟5#|MezB감oLp(7o=DEv#7{nHiVMHnM껓7)$]wu֫]q{B箅^w&Cjs8ITJ#x#!6% ]7շJ)7zSC"!O> ;wؚ <زhT;p!>т4K:kjzZHO%Mh:*Uc?$u n*Lx R9 i)m|L*fo:tddq dr kHQP<~_LF_i&Dptɷy4P8SVW-\h{)B5# A" <04P/O?^ǿ+)"':,>𜘭7(^LM>Аl6a'ztY%z=͕f"f2 Ւx>n@:* bd*wnْ_rEZXơD,t--d7BEB2^]^^aЁDk8n%0SI}˥΢8CDպ6\"VI YaDG68FzcI$yadX.e&?b8mlgi#j5]ZQ`lՅG;0 қ6U$F.Nbv!]r؝^&̲|!leia"?DJv#QY.` m" e外뮭xґC;> vǗIS\p9P9Qb>p><23 KИ }:̩?` u`?K`2>u]]ouIqAGL3<[¯mpz6z,t6K9K{78'"oGzdK0\UuES">nȝ-xãSbЙu!]j%ծz]) Lj[M~ }uۑ3ͨyn6HKw`y.\۷=r}!t M?IݡLM%q4MIM&˷c _x;AeY, vB<88yE&@ 8 YnITU"187b7[P$u-_N|͞g]xdwϩVWU5 !n&BUp0>(X1x4a |N[UoDelak"=00\ 3@V,Iv[BWIJ"q+(+glG H6Ю ˻ V['  s,:q5|ur1fMѼ$BEe TrkvI5Irz6cEUǯj$۵rܓLV\yi,Vן>7gusT{Ao&%["Ҋ1"ߘA7(!EK@ot40o}&QUa WF񦩫59w8< @={9}ZƓTWs#TTOО;$< B$("Ve=L]N(cW8z68qG*<.n G@o$%.;:-tG -'HEM~9+&1Tnz{AOolnٳ)n '?z!=?PK E.hO0K'& nikic-PHP-Parser-9a9981c/composer.jsonUTr]R]O0}W4{4v#ԘhǃOf"Iֶ&ueP^z=ܯ/dɒ[ga4SŠhtrm\]AY>%G5XѢ{Ƃk =Q'g큏@@0Ƿg-OD{v7ϲ2#/71$6X:ebͼE1>@<\Qs :R3)G؁曱\- (,P<<_ܞ[$/iڲDb┱t3b,b^*[C_q9/z2Zhe'ɄKfގSprs Z(ۺ{[p~58:ۯtpCpPAR\Iu #`ŢZjGE8T76vSA.F[ W⑋/c z# GhM:[Q?Pwh=l6;骾%r3m:Fbg%ZHHԀ;M\cXW:CLcT zd\K`8Le`ynPK E.hO-ɚQ  0 nikic-PHP-Parser-9a9981c/grammar/parser.templateUTr]Vkk0_!piiRu׍Yb"d$Wwr1}GGG?}:Pb[)91!ӝK jkth! ]gnw#_]Yx| vwWn~gO~VDKvs` >l:{Iī[wbHoXS?y(x{v֝|_ M`uC^{d}HcN(WK+?lwNnGN&s!OzvO29 xKT1U6b0c[xv>P7 ^'bЙxB[lr1"_z^o{B§Nr O k "Ed9;g`B>gM;df->=Txixa~h:av>A ,)=lGgvIm!Iߴ'!}8 ;qALY8lW _z4J6DY!EZo~6rSjxڡs&B8~clBKROpܬ)?CB\ֱqž\OxC= vهb}U© /0e0^-ܡCKz\ ~ 4p#8KdMzz$f_v[Ȼ2 +4:'lųj yu`齰#${^y W% rЩsK+0n&~`xeݭ1fG'}&<~UTGKW$tMpDJPGO&2W-&ZG=i*>SvƘ=Hgb39~)q1PӘt/m,Xsrw(4H~sq(5_k$@MT|'8Og./[~AgyLho\wYtM著|v7EՍy1yΤ\_W7q $|hkhjt`+l&LZ+X$<&]8+DX>.hl1G#E, ^\ucJo#x3 gwF7@YK*^,&s.|dtLdUiSf<*ZB _eU*]=^C "hK#\خD~nD>hz`f~od;}B*Fi..WpY -M ][BL%&ÞPH:SN܃d\5,"? hKP%j)U ׽K`~\ㅊ<1\Q>a%p%`B٘WSvyD \6lFpU @٪Rh%/E%rС٨*ZJ4+i̤& -ϑkJ?u>h7pDpu(+#"<OX,=lL̢4~|cbom Mpm9HI[x;8:^y0d{)p¸š`M kʣY~Zlc]roE[:q9P@ ~2`5㐽}yW)lVDeԤ$x钀S2IAqžYIŹ)ƤcI8ŷʠ, Hl'(v`TGy%gs/)aԿaW 9./Q8MC*d{s([UY9nt/ i#[><|+rl GWH&iampոHQ61nySvqAGSn#%-?!`zno}nuo@+6 ,i&D5T5bsODJ#W3qtrCL/|58gl b,@|d@9Lb⇸Y"\P0QKǔ?F6I؀mC!]VQ:$CHm {ݼJޙnZ1o)^Luc/.БE?a+饺S.w*؇֨2uqo!kh,IFJZ0,*ȓbKĞ|{Sk')3v 6h1:~i%ῐЗӂJ]sDi[5:݊!uV'q-x 88PŭĄG*ӷ"p_mə$ܽP 閶-Rb*HʖxEEuU-Jo7ZN-£V?6Ft:Kǡi;'xf]vרeUո̮hu(FgLV4EE*z _j4] S %JSۡΎi.(LM)(y_FJحц)R$dzZ,t?'fo)mVḯ4@^T&h;J^-VX~+ 'KuڴG-Տ,Aˡ#GUpv:M sh޲9yN!m~:z9"/*|Zn.S6/]2$+OR(u2%ac{WхāJāܛڤyTUx9G57q]85{ӞH8^E=^I8h|p\0FDaGCwI#\a4Gw~`xUp$0.CN`nƮq(M\&`\^#yk$0qxi0.z HQ5K @_X?׻rH/3(HCyH5;*Uv涮Qo5[l派VOLFMOm@1DtgŁ+)OvY@N"z&{ۉ2|:8PuIϛ&txʄ3K% gܒ$[,(G?]K)/IMMy>[$Q9-ڭq@}dOȼ$7S0eh®֨MA74[ [I6;ϬP]g!x$RnS ӤW(d-1DB':p Ml3fb>[,_5+0,kqUU41+낇t!}mfU-UX|fKh%ִ> CV.TPX9@`߳.{ڛKk]̐EgE Kr4K5lXͰNK0ɪX_CQW yVv\Ej%%kp,Za}T%qiw{D%R(,B/gTaʸKzMEg-Q|~rWI$^(份wTc,j:Hn%3Y89v!XIH.ME/fRw/dzc[ȩ9n2#c:ѲZ6Yu8*l+tzxhկ}dpâ0UC4 1kWkJ Dz*v {%.dANBN=mzRyV@*F*GΎXMcAHvF*J*l!) X$BU>J<*x( UVՅQ_k ԀqT)0Oj u`U 0*QiU+T 8 4,T0ܡK d>OZٓʖ*lqTդl)RSB%WVlG΂*)fq*UVPe&JWaʪ RiN:VUNT?Ԑ V)UY"ՏT URIVR\jWDڍY,E+[kiֵ3dk~ҹэ} S\OR+#"Gɿn4Q#^ : P՗L ?_ۻz V!3G`ڹOGO߂Z#݊4}iо0 )X1N5VyqVa[lY bңG;PK E.hO %' nikic-PHP-Parser-9a9981c/grammar/php7.yUTr]]m6}ܭSڽ$d^ړ%:U\INS|\ZliQKRI|i'RDE"Qg`0 -WQl;yT`vv"ʊ2_ pEyY}vwWnqO~;/)v~~gG'mB?WU~O('^\C!D7}ŽͷvP".Y{G$t݂Y]LaIF7 PS"V~ӫWb$HKzx2J,\.d9{vE'*AM.oZ=a|uꅃ{ߡF|~pvoЧȿtNrGGaڧC{{ އ//'+x}p^kįo<|GXoۧozp@Ļ\ա¿ ߴGQ@OB nz=J؋~{m1mŐ\<vnFoR·vr NZ1t^.Qq9m?]Ƌy4q`w 2݁Mkσq/{6BgЈ`ʂeDa۽v^tw9ei%A,I"TZP7߸5r!"Vd<9]3n< [3̌d:|odjneŋCUJe@ŦI!޿'؟ߐ( wPMXpF^\#GdY5@ > ]*x@(d ~G>-Ȣ8Aa^#B^$G8o@^݊}e(BؽuYzG@W)b&ie|:ݨ )Îv+ޟFINq u'1GXaoR_΂fd1/e?qw9(=6^`P?:@rm󥸛T vw$?o':oNmd@%r7W9A1YiCoGGwA ZKVq:3j^gj*։`Bnhp ѓHlaҖTP 3Rn1VLE"G@^!g^m8OiP\8]ԒSl4We'iz,F@'hDd0 {gE{ S_Ɵc_e0^@lܡC z\57p#v:!nb[C+ݩ?ȞbǰhA տKS7K5R3O玃UdR)SJEyjpHS,:AgUG:Dю xq6@tc{}Ux'2>d9xV1&6Jʖt3Vđu@t=VFz<7ƴWmz5eD ||ZiĈsBBRrf8=ʋ2NE;own~Ggk/fau [bPylҏa i޻7; R ] t^53),k49+ODpZŬ; mh y ɁBuCvy˥7B˥WwSQ7^Y{DY1)-/Hv<'ACH\&~H[pzȷrU?h0؃BM7&9sۗ%o f{!Q 01"N+%Mq(&=8O4"ҷ>y g2& pfoeZAuK71.74lJY{M%{| [>1 D%f" +oգم@) 4,.pN04@̘w>SN D ||wl-exēu?sj&h2=!yq PmL`0Ov7f ;QhxR < +q@ٕe*&zƢ:o zy<!6}쾍X(~hfs2Xu9u izjUuH]D1EfXN$\݁h 6RBu{F|-$6¦U\"3:ePLH W %H̤7Eh{-acpH=M'[8J9,,mC$YZkͤ'-;SӦ eQxS8Q("W cG\ iy~5z7LV@$IMY랏혽JmVh*Nv&[MP6`̴<H.:K(@VBx)w d- o)/IB} 4#5z4/d]AJ𩀓bZ|Ll}fqp̬6'4MB' psYFVcaw/Xb em8G[LMrJTFM*AupJ&)HYgQ\06+}e>8N';Ի٠=CNPN ;AuwuMvౙG4eSP aUYU?,)lSݧ`\S\ :ѹ⿍bȴqeğ,3APO ´ʰnid)mfx#KV/;/YniRdnyu#̈́!^n뇙G{ׁ~ͽQ^!dGS/\j|C[>":1FJ"ʺmHȆ_(k.BBAs`Hf9 >EpD)sdM95/|!LoS6_/Owk6h8~a$qɃ8,(EBp9P7[p}l#hŔ5PnO.:"5p  w3mo@LyF*GiyoυE!| bKj*NcxcUV6P Xjrr+iD/ɱ6ڕujnhhЉ6A@H{Y䴸3\uGSxrGJ˭G,c³x_nA-+ evѕ庉Xf(ƮngL:RQ( w y%u.u,&Tljfxg5|NuR dx`宅L!)^%sS{7Ӽ3 |yNU;j$]}uӼ CݘzXu]at(Jl \#G{SxSc B4y %xT=DhFurд>rNIЄm7iTaM:eacq<>H_: ]>ZC!YU2f ߆Wj.L!z2y}f ֕CfѲUd#劕*{x|oxU*|RTJZ=F MlWu:_;봻12pB٧XE >3O,Tr֓Z03*|Ŏf抜wWpѯrfZI. /+AE- zmІ9}x]_"I:k랅ো`>+}05_ҙǑ6T]5ku,ƾ0&Z*O :߭WƸ0wtH_#(: '<Ը*P$$T6 R0~Uįk0>Kcq,|U(Ԥ곃=7'&b)L7(us"=!h n :+A9Ĭ5aϲrRgh-k7Wh4v g[խ7Q֋o=b*`mڨC[Ӱe1Q,:kQJO;cyj~MWP*Ri4\Ա[^ ƤSJILp%[y_/nE(r>n-e憔AtC0'NjrFōe;Ijyb?_9q.`JBO]IW iP߭)SQNyџIp·TPP C Ж"eT,D5:ۉe%7&L.J'UY V:AX%MH:Qa%ao#JzC7R@u K,tUT Q;k1ȐNF<:&] @fKm [.fP(EkMhZS= *{>\~'=.]:&PBoKM@1D~q!).,됽tHLC@i=\'a؎r\; UbP1Ëo7\^'ݮAqQ1sod']R(y*4= P>wf8>wJGvlD9G!&G4ԯhUV-ԷNүwA]7ŷ;ۮ9jKʡvxD .]E[FZe H yRÑYhuKbJ] dC0L/i6V Wh'fS>;2qI9r2 eL?T   R iQhV@:rFUR8ZͿl2 h^nTQTVWبW99sb8Kt-%iwچdDtqrRAQ-:- hodi]}$%T8Vfv)y5ʼnOxjK{)5ޚRa| #EvI=Hg{:||cC"EаlWȼQ蝉U8u'%xWsJ{6Y5~ЍQ 4\J/%ڐ"+AE[K刅)H M嬰q Z csrq9ma21|8 ߓ96oa%4If'T: pI> l@(f2(֏@+q VgQ˅:kGoVnQ|{QRp*[13H>i>0Xi ./ŴqL5qG(#2/'r=.';F{yQ<`t ʕ+?$j- Xµ_g^Фw2yQzzF oS[Kd]]{dϕ=h{Krgؙx {Va6ֽӪ5S'>=b3^T,Xt0ׅjWMuH…C!k1A ӭy*Gx_Wd`#)"[y!=mF Pqvf򓞌zrIT!0 :ixg50ߋ`"?麝۫%' Nw:Nq&t[|TR ͧ)Z ,:nlܾ5_.j0|#M-hD r8Oa}TRNݧOŢSbydE[3LZhs5,,%~hQ'Hv~s(|gF㶹FQ/ڪf5*J{`t? XzXB$?jM Xƫ%\qiЋw;bO ,I;|f Z)mxhϺ$kXG7RIVPcV$a/X F3fVd׷x< u0nQ>+u \ EP$4ށAhL}Ǫ:&KS0Gׄs*̩bG`mr `76_"NؖߋAKE {30VIExs݃/FjdF*Θh7ZbeJ2һQfy851:./ 4qYi*M! ˻-2Q5iWR%% jwVcԳ+nnJFlɄڛ%j.5k_D[}#La+Na,Z"}1 y}L%VtnEF_MpP.P&ZjyysLKU8s&nؾT |>WG پƣG;PK E.hOeo 3 nikic-PHP-Parser-9a9981c/grammar/rebuildParsers.phpUTr]YySHOhH![[T` NXKȍQk[&gZM9lwV6Y[,.{*>wCJdk6;:HG$Cb^gFtdR ]ghnF 3 hGRt>qYJY> ad&y y /#9G>QI.8@'JR JWBZ.|p=4ѽe~}txh{k %Mr SJ nX9 4|~>g*\b|t;b?AL~4J̏OU|~R,כ9-IO)M Iғ/p| x /s,%rE5NNN(:ߟܒϩ-kgt>|:䳃/seǾdon9f!`5 66J:ha).8 i Tiln49:_i > w#-5Jڏ(`O.,{1}q (st8aNuA|T '02X ~>&Ub[ӓ x{?:9ᖃY5F,{D[&/!.}B7#>#'@?A74t3 s(mkJ[~jơ9ww{C>:]D'C!0u7~ߘCHuAxX[*A+X4#~u_. ,Fgt%^XEb'x`U0i{J$Q S>E@3L𔚚 )j'\&~a 3އ ia 6yL4ە-aeO0Jl=i51 m?A۠Ɵ-UuqX{<G4H)YnbiggqnM d65ԗ8e?i~ [-^qIJ+IaP9)r zţ Csv[ (BdvݻA-P#g)HcJh "7V н92vT;AږwM+Dd5ǔ0szЍ#8 3ې ]̈́TԑjEek<<= OfAfEJe ԏV6(*opL<>6z +Rَy(|9;r^NOΏfgdz_?ru|O j>gˏCk?׋s7 )Dl:$V ~AB${zҴ>Y -X:w]>>Mb (j&UOsN5I d}xqe0-h"cZCϛ vo啫Vɜ9p:|kPCC37S|jv?Y 2:5ec\",ĬM^0c8QHde2*X$%) [t3ݡ0’X=ީ.y%i]g iPo4fHhHF7 [%ֱ:q:$FQܸ_=vyo8/w7UxA o %7&?1_lV]2^PcO=M`Ae|Q F..5qEW1YƦUA2u+2U^_7vcܒrL\qǢ? B#Uܜ9 9'b)8v hH#PK E.hOB ) nikic-PHP-Parser-9a9981c/grammar/tokens.yUTr]mUmo6_}ki0hlqH&8RKvw,(s^UZ߱Ӷe_ɜ}|{h;qEwUQf~`oq^{/{f=OG?G>|el}O/ ͮ^ڧB9D1Z~(ul R c/W06Gu-Akn깂[kVfaM9$. T̴Kj\ލqL>ʘ(;Dv1heV$>W/~{1 PG^ߡٟ-Jns<Ca#(j*s>T$Z)*."ٕ\)ei{b_zL of[ɾEb1Mh*dEdDW=# FA I6ğHd*YX poO=8H4%`(T#Q sC(!@.1ʇA1YQ`Nw"Czr/S/+l", x2y=A#BK 0 ,c/8DqB5YN& $ Y"Fv@M߱tp|;&9KIn̜hoIr[NeR&VW6*k*{a.OX"Vzp[3$|N͞\f&vM?O63jvVtNj36ki}zio :kvL>&.VHTT<:,"{c7sP.x)}e6gc@s.m Es. nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Declaration.phpUTr]SN0+Pi%@\[ʳʭ b)q,Pٴ+>Ύ77w>`Pg*`LwydENH^iUW*f|-i??~`Ϙy $h},뢊m>o+Y>Hܖ ؼt}ͬtWƬ9xDr鴾!ˌbōAvPCpQU;28qjƶ pd5I|n⡝ 4YUKQ֩4Tvuq{Ry6WkRР,-ipO uYj$D݆@^'\,{0.~@7)ߪa=\rOJI ZsCθ[6yO4?PJ{t'S`)ܢ99g ;b>:6: S 4NhBot6Ǧ(5ܑw ІTASA"q /u ! #h%:=Ҩ=!ژy;l?fT+Nl$T; 8v;wO_t F˲8acCY6[LH5a|BKfؒ!|彗dޢb)|02XYxAM\M" X8zNb|6fEQoglİOjnʊT)f۸Qo @PLdi,Ӱ-%h"74ڍ olg; CW@}xǐ b`LbJfe]Q%5ýȋ=fӡ]ox,PK E.hO3`m< nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Function_.phpUTr]}Tn0 +x(;HW,mCQt%AXt#Ԗ mQ;vZz|||:T 1ؒͅQ)B,Hm%RC(EU.mm{c yoJbTS k[SR&ԲP/OeJ”P…-3ZXz˼j:0{Ђ!}JQH?J~ T\n)>Sw./6RUJ'Pw4;_k? '4f툳@Jrd2ɇVp7ث8ӿz.|KS\^~3Ywb3c:]pn'W?lɍ#N`k)נP[ LOMu/pݹ)ޯ !: &#jFJ|Cng ~5}I;?PK E.hO!= nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Interface_.phpUTr]Uo0~8UL$I[Um *d ؑg'$Nh:i(>|y>s1HDOiz9[6pYpL*OE()Z(g}~=miRuw"3MJ)5ʈ8ly%t"ɥh a-jgtr` Ҍp:Y^^DQ㐜¶,~Rm: |W2#t @u`ZR)i@TT %,@{.8QW76鬀JLH)~O&asYӢ&Qtaac IED*J$lW)3ymZ8,si3ͫۑik.d7dV#UڛǭϘ!¨[2 sY [Ikc ,VcZZG:6kJ"(kR`&za\mm %¿ ?%ҴY[EhrW7L^JA_G=]̍=x9Ix;hu1P/iv*!󵣉I},{οڎT+;G*ѫsV-GP3'_IɎ n;n CcFﶠi PK E.hODb 9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Method.phpUTr]WQo0~WܤJ KW!A KI.jDӖﳝBժ>w#"p G#b!ZRa$8"6ċ&݄rą<'{:xhm>%81 /t2'AlAC6wX[D<h tLqm]b0̩:\s~bCY>K~:81Rv˴/Y@wNPUK0;Eg Omp2aC&$0yj3NoExc>&w;#Q$Y@%¤ 7 u@J^-%f`wi3qqP"7 P6Ir8ɯhثeMSO%wD%8< wuީ;03c}"K Flq2e:6XZ1F=0|(\QhcRa," O7d#Zko>WՠNwfM;=VM"_64bUx i2⟬vLW[q5!l4}a8PȔZM!HPU(% ͢|yd~{$F¨Xٝ |s{,,TMuLjhN lK'_~BYBڹQ5Q ؀VT|r4v#){)nWⵅt&^jZ ׽cW|9/9>WPK E.hOb!= nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Namespace_.phpUTr]}Sn0 , zkR7NEvK@F-+ɿMA5@b %RO6Hm%R cь%~uv#߾iOWhs) bh&d-<'߄ZZx \RGTF} B8d!h3v`s,X֤/6;?y7P2IiRȜN={LR3K)sJ3eotI4mnKS\ѢB]rO^%6@MG4/Z; o,vTr 9kAM@;%9Fh2vs:n$,-}4jY 62%0i@G{5P޿:$_.9_ُG.g[&nxe [FPK E.hOD 8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Param.phpUTr]VMo0 WP N5Y[؊z (2eCdk{)N|^KkQ|$|/rK12V nv Z-R49E>bڠ\BƨZ ݢQ]]#!P\cX "%Gin\g\fc ia_tpd\ɗBD~wTG.l&qL?9^p܄ l} Y&́(bwNPz/tFfQ5JUgWyIR K.p P9T3I $Vd S)(P( w.95w=X2Y $9RH*V%Gsa3 iVev0Q HBĴGq$m:*39Vb}I kPu٭f')*{-seNh)F|6%<e&v3[vGP\C*32 3h&\#gn\y]aů-we(cl~c?1$w=p :ATB)%u}t@ @(~0ު*ޡ_w_K6T$cy0>z9ZA=־ xFݬr=Нb8OD9zDzn`6PK E.hOI ; nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Property.phpUTr]Vn@}+RJVT܀HMb7/iN{g|6Q¾ vv93ޝ'2 Mq"SCQCQL}GȧZGWtCQzX8[ v|I͆uE6O?*@1xAFu?-@)Ђ=_WwmEЇGU6]A6LX;8g\zdb9*, 82$EAz$;y2Wh`/"sORx+85Qp)83eM^gn +J_"N|"zv!m"& ~=:Ff``x_ qs=#0݆a!6)K)JٜVӠp}ϭṛ} lf)K鋗#*UOn SHaDIme24詘niׂUVgadHD&MwnA=sa|Pєn^eZ-䞢ti0 'ɣ[VUj9 ׭\-RYi4V;+c/PK E.hOjB %; nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/TraitUse.phpUTr]T]o0}ϯHT-c &OTyMc)}Cm;vZ'*xt}|}y{ y4䴦_ śl$5(n uôARO?cPu#pF+,1cV3I-HV k2& إtC x l!gfQ##4ڃj0=bUѽF=9 +hrF&?ڇRrۚ;V^sˍt)t+o,C^@L:BX-6[;%d߿ЌiVמ;OAZK0V [#ԹM]vԫHXR/咼|C?Z[qNpv+H##nǼ!}AyqjKOǪ5ipt0 E_.HcΈ /nz6H,19t0%g^sPK E.hOzXE nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/TraitUseAdaptation.phpUTr]WnF}WL i(WMA؊`(Z7.^DR#~($p/s̞.fb1TjP(3 ,ق b!Qfs99F ٜ!vnTrLJX խI2OqaN3z4 ,8c9=Mnsˋ]3&X &jsʗo:op#wDYHa50#vYqw`'q{6Ay wܢk}n6`DM]aT1,f @*JwaIIK`ВYJ]+g#B*w\QƻIafG-riL1iMLw'|i3^{WCКUsw>R)^amzĭ*f:Osq/PK E.hOT@BD9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Trait_.phpUTr]TM0+F+*v+CZ Pd 8=B[@BhPx޼yTh iR@? "DxLG Rj?{: F׿(#R IPE8Nd9aHҚu796WH3$NA7^ N "Աc[u>t:`X!ծ #lꄻJMeqB/A+(CP>TJ5Dۅ0o+rjSĽ &md߫>,(E]TjU1s H5*V͋s qZʨQU .cyyE.m6\g":Ngj< $vЍV+q=:8pws {ɡDϠ C,$Ste1L<7J^O z]7e!kKȜߪ3ݻIsN#R䄦 uw*|nԛj2%G?Ύ&מ@2P |N.>Nay& t~l@w4ngmr:=O/e >(I٩hJif&S<>nMsZJ9}$CT_:M^^p4'ory,KW+C,SЛ!*A7lx6m+bY"˗r%܏^Q? ?`>wI|-f+ܪ5Գ\CβɬuF#l@!KYeN}1rl)@ڽ좚/1!ZEG`uJ|N@ S]^y #Zq31rD.,r݌ 9Tzqp0nZ]^$CE=VX8$|$8>4,mIcHFl:5W\0'NU'ҷ@eqwRÔR[{@ aBN9HꝼWmgiq4GGsYvd%@v-Eg݈k^V`ė)ZH(V',h_RXp͐.1/ۢM]at8eAXٓ C9P3&e2BfoSQ K){Z3WxLml[VK 8)e=ɸZ/VCuiyp1W_A~5E[argBl0+cBO*Hiڶ wսgSv}[m V}PS 'c_]##ϗxF@W7 !S-sq9i*\WWJD;ƑXgEvޓ2tHєQz7CB;{T G?**FVzHwDo4rX7`jTYO-u]v'}王'mm]~yaY辧\Sj hr` Z^JO?PK E.hO8%"9 nikic-PHP-Parser-9a9981c/lib/PhpParser/BuilderHelpers.phpUTr]ZKs6W 3Pv8*uNjxC@$dkȎZww 8b>~vl@X<յdB8|9%<2`VK۵4_3" h<QgZ|98I <>:#v % J ]l%L䒁l„`aE"g ӄKXQÞ4fbA _Eg%Gp<<2~ ~F\^Gl1#|VJYIR!B _}oIg2y=H\ABJ0 `w92 Oj1H@K.J0AʫhNr:m~ݪ cۡ aĿݞX B2urCPl m5bKIapR 1^[9FvbK桼ֱ1{p;R1La-T# <EکU9"#ZO'Pп'l~Hxa-k|-sٟ UՈ; "coE`HU(!H)`u"nN*F!UF!4~–lVa$^uI/F۵ Z뇏tJ+yHB~ `tMb DEpXOdBџz^h2v2ɿB~yG dWS|$b Dg񭅶Ƥ>?b'''̛Ͻ6;حnXCu\/`NE_V?'+06Ke1+7h|?E)]՗FJ%VBZ>8ة[ƫ Z(UFyҬ3ÍU )llI9B>nxVyU1EY_}1&@FYf@Ko>^BđHS#/,챎8Vx|F0?9UpL З9)xg@-a'&@FKĨsJ˪,FHp=~̚_.͙ssݏw[mx36u9L0Vc#~`({ѡ"6 ;:@kB{fI]҂9ak<|A𹶈:x, ozD^MRK KUJ/LX kj\ Mh෈*2;c$vCwX(R|\{xkFZ†GY WNuu Nm< [mGR7r'p7ͅ8EN$fʨ)б9,q M&⎭_Q&hpƷdK6LC%<%w&὘J} .iu[s<;! P9@sȜTWM&-{15z1xP&8C 1@ѿA t$x Wz>HiQjHwh5\ٮ:&ڿrjHĥUlO4_Rѯ' f?>FyCڅ=ƈE 臯@#k(!#S'O*q͑jLe @p]/]MUi"9 6&0xߎeϵ6"cs\CC{om ñūywl!1XVT+K[,M{ҡ1ۘSˬYX*i\IbM :2`+ !{8 [$=1I1|+a=R嫾VPC0qI RD;\OTeTT.Vd[=PK E.hO6v2 nikic-PHP-Parser-9a9981c/lib/PhpParser/Comment.phpUTr]Xmo6_A-N|Mf["H C|HJRq,}GR(ݺ3D"OsǓ^WYET@ `err  +Ȫ *$\Ei)(+Š*}%I,Fs0xUT(ꬿ3k)ᢔk몼n6q$B8P' %I/pH8o+*hAtDV?Y OzŜ9` $9t eܨ; c3 Q) Լh/HPs݀Gg9 g9KHZD4qh0E__7ݖ}/nzn탏bvV{9P =Ӝ D؛*_:m#I la{l2&4 +b ^:M1yai_}nΨf d#cED8ҙF9~M+9M241s^OKM<;Z:K}c'^np[=]O+5=ۈhaTl%i^[5vSϱifV>tc˃kj5xBP|cXeyg_J0ʗ FWKK"fb6ʄQs;zGg}?t1r56 h"]Z_Ykެ;&VQiPK E.hO/ nikic-PHP-Parser-9a9981c/lib/PhpParser/Comment/UTr]PK E.hOXg6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Comment/Doc.phpUTr]/(PHIMI,J(.)L./,H-5ԴKM-.HLNU(H,*N-qM+u+'+V+`(PK E.hOo 5NVG nikic-PHP-Parser-9a9981c/lib/PhpParser/ConstExprEvaluationException.phpUTr]/(KM-.HLNU(H,*N-JI,.Vp+.q((r-K)M,sHN-1R+JRRbB\յ\PK E.hO>~(#= nikic-PHP-Parser-9a9981c/lib/PhpParser/ConstExprEvaluator.phpUTr]ZYo7~ׯՑs*rӗ5ݑDZ.HdN{g="oh7YZxz_yz_sm@%rQpw㓚7G `X"cydZ0FJ o\* a!,D!3]`9&d[aW*lhM{`d^bL-%.3ByF "ڨ^[qm®8>)ĝGB?Йå μ@rcwt΢ub,Fl JJU\5/4wRoȇvY$!*;!)h d8J!S42zĘ_=]LX r^0U%PCuYB,IEn$X"rwRH$X ) bâ DZ`,]!Ю%p/>{ä¬:/=P)P'`$Z{+2GxyU{SaC7)6H Uה>JZaD.us.%#sM IEY8 n2"@VW:.r: Zp:kէ:Չ֬,t(OFWJ(F쭡UbQdp>[[]pa *n܍M(nS8$ و]i0V9dJZJdF%[Ǡ)"M1%<^[rӅz0,Liď V\IC!Yi8{5 V(=(!EihpESD=_/zH}2) ?Ջ;zoNfz(44 MU>cG$i7?dts]vܻ+ w?NK51q3TLdnŵLL/j3fx F]Ok$裲 N.a@}uy)(~j&n+f]iLirVSbNӼB3cPtx|[D4e i~74.fָ֧Oucc8}*)\?v|z8184jz*\Mt~qK4۴,kxZU)א]lzNi6=;.D=A[Xy{kOH(Q}w{^Q}pM%Uلw|-X(dDJ8:; j\r JAoQxz]5quq85Ľ/d BKf=Agng\ş!%ْ;9d'zz OSd>>v`uyفeu xXibͺ5ko9cN^ ҎE㉥tJ{ZP+y Q뤫N뤫NE/Q7dҁ5gvukIWMLkb2 cU&Aq&;xCs.~R5tw>ڂNŐCr 0bN~PwyPK E.hO#0 nikic-PHP-Parser-9a9981c/lib/PhpParser/Error.phpUTr]Xn6}WLXyݬA.Abv(XH*NͿwxхr[~-qs ό28#FJKGS"s u{>G{E>sS{/oҮP}ohLۼ E=b |f4 Exyn.awv1L$T!\&Q]ڬ=~1mIk]t ,>_7[.iW}{mRycNv:ͭr0jr)odW=d/᱉3VMW[Q:x|n{(úf,zHƕkM2 g~<'L&Kx93seӨm\Q&"79bWoiEmhUٿl&4rɮ5_x9Wt/?/SD O_no[(&M΢D1>8,4܅t⨅f>9,2)~I\P#͑C&`9ܷ{>cJV,bjLĚ Ɂx4 Mp5#`jצ-/(+S/hH@OE#Ouմ!LIH'uyQl$QBex9ws㩩+6s<ߺu u# 0] 01Z+YSȽkaɢ,YG 6鲳Y>J9pӈׯYBP0Ryn-֓Er,CƆp\RWTֿPK E.hOcd*~M nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpUTr]Un@s@"54iPC/QD!Dh1cXuwfmlC7o_ۂ֜d Ѭ3*g_q[<*-~Ψ ۥn<5.-~Uy=@I׌فV [Ժ\I$;m6xD0[2r[zB޳F* # hs !2 ci\E}eeXF,"o6xI=LvGXS:RnSlh_(yąUʬf}ΘxFb-7[>D6ѥAj:DH~]9 N4Á:4AL^>ɲhD*ZepJ{jO;(6m^^iXN* ᡟ3egZEBn3Z!yx!y9cDؠ.r><).ZZD˦ ?:T~[Mbt}qf)lT _hbDM(t*tutYNDA@XVi:VΝc 퓭=z:)Űa{ZfݯٜŕV+*5$iJ84/5PU6*RG[vg*q*SbIv|q1TE^\)ȵtyҶcQUWs.tޯ;p765FJ1#. OJATWS1ӠvB^[+fEqbD2ac˓X"YD?߂0m裀$Ed1` Rap=TBkt(5oBmIBTh[.2sv pBlrƢHmdU2I-%U]^1$YCy_WYu"2t?))yӢ~Rޑ+ /t Քӏ&Tk*JU, mHi-t c:rh$l_),~D.^^ +[~B`UC_Hth2><%S?:?=MoM^Si3^s *'Q}U8EX鷨/+\zdtЈ,oX\PΥz[#Z|uPGG +5t*a(ih^YKncۃ.'D$]9c:s2Jce xr1裇b$CWWT71~.odgeŋQt7r!!NsN+4R &ƿ32!p5-tM"*ӊzRbg]&t/(I zFYݿiPB?OӠ^_;>IA'\cHyy_0=A¬Ow&rzӌik'Mjng,PZk:ɫmkyP3TIY,-% r/nԁhʄ*w,LO(*4^ݦdKz6~Zo!޿ȧ6r)J :$, m A!4صX"h~İ_`ҷ}TyayʌG&g*^N栨\L':e(f1t#ZK(f~Tq4{Mgp<&'ggώ;u$wJ֭yEn;u[Z4h2lf%%ˌc}on.màȭ>(~陻=ۜ_lNeQ+6fC5ڍvw9yWzEZP`cmլ.j}o*S~%U^d2JuS}!GU+ID>hD1'{6|%\ _L̨ͲHvիTp$dpL`qiul9.%&νVU)p6ޮl^2P-A3<[TTAjbԓ\(RRsֽY8y(c;׫yۡ{`Z0F`)9F?kUᨸj+֥A;܊S*EU3RDM2y ,<[Vl'(We /.GÖE4Z.8X,#x$cր`iXPkhѻ]via`@} `<^N,,l~vZ9`H^Y?ŜYtI&X0Q.Y2k$<!HlƪS Vd,"O,cW7 N鳎КpZ5ZY L ΠxYP&PG[d碀e9!"9Y$cQ -wR_$٬LCB> "/âH?t E"XY-a4HHzewվb\MH8Vw{J[.ePďq$ ooOW~#WDxt.j&-&@ c!x,T.&b`=Ij.@h?M392HAex$)xdŐxxxwsr:3st3O~?NGWW1~6:8gdS;Jkji.s&7z` jGJ qeYppJl::ѬC(##LO<+S˦y7,`9$P1 Uof=(14Sn[:~N!ԛ˥e)붕: 7ݗ*3iܩXsoݝ@2{y0p .p~'6j~u޶ D#a ^h*D8`Pd <@RMQML@nc~L,fݓӋ ۨ ,)Cؖp)j ,MT[ynu>ofdjR*Zc%-0CZ0"@.4Sa .)AVbS0fxW0OCkhQSWRcP9W-{ 믬̨Ol][&G>T+{}]vv֯ uvu6c%~w!e.#0]9) ][TWӟwfa7e/AQ.=dd]9?NqS\3JsZ d֡aL/#=xHх܏᧶ɋb# ľ 420_Csla ?Y) lA|9·5pGg dؐ% U2{ XqFخx)Q?—n!#!Ie_)&[\C΅& YPGi S$oPDA `RH4H=&.)Tx3vD%K%ԷRz]ݕD.蜜rxJ)/#^f"m|Am|,gR0O-R4#2ȹ IN>]` yB|Uٌ :N `Rw?M 2PwA^:# [KZ.v$r Cv|yN)-d‘ҵ8[ ? ~Lt sD|ڼzõ\ҍ{6Vk?no׍B_l!-9O_enbB?SȋTUrp5 O؞#+dJcTC}~ P&,pa]E,[gR4ԡtu2I~CXQSp@{AyUv@ńln {G(eLFǴFh>?xS;MW[iQ5vӂRGܞ6ƁXwp^E?IY_fKO&_#(T6);U٬z <-BLɯLRhE[ ++T9\ i1Dc , O+ByhRv;Y1Z6cro^{uZ[%.2t6>?|d7N Qϟ.r2ZТQ=tG؛Pyen -jijT(N(8vUX-6h[X~mo&7sNV ?_ߚ-2@ָ0 e{` LW̼$K]̼9;a*j, ,I\ 8d0Dc_ bAq"ptQQyy*ec54KF1yDU|"Urjꎓn(:%]ŤJ$m[7[&wf3ӠfSjvd;5$`نѲ-7L^Ep]|X,wϦ#x?9S~G$ T8!^C&M846P $L|/phGv ع{ULw}mpV}}@;&qbz.G"A%wV(~F~GіHmLm8tkLJv+1#?xךOY7m|z@J Wզ"4_SGul;OͶ?768U';oUm?uX<<E}l˄b6-,gVp!11MrF4))fmrQ\\_^\4A {R(,loʰw!g]UMxeJpAx1I}t] u~8j*cpo8H901'оz|(C~_k[k]+Tr]ikC1t/Sa 1=%!xl*q a-H!۹Tn$˖a[B't韭B_t.IzԕM߽Rxy Uw񠮷 .^Ǻ 0)io` tjHqm)J乫f"MzhċuuLh\EBnY9~VyMoFهxH&+vyD$!!,2_-yJO.f`PpcHyo 'eHJq8v?2Q']5zɼi~sw=< ?r=g^fp̐G_o8̿n?? ~ ިM9i|]uongY,fz1xԚM)5Ok .<8.aWLZ%F4YuINpVކYY.G!g {G;0Qė0JvaaNP=lh2ˋ3"$D<ΫbH5b)=>R>X, 1Zڑ5ɤ)n :DWs YʁPR\4i٤;=^Jyf$MS&J'LAp6L>A[=EGqͅGa)41j}*E?U c}#"|q+Qg ЁѶxxh`L%Ln93 4;[߈*R8r%"sRyJ? ww_U1iD2\Jbݎ\GQw|8?8`a2u ofAk׎e4 "@ynr@S6$;0Mβq0C, DD<3qX |5XD3Y#&& t q ~=K*$U75Ҕ0cp m`d#VN%њ"yIW},3B< tW: |M/RԐF(.Ҋ[ٟ*ddIZ"l)5yvOc`Rs3Y[;t*fwDk'(XG|b@\ۍ/4\nO)*ez[ ʎMKY: C5 GZٕ4H|`iӢf+C%)NECUC e$)Wо$U Gsb%skss/S;dxJ/yGXQy 핵!{c{k4\\kѮ'.15 ,^9a(2~"BwKM"Ş-Bҳ7}jԿE GkmcsnC崼 !9${sX%s= *Vhb-R7i7n' y^JC!!S=t$)eyqҪ"ߠO7SV*њ,WB6tGXSeRNh5K}PK E.hO; nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/UTr]PK E.hO:f.X nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpUTr]}Sj@}WL- vTM>BD,΃.s93smOLcX3ڥB 6GX0"_Q`Vj,i:ߐ.XKVwɊsU5px@q3"\ %#byXʢ*]86d1C`gR)-|>ffreA3|vN?Bh|A֙F[jV"g]yQmiV[TGX!+cJi͖[G :S^~!9$SN 0;''dƘ1w(HS܇3jY@9ߢ/@cB'srބv]-Ejd7CJoA;9cK7 DDK{1\^Pp9M"apN>0<[lwvۏkI=L Eѕ?GوZsnEtt(-+I#qq4?.܄PK E.hOCx0rN nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpUTr]}Tao0_qB*4i,l]EWFBnr!V;j9 ?${wރ$Ô)lkxh%G{,C!H)7>s.Q"eF*,aNkxKh WQ #X :b/˭CZnFBD8)@Dd/ي>B( aCfUVJ&Lp$DkٲwOuo{b M?gЊQEg'l>O~I]8"oz{\BOYo Mp,c3c&hǡv GS޶ktI`4L-`O(9vݸ|Ѯc˫IgH NOSNAƟ1ZoԱ^fl[;+EdGWgk2­ep>p6n|co^Ypq9:qEhh?m~uPK E.hO؛ ^ nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpUTr]Wmo6_q ʞ) A]h-|Ȓ@Ry-)aKsx I%\'N(c!,w b={b8'S D6mi~4@~EG4  0fBhq{ METbSzf5:q暗}kR<[>Fϭ߳`ܴO Abqc*2`=JxF61!+U_?̾iê*!TG4Ցl=0Ndp$B2Q.5" oE[6Q&-[ Aw(ԎKq$n {C/uhZX/?/?g߮..6J/6XgS/Տ@|H3ON xv=9_gnNpO< +`Ud~7 !$rAEga‚Lm*n W@*ؠtߣPIXxe8#,Ogc}4:PS\j 8囘M.Ѫ~ΤbnDWaoͥkB<[8ltҩ idV#ڝg ԧ>Sl ' K*B3O%\]3N.BWcmy LTrGk-yJdIE5'X-CxZ⪍W7Id@}]lQӍ1p) F ixFFťDLcniuMa:@ ss h LYЪT%NòkzJ8Te1e*ʪ~ bT MܪOSUwmTy\]ṢKTH]AmR?Y]Du,EIM"O}@۾F]_'Vl4:9kU)X"XJN{ fٜ|kR.ȢVTH-or3VVcVjɘݠ4ʛBb.$MeF﫪E4g Yo0f-n T PVZ$YۚVtnȵS"JRuY "r-M+yȳ,6E" 7`s~>蝣?..| }#(hgfO C߂xBsLp"`' !k#!0gJc^>뛝f,KZr2T"V-s/Z g\~(;^}Nn4=drz믝2M -oHBu_Ʉ#^#]O DY,-πy]!5UEwDRw3 P˕i*3 4jKZ [ d bggdJ /3LQgD9l˪ vb9^Q5[`+ -,P_7kEց> 6e^>߈Xr}3we&1@w\x#ɏXLر WIJ2٨9Mãw*I"#˪  &(J!qQK RŒ!;34vDEA(ϊ ~*&6Uс1ÑB'$񋫀3V=V"/U৴A')=2+ٱwSX 5Vsq+—J[QQ ge^}Ul@ #H J}f4qk>x;-^m4>dXz\@VtOjѻ(a% hE)czpn9ݽ=I`b ֙T0Zo2sG/J"{)RJ ]㺽XhCtvVS~ȯ'ĦWU bxV²M![NkU|u.;qVAN `r#xJzV_). 7͎:AϧhCj}rQXsbht(ls `U6qh]" 3ϡHh]AՏ5ٸ{RA+ >d~(=7< Jb[]&NØlB#l*.Q!}vx:$;_u7/Ѯ`bUVH#_S&>$ õMpBDY ludyi1 ]|W"|1$`(=ȌXml )`Z?g\UjMj̐my%I, ?ĴPFdIg."k݈WwTW,º.k5}+۵e@8G"aSަb4#%L eb!4hhIxbMG7z9v)B+T+<} ,C[Sζ#'! T%dI&)VfP= {Rlŋ?KCBȃ-絜S5iP5A<&QxujEINwUՊMNnKRGcr"NHItw ZIQ6vhra7:e93#GKVڰ88Zj1zw2'N刐X..N894QbphvJ:[  +Ⱦy3n|.WJ䶑qs) !s0#E|'=EٔjH0ȼ銖tbPĬJ[\<4 ɯrmz}gg0K} sK( BJNQCP] ḡ>-x+&;X@UhHƻ:%%31hiJ6cSf\K}mR`9!1NʃX,8sw[|u/PïӏgaW=~1 )ý;bf?2vhC.pDD),ؒ9'oq%\{us LPҗFV Oѩq GHF-B۱W-SQGIJ@*6JS:/ ^ĨŌQgrmz%CcL)E5ە)%P0<~f j̄;X, ,†4fl\ GS(߬ȯs-w L[&w b{Zm,*o!zBIwcE J5򾕯1ˁ䢶)mP/ď[CU* {י\ƇS),XŢq5Z2oPK E.hO, nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/UTr]PK E.hOc 3 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Arg.phpUTr]SMO@+ЄQVx5FieZtGSb‚9{H$r4UZfLot)HEepܓRR|/!&@mS Vrt]@9PQHxD8L.5%lyq Cz\>O@3{zX{>Q93L+@tVp`? F}m{"^ ЕnoF`]h#tK#M&I|5ٞzVmmC64jZy-ڼ+kOm=z5iNz~9mz3 73 p`;O&vpj: oG$m$@Xv/upp<Ba+PK E.hOr5޴6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Const_.phpUTr]uSMo0 W0IuY6"3GH*kOvjL>=GʟnAQ2Z*99(: ;^#=Cev Q@tu^?!f`m fЭeQVxf %79"Muw[> ښa(]@XAkV eE#4Fg}/ώj1sRC^ 6EŞ;.<}|q+H <$Wsq i,:H'/p[FLkUюaԛ:tߎI;ϢyWoXc OScKeob_\SGhup .@8(wjysLtC7ޥ=٫Bdᡌ9|?HeteRPK E.hOf4 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr.phpUTr]/(PHIMI,J(.)L./,H-5ԴKM-.HLNU(H,*N-OIJ :& HL.J&B @\+ R+JRRrUsrPK E.hO1 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UTr]PK E.hO_i8B nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrayDimFetch.phpUTr]un0EYT DҴT},RnE3K@-^IE"ܹsƞg ȐDHiɨNQdz D%EXbIB^3\yeR"%95yIF1&@>+LZ0 7V0˹)?_[` +6dyj^NkV@8֣r;]-njHRV8.O>1*߂h(h/3˘f{N hueo !Ih3稂hyb8vŰڌz$snz~6;/IUwqSp~Ӥnn Gcx9[*H 'ZpӸ5/<ߝ[)PK E.hO)^]> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrayItem.phpUTr]TMO@+`BTW+Zc<c衚f)BH.Je7ogJ+1ʙT"Rd<<  1J BFaLdw&<2&6Z0"8Xc=ۆ[35fq2UT $+K85\@ЄhN~DՐAȋ~aW%'u$0N"ȌG;jP-x^1 WH7& :h;ق7j@[ wB<3Э6; Zi ,Qk)5N+#uMFp+K9} ,ZpsR z jf|k_e6:!]GBP[77=cޯn%uhڝ16t TZpX՟oUo&./=6yx7\t%~PK E.hO]Gr; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Array_.phpUTr]uN1)&datE1f!MM5ûÖҋ6CF ҐJPRDv8Z&0 I$)22y^s<D)AIa ~ЫՂBP/ʲ +X .TKҏ~ h6j rZjoϑ_F;z"~#*)sHZVْbSs <#Qb%1W 0Ju]Z8WTN$ёݪ;eTт[=zd!MU!ݜ7}W9wG}|*tBֶ jX$fTQ`0-.zAGz-̌4[fS;n_PK E.hOh O=B nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrowFunction.phpUTr]UMo0 WP I5]?2` En! ٦aeH`)َ/)>RtWnKH1ɅƱZ&vm%(*M)m(A|P).+\X'6VEb*Č( c`ziv_-+saa t蹺?BCTWn\&pa2 xYtRbX bҊ*9ҖDaD_Y3V턁\y4zjtAh-T*搆nEe`s" ,r hY3[DNI]ILuxwtA 5  { ۄ]qvEmEXݓOkX]*Xoh Ei?!+KTVkVQfDt T==' m_@o=P}Vpw=>bF|oc!վ;OoK9x't |{ѷ?PK E.hO$2Q; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Assign.phpUTr]uRMk0 WPH]e.m 5-}Џ:$Em$j44VWdIIܒQ(5GmH/g{=-+Tk $KE' LP7B]aQ$*Wԕ'Lz|j)v50ڒ Ց 5nBљ'RB]QQk<t,ee=k8Y};)y.n4[LDS&j9vS rM)dgqn ^kV G:=d}8EU'-OAXkI X^= j֥-a2"5`WKԆz~?(ܹ`p1N~(, xYiu8/%A2 Ye0rـș7Z$!F:0+hjXY$CH#{?ƹBu:0A=/FZFn erV' Χ]լV݊~qhӖ"@m2Xm&Lj{R\gB ł.Ra߅OAZ'7cGzVKXŮSBMMo{PK E.hO: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/UTr]PK E.hO4)̚H nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpUTr]1 0FlGWHWX(19@+nG΃EKpFyz:/"}G Tt` iXGٵt If88y8ƒ,(HaaKAE2咊60R _p^@`5˚IVԤPK E.hOW!G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpUTr]@V4F[$!%xlv"[_=y3=52&V$:͌ B!-<5<&4Q"C^^0gA1 b^Qv-Р^$ ́/8Q#Xͮj9~U!G37PK E.hOF%H nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpUTr]@V4F[ !xp ݽ1XɛYo%vc"jOB,_QyKył\@\D\O Ӈ 8(Z`f@k,܂z 9%)`* |ibQ,:ѼPK E.hOwyF nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpUTr]@V4[$!%xlv=4Ծzfv ZteE;mE(MQCz, r}[q}]RECNP!NX 6F>x1@zK=y[XB?pF-f=jVEV~PK E.hO@-tD nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Concat.phpUTr]@DV4[$!%ln=$N;/f䎡AۀhNk}3aƐ}ueǥ  VCu-8Q"!灜UQ7)w-=rZX95,סzl6|PK E.hOK֖A nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Div.phpUTr]@DV4D[$!%xlv j7SGР-c&i/B٭˜`(dBQiY`uoÅ/6D蟀bhҼ P=~Т^ӕ, B ?pFWET'2PK E.hOaC nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Minus.phpUTr]@DV4R$!%lv=0N;/of䎡A[Lxf6/!BeʎK+R]RT}K7N`ԿHPc@j| p|3 ~ h1ә,稅8G0D!;*XL PK E.hOMA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Mod.phpUTr]10ۀU4Qep$!= 6E[ߗ݁fԌDv&vE(MU+Ahj4 r{ DE\ﯔ$!` z+ȡtG&xW \=%1bYVQEef5PK E.hOFHbA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Mul.phpUTr]@DV4R$!%lv=4N;/ofwE7X\xb(!De++R_RU}GWN`ԿHPs*yHxG$Ha+y[XQ?p`B-+*j=+lfPK E.hOkB nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Plus.phpUTr]0 D|7ڑ+t`TԴkŎT$zOn䁡C7ڀhN[}1a[VƐ}u L6Cs=]9Q"iC1 Hښ;xDr'% ~`N@`gUfBYPK E.hOeЖA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Pow.phpUTr]@DV4V),Iyp .۽1i30 i/Fo깲A04q" '0_$m@5>'EjҼ p =S?tt%/` 5. 1dJd/3|PK E.hO8G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpUTr]10FۀU4($@ -\݁:M=,IM+L 32X&ٶJ fu368 aEKAGo 4 2dqUQs$լPK E.hOZH nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpUTr]1 0FlGWu,^@M*nGSGРu%8#< y ~ 6eG: VǑBu`v֟)" εrqQ7 ^ ({gވ&PK E.hOsii3> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignRef.phpUTr]}RMo0 WTЮcݘ]ڦ]UibhF@}IBa0~yÓ,$0%QFqj2ӻ8٠" 9#JZL+׭Tnck+A4rQ䋨O8K+T(&@20$Lڼz?s9^pC/p8y8ؠ0 \ O$QdSKOD2gЉT J";%8I lꤳ!hM?H{E01 |9|L uJﴝ/죋hm7jw?їBcy!Ğ4^FVOz1ԡ0;SVv߰=ykPF6ٸ5RR6I6$]m|ɞj4FRi>j[R M}8ƕZO &8XvAosH nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpUTr]? @ l]" cXj.䮠HWN2<^^~-Pi`Xpa8S =kPQʍ\Yʕ%-c#rEMK3 ۷##h0䌢mla *5$:!HF$}~k `{uPK E.hO!G<G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpUTr];0 oCHXi%+U!5%Rq,'ZwR݀<ϛ_J4 ք"t~\"}C dWδxJ-KXҥ7Ĺ52:+\[L2N|+I(g97PK E.hO{β?H nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpUTr]A 0 ^" D=Fmc-,8dmw!|o E8&&aI+EA_x%b+OZw:t?bMaIlGtsM&a1NazTr%j!i|ضyJN[~ǷPK E.hO0tް<G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpUTr]A @+f": .0 JSCo;ax{5V2γV=oT#H*\C..Gm$ZZ6cΣ,0½ (}F[Zq[HM I>raocA}+>7PK E.hOc?H nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpUTr]1 0lGW؂ӳ 两"ﶕꤾݻﭷTd|`B:BYƉVѓTYMd]%wJRk~xWi%1`ЖfxDhƪ CJ28>J((аExL~"CI#1w|/PK E.hO[J3C nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpUTr]1 @ *-X(5փ,n[M}CjW]mĻPQ׋Yb *[]9()1Y'+mʽ1_KCR^ϵwpo* )W` %U$Lducx3ob$w PK E.hO /A nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Mod.phpUTr]1@ ] 0Q!ёGKhzw =0oо~!P1rnB@KR! -rq*,=qqFQ0znX 2OAoVpF9e,]]6N`1y6tsx Ι˅ QPK E.hO/A nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpUTr]1@ 7Wј8*$:p M.7 ׯ=5V2ֱVtݭT#hI*\E.]ű'.H2 FoZ k[ޡ,,CDjwoӝ]Fu|ѵn601g*J8o \ʀ PK E.hOӰ:F nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpUTr]? 0|sҎAZABjr^.ݴR7 7jC-Aӌ lTr' yT a^s@.w2[4 JZҏ`%F]`t$8Ggz JAZ<lcY A]^t.sѪT/PK E.hOCJ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpUTr]O 0礎jt,m 黛*n8*kIvF i c6. A8Tt]m1܈ =%bRRFek130]A5g \`J=!kJ'SC_6R`GY6^<~<ЭlPK E.hOӀ/1B nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpUTr]1@ ݄8UHt$!Q<.M}C@5Aьx'&NrB d5e9?%槎8?ZOi4ko@[⥯;hG|ҟPK E.hO >H nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpUTr]? @ ٪Vc״=אAE^uRߐ!bM-Aӌ/lr!4U3za^G.v}v .6idCZiptG]DQ8u@;hP2BsnM05($U>x `oPK E.hO ޯ7E nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpUTr]A @+]S :º+(O-U0͛%Gj*TF2γV#;X+[t$BP&!<'m%)? m`3YߌVpPO Ys]kFX{$Au~ ~,FV?ٓxPK E.hO0FL nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpUTr]O 0َZc (V*8pfk:4hfL5Rˍ0R)HD\mJ\m|+'gv &Sw=(5pވ<(!kxg[0-%Y-cFÄzVVG<PK E.hO=G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpUTr]@ {n*HBΣ%x4]1MС@A֌kl}G(&rB \*hZh.!od!ב&%֣+z)½o%ojK[#hJl;X*Կ!oÏI~>BPK E.hOF/? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BitwiseNot.phpUTr]uRN1Ẃda"Do@6Mt 1mw7 sh^lJaOli|?%[$#$lmfŴ*q3㎮!^^(iŀ;F]>D6&7E<OHX Xl5^eMI| q457$KG?)̿QsHH'W+#j%+a[as.]swQЃ &j8סbx)ʸkXpiRx"'CT{_qŸ^f}IZ:l{~Yz~5T,R!?NfI@lPKFdX;ܫ̰D.%I4`6AU!FܸԪvO ,],=kauh R? 1E%5 EOU ~thnha@;P߿\0gy?H>\ {Oੋ3[g5lFAm/PK E.hO6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/UTr]PK E.hOg,Gd@ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Array_.phpUTr]} @DLJ[ eMA߽GXB(}YG{ rsZln3qsu Nn0ΊȝHS% ? F`lM6b5PK E.hO ໒? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Bool_.phpUTr]}1 0FlGWtp,m&*noG?;J'V_r֍1=Qyvֱ wcwYR8El d(#S 0򁪆CaXƨlJߖ-MVPK E.hOpn}@ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Double.phpUTr]}Ak0 "nIa,et@p5lcɐ2g'`}W}zOzOEISb7|qH,/$'vzc[EG(q&†C=i L| am=$m Ԧ@rDYC o)U KXi3k bXu]#|9ٱUأ~u1I+8X['}j:Hՙ%y LRMrWPK E.hOuh > nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Int_.phpUTr]}@DV4PP\c\.{ iof0ώɫW@9rOON ڦ=?4è Yb|3PK E.hOA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Object_.phpUTr]}@DV4V),Iqc` N;/opC7Y\G +Jc}u@eAse!V4BA- (N c B;;g==^ C{F !K M49+jVPK E.hOA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/String_.phpUTr]}0 D|7ڑ+c(TRv"'iwnw>'hяeeLporv,mjʼn&(:EܡbhriR(>+C} 60Q# 6KfU+PK E.hO2@ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Unset_.phpUTr]}@DV4PhGr9H%ÿ{˛9h Oѫ7wUmLp/rq,u,ى&(:E.ȝHFs!? =F6K&.XjPK E.hO3D nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ClassConstFetch.phpUTr]uSn0+Ѣ^KSzAH 8 Nd;-#QȻ3;kL4 XspyQ"|EDYf n\x!Dz rv K]J3j%RK'<`Ƚ?!~C &( ,뤍\BdnzW2/" $pҩ9͵2r"ȱT_͠r,Zn:x"9B oI89@}ZZ+85ǴjGlQYI{nJ|xme4'Dצ5F6" kV` a Οkpؚj'rjU!8}ohȿóN-o.Ly~E}PK E.hO[)v; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Clone_.phpUTr]uRj0+צnSB!ޒ`dyYhPd7i 4j_UDp1] BcJ&ԛe[-B",Vbx0(Ki oYXn%Ӏ+[4 vrC VV›t=>k,:)jr&ܸV [Yyi,ꗕ!/vm]C|MLUvI /ʆ&yĮFڡ8>hX-ayh;槛'GEyh<_PK E.hOr< < nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Closure.phpUTr]]o0+E%bv 6iTU]P)'hG>h.}}e+!1#R,V[/\}.ʒv"O__K,G\HǷ*+7*p Y UQHjќr%+ lW(QbgI,ٹU̶. hR*(NJ|=M{6f8_7`B=£҅Ӂ[*^1Ϥ`4¾br cHO\gȱD5l:jl*W8[AsfpSpĮQ@oK5`40W Ss2x윲oNZ譹Ev[U/;K2t_oh8?:ԖoPK E.hOtq? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ClosureUse.phpUTr]}Sn0sDF6ME]M1*ʿ6i:搰y~եB-'6Zq0J;IYghHŴ.c[ѹҘ:-GqVD^+Oɢg OL~p52ωXT > dvTTmX Y+ArIT h4^Qbuh f, ފV׆ɼJx hs{0=rq8z\VtAÏ΁|\eW| ੉s27Q0OZl[WLm.Ri+VPK E.hOz5,y; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Empty_.phpUTr]uRj0+צnSJ!ޒ`66زУĔ{%MAƚhϯPQRt'H"862M)6(ݺ-h: iqn!VQ)X5BwQ/łl͓(_H=.L^W f Gxo kVȹD1p0PFRĦwՠRb3ԶѤ(*mXô;:Ke8sD26&wvCW3]V񇿸$cp F:0{{Tۮ!d.Ia:p?冇p<PK E.hOG}: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Error.phpUTr]uRN1Ẃ(īJ W4ћRځmtt*ÿ;-Ksμyvn|a/0Ysz (ZcJ#ׇs1a3E+.oO NZ!?EڍYڦ^ 9E3}%:&pWPK E.hO 61B nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ErrorSuppress.phpUTr]uRMk0 WPʮu^K%8Rhﳝ,!{ϲ^e)@^3HiIJYv@%GXrH!mMQubQCk#%ãFQجؘ& ?,j$S_&+lY>a=0@jºy}\2bV%6 (#b'0mg >j]!xo4^w ] h\LtYǷ~v 7Jq9iizmr`KQ /AP [yˮr$d6Z'>PK E.hO }+v: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Eval_.phpUTr]uRj0+`צnSJ!ޒ`668#${%k2֌fF}}XbetTL㎔@F"^%!-n=**=69A/ퟅlMf{~/TrH'hj!uj>[n &qܺ?8(qיtbxAE)!jۋhRQDl`O19"9;?`IkPWz|;cO/F&LhԶ륏3KFrXEN- znmGkk?wc zPK E.hO+,1c: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Exit_.phpUTr]u_k0)."T6q9f2a> TJL3 iȟl~%i:\Yhi%Lc٩eж!ּ} PK E.hOh$ eU= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/FuncCall.phpUTr]uSMo0 WTЮ@h;" iV*cmiBKJ{/v"rF+"PiYR`j0JSPX,9ۼu'жRf8]vҌ }G`c$0"mi`qty䀆 800\Cb{ZuiDʚ<Gn` m)V|&$]g 긱Gmb8Kvݡ)1 .mg4S0; \z,Cyk'SXoL#7L}o-|LۋkԝzpzL#x^gi#9cl!FxtOþEc\u8h^_PK E.hO9̓= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Include_.phpUTr]u]O0+`A 8.HD d)]%ka nm0[v眶O/l &8E4 1"n8m`qA,b2 "QRD@X:gTH0OA-;p|p&(4Qt<[0!ױqiAlW' zT-e&y,dPqDT﶐>Cmr!oZ( bM8G;h ~$lj("뤻!pQӢZҶe$ e|[D<(*^]hW7M`\D_܆7[X8S׸׬׼쭧YtunyE-qK˽PK E.hOEmeD@ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Instanceof_.phpUTr]uSKo@+%ZZC/Ƥ!2 .ѴQ9,d{*3 )-S#r}Hc$LΘ"Ti}/tr05ZbCfcNEJ`oFr{nA ]]m994d L J\0)" 7C)cqg+wdQ<ہ33mf*5i6B[1][ $ ;ywvPT>m>8trhG];=VѷaKj re=:JdSK%`Zp ]o+D/ 6=az PK E.hOu\3z; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Isset_.phpUTr]uMO0 >LjWW`q2Mq٦MZK8A;Iڲy*$jԔѕ0)pE7 TsLz9k Zlvy˗2 d2!Y0\Q u8[uyM (Ji;aZaPj;M'uS7}6~ I[ иn8GOEQXᴻvbJᅐe7P'X m)+~8QI'GzZydwCqMj U%滛#ao~&!PK E.hOF*P: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/List_.phpUTr]}KO1)@īBCHdS,ݦݝvwy 7^i(/ Z#V ߧ(Rl-P3.`cfP*u ^% U xWnHư2BT dDI.eݼ:AAbC/V J%)Xj *km@3֗ ?ŝq0K;+E!+`m'M.^y۾^uӤ:a2KulWoNG޹we-ps#,4ꇦCz#h &qųנ淒-[.PK E.hOxFl? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/MethodCall.phpUTr]uTMo0 +|D[uv]}aU6V(2рv~~2+!A3m&2%pmQ#,rɔF^ Je>ܫtz*' J#DkxBɜ9Ah x&}0bʔ`qy"d Eh*3[?=D}w7S2WW[KRm i=gVInD!Ni)2/ԼcBLw}N^M1 =(S};P\p$`9њ?ע7n ؋-p3XmHۓC;17iu6r`-tMp ?;įK )*3; J/TJ*#c#=<4tŋ58j;O7lX/PK E.hOSR9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/New_.phpUTr]Sn0+P)hQMiAWDo")q,/-Tgy3? q K,3ybDL4(`XqAfdvd\{[ 9JBs|8I`8XBg>Wg`?`A2PvU&HfXoA&T>BZB(Ųl(`TU@5郏kç qTމJn# =ՍAD<ʕ6l]C)I4=@tVwПfenG>6t=7V<&*>NNn&n`PAJL͍('ƉT:6ܶf]?5Kj-~f2d–|PK E.hOukd2y< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/PostDec.phpUTr]uRn0 +|@*TЮclLۮi.0UnAF3&}II`C"/=;4+%VR֐FIqM֠" /MI׍a_wR3Z ).-b򓀏arEM ۪qE])y' :%0I h&; z/RBN̸G,PK E.hOL4v; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/PreInc.phpUTr]uMk0 :҄meu:.m 55=ZF|Џ:8 yZ㳮4$jdR4>G5`V!^L7%-޶}ݙkO4fLJm-@E)L~|!K,jtT+j)`/QީfӚu^>ȸn4Doz&DfF,x)KiFa l׉oDBi\@g0_&Ў$V>(saN)E?+3 /:L3shd+/{\8!?48j=qPK E.hOر+y; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Print_.phpUTr]uRj0+`צnSJޒ`dyYhPd7=H͌V*k )IB$R̃@d!eZ/ {,nb W^`kaʟN@:4epRx k&`sa̅dz^ ,ϨL)viۍh$xF["ka:n6;";]`IP ݿ0DlH[ԟt_tj4ęj"mF=X_AFcPK E.hO-čB nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/PropertyFetch.phpUTr]uSQO0~W܃ L_//n!F +M[t-m}rwwG'""͉@iɨNncdJ0ĜHr1+R\DM%XS="85QTHIvgtmxR4ei:7ǴJP1aݲ!ź:ch}ZZo+TT `Zow͞-;oL; U>}oIeCk-sSN4\!>xPK E.hO, ;> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ShellExec.phpUTr]uMo0 > CЮclLWn*7hE QL|HoBANBM] ">ǃ !V(fҋ6x[qDfTU !3p[$j@qc)P1mUskYU )ԆɯOHs+]}QWU2kSu ҙ{jmpT:H,4NYC y^r+muo+Byt⡃>2cꙢǷ+Ņ~p+<>oxN[+23bxi k2VK5.\@߃~ɪaM[B?ijzPK E.hO4}g? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/StaticCall.phpUTr]uTMo0 WT@lhu CH iHmt ]?rh+=?$;f3JKNu/S yܘmi3u8'%m;1EVI\aV+raN.ghG.% l8`:Ќ T4<ΎKdR, 7_'!ߨ{Q)XLOyޯfA&|V<+tQqf-̮,RxH#pSE*E!ȣr`JuD{g4`2T+`z@ɴMĭOMh &ٱq;ރ莣e_9 ac3|duIt%^nx^3IVIMȇ*u}M~)чB=]EaS9OPiE9jqx͎F~AK2KCkY6ڧ"r6;**̴|' f6PK E.hO 0? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UnaryMinus.phpUTr]uRAn0{ERU=!=6"cy TN=ؒg<3^Z+(IlPSFWfQI+fҋi]m-_C"3|IJZ%ǣ\ &?YX%dÀ+[l*15핰Ct0 68IeuBƨz3*j{ѸKYVqi{$!E2 4muŷO'#^4ZCt1Ҋ̇-OMߦxh暌WK_i~ Z~XߟtPK E.hO*^u1> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UnaryPlus.phpUTr]uRN0+P)mT\)"ĵ*8K)u-Z;>l3Y 5jѕ0+hE7 AZ5^η-vJ;5)2çDOk@;C`pqu8 1W[ 8u%`@b{%VV}@y#Bܵ;Sq9h#v{rx_ 2a}Ir,Q&0-oy&EpWqJkH[Uq8v#X:Ǝ`ȠR45/'#\6s}r5̧͒-~O]"cYi"˽j'~ KmOPK E.hO?:9> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/YieldFrom.phpUTr]uk0W"dsn= jrɰ %ik{H }JȑLaDZ\Hx$3E*^*7t-cDU`j(r~1J~3DE%@WPBXddea xuo&`}uu:T2vM M.ΤL)VÐiFH煶BVBVX^Ҕw6#wbCL.z[Ӊ~|.7tࢥ bxhj,BG Wϭטv<ˍq<z~PK E.hO]G; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Yield_.phpUTr]}S[k0~8B^9ƞ"l J陖r_6L\i1aPڸ4K"Ǖ($uy/mmAb™cR%pg]I%B^\C.DԺ#E ]KVF/3j PGgY\!F6@-i(:P8P#|3"4CmW*rmjy/c0XAWo&6fw29b. "#oz;Cۦ GDͪRH}[zaEڿ]y^+kCFv{_mLԅ PK E.hO!$): nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Identifier.phpUTr]UMk@W 8:uC)B18Z*i],K.:1͛;_ʬe. &dvi_KɧUiT p"ENU]1AABm B_lRp# 0 zG+RØ E1ez[VhX)A[G?nsV eʕmQ"u)*Q*O&0HĄ:5XSɔܚ̆z/,N 93 |Sݟ(;f*ax Ue4UVZDò֕˥'m@fg}xzҳD Ms訨Gj厉߼ )nVF}'Z?3sާ':Fh\GPK E.hOXמ+4 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name.phpUTr]YS884Gڴ3LnFXSI2!S߮$W0 jw?~!30JK{ΘtTFCF.Jg1x(O)VY=@%A掀63YC0$jXirѴ"Src$)GchIT:XՍ'w>o%șHCCҡ}*@?cd߬*'8!P)irGSؗ ٚZqÌ]и\;Q5)MHu)>}X gW ߍ}s}M“4[ 2HI&n&vNL_358+$ӹLXz'?0\*mw 쐰&y 36yK]jń5MfԴ޼ ght\\=P)wkL^^b~Sd3GV+4s΢C.i` 6و+Iبl=&t}Nς-ȿ'In|Ć6h4Qc&$Kv=@:F$%Vc3{.F˫;P$S ~5֎ Yq\MB (Z6hh" x@ 8LȤ:0j~(.&`. ®٘2KфluPvZJIDDXXV}~cg9*JĊɐ*p}vn~?3.|,߂K'mTb0]>#a2ݶ"۶Z.?ٮcdž Պ`>.z*Fc7)'}vďXwv?* xs yE\%K"D+YB89a@4G*>}|F%F 44^c_fz y҃- 68׸x&93s ^! d^lwIOO5+ xX /2܍c2 # "?3xLSEei!cq i' :82_/t#VmMiIE@N;u=;u~^#xt舜cʩ2PPa-pGwsc?Ox~oiJ26!k/7n2& 2&̼LyB{e~4, vyzH1;Ǔ"!۔n;D{"w*O?K:&LddQMr Ne+B洚^yzfɵ7FJeb!?b*!}.bXyF+P Usl#o7o*ШKG[]s^V?wQ/zlm*rg=kjν/+OoTo~M3u';Nϻ7\Zie^Om*#6.\MF{mo3^ZxFͱM*8&h!t L6]*P 7 "u-__a8*+u(_Sy薫{k5F*چO)<:ujFsHS|Vjћo3UX PٞcwEskO:m@]I"3wSxk\>ZcsTPK E.hO1 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/UTr]PK E.hOaXOC nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/FullyQualified.phpUTr]j0@9@z= #cQUrQP+! IcfIʢ H5 ihLE*dL°(60 7G+|dSsPf=9OuU] |Hjp X1i ѩS^#Y-aÜ:W W҅#\"KO](Oq~d&iW?w mhm~qH&j8+]ENnIEJ T¬( VW#xm@s;<1B>.TV 3*9%Rݷ{+L^o0x([~PK E.hO)FCsJ= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/Relative.phpUTr]Mk!+PtCCE/ YխmBnbBi3#7UYA\2mKFpѬB{uֹHV# jȌE to}g-pJr َ;zn=B%7 _%R|>оK')25*$gڬcRp($/v#4*;̓B+q 'l0 =X!l8 &5:;cP"=Y4ySt/t5ul=VjpBפcn N ҳI]}"X+jΓPK E.hOX< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/NullableType.phpUTr]uMO@s GTUD i@7)~DnXM<;}R@Ay"%uO1)9+fYd?5,.2 \ۏ,MUaVч}i-w( َ|T )Z\>0\E-A4GQ(oMԿx^rck(3E0;`V]?Vbھ] Q .Fzi0+L`8iX} ce*i|]Lzi/yޭ}\Utj3 cF|{\_V#n6W8E^B&ۿ1!SH+p$i+u)JM5wĭ4'AU`7MʽNF6/!eĹ<|o^ݽŚS´ wh:b\nM,)\?)ؿz@m[= ?ru ~F'ECG7MV TZp M=B-AgK޿|6]|e9 PK E.hOf]b6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar.phpUTr] P ׂ[uFG>[b)fNtPK E.hO3 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/UTr]PK E.hO>P6> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/DNumber.phpUTr]U]O0}ﯸ*%7 BMi<HIR*Qic{uYCNH+-Yz]S59NNIF᦬oTT>LENn3)a9DU )JS+ӃhDBQ !>Pڤ`5_7ɴPGQptH=(@4rd CQh"ϙf ^GCVg ƶ(i*yuǦCL!8ӑ%} jw%\R 8H dӭT$ŌXQ7^ʝd)cP(x Գ Q͗JCo@ jjiPg˭0k@Fў49F:p})i(%:-we4)Z-λv|m8sB(Kv04!̗=VGokv\ ékscv7ֆ̬#NDt{KFr/}~Q7 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/LNumber.phpUTr]Vn0SUIM]Y&jDrD Id;hwa6K`tn9 33mD䫉z̸tw~9 lȄzg\֝.;QRA>xH(ԭ_-TEغ` Bt^8tzOxrx6WG([|wgMqzrEҁ;&C{qC[ +'C(}%%`$!Av c`k ?)8+>L[A4aqš4^[L'CLM ݆.YVa$_Y,W I5o5"TPu* ,nKY IjLU).X!Mƶ;ESߢ?ֻ%L<: n֟[z{i,ys:~HJA+ڴe0KCx0]Rw帨.< +M'ST Ko*nq׆0eT0%ޥÉYζ&V,1]M+mXun3' kD͠W(GQ`4cF!7M}/t* · hyU TBj5/뭃=o*< {oj(mv#k嬂V>;i[&5ǧ z}T78 eQ[ĄLֻ+E E8k#Πi*f<(Ћku.S[@3|5;ߛ%ctڜ sU~PK E.hOT!MA nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst.phpUTr]uOk0 :;PqAq$8ƖaeNҵY3_=IOPlPdԒ3>h8BaKV$Tzƒ٥]AD/aQ2x{kZv2*, j+,l : =nG?k4X Erd(j; oGժ卷;%Y&Oͣk5||0΂To]"KCQ gCM'NIOˡ *+*!MɃxKQPK E.hO> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/UTr]PK E.hOTzAH nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpUTr]A @+fD0l뤂.oUS;˼y`Z5^ZN9tOC$ZމTEk il5Ua:˦S٠مb3d#Ñքx 2w n^+ ryĩX,9o5DXQ:ٿ]Ÿ|\p PK E.hO!qp:E nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpUTr]10ۀU48H:4K;[ Iny}ٹAUcbo4K~:*IF(W(O˼ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/String_.phpUTr]W[SF~W2J"6S(Ĕv4@YkA8޳dBN˹߾7 v$犡Ҩr76yQH\ WE0k JQ<@I4U5bwCsA+z icy&*XPz܀E<8^_3p{y96g'yĻ_Sx5L@G3!Ry$q_|υ"&z!u"ic}(:)1X#]_QkH2MT*IJ䩳:SiJN`U-~|h%?;yzQG9"23 0Ӈx(,jɴz(SYa[G(Ib8|@1a4H_};) Rf!/53c ñ*3N[z +d( ! Cכ&`9pk)Y@KQ9T{5;CEa5ٚ~3;Lޜ:g)mcv]13w7IЏkalZ7r%AF1QG>73LRK뀼ab})~o:an3FggEnhN wUBOs.Vk pUQz` _EXr(N]= x]Kxs~PK E.hO;? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ClassConst.phpUTr]Tn@}WLƈ6+mՐ@RUYm펣&޽Iv3;̙, AL8,@wg`Y R4ʦ Ґp<idBH4i o :vp` $ ٚQ.{O|ޯc}fb HA& m@9IHB׀yFv->%,1- vyQO RI|Wh!dW#nraT Cm-{EXI2-B {Ef8KL uϣ?h;6Bub"|ZqF@P\s؆^Q7fgD1 j$r3aTNg$ Iu`b-Z>T+s~r}}79Ε-j==f޹wd8ါhMS_PrUev7h>p˂=<Kp> 0dsVo_?vlPK E.hO%a> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ClassLike.phpUTr]UM0WEBWCUiPiO,ɄX vdlQNGC 7e^BI! ƖL;mKa)B[aSa,NaF+b|mO^z4DC[&`''8bJؠrA$Hp~IR W0O)*D['pae~,d [|]f$Wƞ:Z6\zim|5B7Eygk H1b taŰ2mP$9ʥ=60p{$T:k8eF!jVw.2-PLV g*UKRMuYRk_^eP(>'Gttr!L*44PeJ e x |VaZ{xY`wF4hH*|+JlIR",Uہ7[P #Vn) SkvqWlia E^p;wPY9 ĺ?r[_44˪͠TTZ_eTk 5eE$/ITdY TX&4٥)^CH&cX48ePH0dG_栫٦ytDrí'w8Dq oZJB,矝F|++9z"$ůM8ވm*K籟ҿ|Yv,%@Z)1,ϩgcKEQZ7 DRyaN'4B/8Hb^>)ٕmtkOAKC~W̖iV 1Aof2,roDqȉÉ{N2Re?Tdeq;Z~6NCDx&߆3(m0x7l8ZGqgHa, ~8=1xqF / /ΈNط/zijK} j<{Lꮻb.X/PK E.hO\ ; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Class_.phpUTr]W[OF~ϯ8'(-.jQ,lU(c2o/رce-6swso2+$gUF7tS2!\P~~&cL9OpcQ$Z&}IdοO!'o8t'jcp4lM'yE2Ud捽I|ݎ'9U½_A\*2_ܙ{^_Rj<%!3ױ:<8K$x88Y{aDŰ.Qsi64 A,1M$b!/C,`)%/`s_ N~YF8Ach$*MAo%SX%U5>317m)$ 6JrocF()@TCm]uJh廇N}]TCM[5yTΌ.ĮriNe(bGy> X7]9.)<}oFWRc2ZY`&/CRYibM21#%t{Э>A}3!z f>$IU-/0^p@hTmD<Ā8RUv%}[T 1l k>**VEV\I}:Wy$5 0ޜy+ӏNo6-7:fhq[l(rz鞝̎OJ'ZDak nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Continue_.phpUTr]}j0EYۦnSJ!`dylIH+9rC qaU@^3CC^IG(AGjδAW jg\W)3( ' L?a;픆mr 7PK `Ve0q!n;w ǿ %]T1͚BxxAl7`䶙[B/EQQ% WlwC {MлIaq*+stUqQ?ǝ!iasjc8`,,^w8 E#۟_N]U17PK E.hO*#~C nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/DeclareDeclare.phpUTr]uSMO@Ẃ@PU,`ԃ1!$/B`cY64w?Zh Ρ{ffa7RL2"-UQFwA0EI0)|Kq>S[eZ6#iȤgOZ,pB?w0)2EWaݾzZ_^\46{4 ; O;fZՉ@GCNfo D s"Œ,f^w=4`DÅ2"Z4-hjXiDA۪UyApN9 jCͰQ4x"S}e&?`:W[]eػܶs# >CS+AXEkq8}Kq1%1PK E.hOY!dq= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Declare_.phpUTr]uSOO0)LNtFfY2ot }5.n -c=@gq3Z& eA1Ó`*.)A(QTLnWuζk51E#/d~+v<PK E.hO+\-8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Do_.phpUTr]uRMo0 WTЮclLcWnzRF&4c9> TЮclLWn4h%Hؙ@}Ie[=.5(w`Bl*5q8"%HZHE.p=;ҭ.f3*Ew)L j@Vi* t9v[ۜ» t;T #@lܛ a8 䖑(*v~m[k*鍐e5 ]qMj30&ˊ_z+>mrNџmm6_ moQ\P;i_/INPK E.hOq^kc4< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ElseIf_.phpUTr]uMo0 > *6anԆ(q'_JKrh%q^AB` T)D=yHdaq 4zI%|4fZìKO"p-~"0g$0f'f'(d497*katP6H!̬7L|8>E-JXB\gSb`cd5gޟDCͤJpwsi 6h5iKrJN($#Gɟe^B g 'ڨ"1;SW 쀺d S^>1Q=?7`_顇D5| Y_ TC @l/LyR}օ`$3[_V1/A Z2GL,hIb/7߀; +G10^!5(PHFw̖v(O9.Džu 1ԙ `MThfE J ڀ ƏMDx_2]?gl7Bw?3XL7- Hs{b ы'ʇsC屹A׌uNV4.zCpС+CM|HӢ Of(DbaKڱ b~Ny( mgbSpwы_LAŵ| S|rba^ m/)wJtނ l<^œ) w MDmF8{$-KЧ崟:nv]oPK E.hOQ> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Function_.phpUTr]UQo0~ϯJ+B7iҤ=BN@Dﻳ В|<+w%$<Ιe>\M? 'A ؞v}գk`yWڎ љԖsS0TŶ_mpϞIUD> V i3( 倦ס?=-,KFDpްl Ǟ .rRRPvD1Ե56d9HVTi]dsfvG.nKf!ػMϕem³ dS#-k,G>FSXejc%j ςpO/eSa\ZƉ?B8ٷgkMC1fgUթ58-׏|fIo)v&j!ޮmmժ~M//*1:x/ܢi0<Ok3a,!~B Գ rwb﹀.C찎PK E.hOexE< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Global_.phpUTr]uMk0 :҆meu:ح:viKP52g;Iy%EzEF,8FQp#Hc!`S4$bRb1 {t0"x Ď* iw [4Mm| h$ HAm^zNH&/$Z+W-a a{DTߵ.m8@sNEp VD4즖[v򗲔,k8|YUx!dYѵo|9fvגn.gѵ04vCgM+3L-dn[`{Zx*oX#k&PK E.hOׂY: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Goto_.phpUTr]uN0E6*"MUZ9ɴ5J;vj-yq"9SFf'I  -YJo)Mj5+3Z-La\[F5'5n.:AZ2O\ /pa漠\#g 0%>m! ;&9OBvDx)kϦFat!&VM%Su+*f”b;tnj'֐sqKrNQ?k+R_8NFc1@=Jl}:ԏN 6XqC@w9v.:ߐY?[QE*eiG5vz ' [>PK E.hOYk= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/GroupUse.phpUTr]uS]O0}߯&%2c|Q\D l,i;1w{Ͳ5{rHh#Y"uT}qSIL!Ir't9S{D_ X.%%s EY"ίz =?D@|i1A`ZohPXnPM@lӸ Z~+tEsVJdT1'KuomQκ(׼Æ+`D GC"JP$I2mI #(Z3-`R];|3$Ūdֶ}l jx jsR P~c\jVqѼad\ `wnYw]U_$Du!tLSk&N4 HT>vV6c&VE1 {1Yx2ɲRX@.;koB_4t#Xzau8Lq^ Gg$ό[[y 0(XGdjay_0` wPK E.hOi4&%8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/If_.phpUTr]TMO0 Wm c ā B1UYJ]);vnm79g;%덆L0rM쇖8NHD-R ( JPeya5#bp' ߭T}F@|4Wa|]TVآRF"9:w^E ')L,r+>){Ȼ%H8hlVhb`| KÈJL))PgE8 &Z #-Ylap׌Eon$UYVozJsQ8ibGfL7 '-W$wt! (dMڒΐt׵%n2O'dGѼV;I6*zC3XvV[_ 7xzhODt2qc[|NA./!§%Eڅ=;3t='F(XƼx3^5['z\~41IPK E.hOYv2? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/InlineHTML.phpUTr]uAO1+@QWxD ܀lMҴS"1wPa{iz"Qe#d^)\(F+=Bc̆fc^םxjeɤ* AϾ2[0آ^[эvZ hmv䉩"PF2'*1bm$[h4n(_>4w-d.,7 k8Meg 8%R4=ς߇{ +i'oD >%-°aܥ mh1N&n45Mن6ˇT}yv r7 q0"J4qN͙6W*ՂJryk.29Jzt-4:AceX܀OE& L# f $ÐW6+hMKBotXNAC:&ߖMӬ?ug Lkn9Hf QIV!X}!)o ]#Ŏa@ I;a_N*:0V¤& ݮηH d~4=-^<b~XKXJ^O?PK E.hO9? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Namespace_.phpUTr]uoO0S\ `A Q0!*; K*,nތDƔؒ]ާGӦ@>m,tA|5Kr1FD=#LRRȐ-cA pG#d$ )8&N^|}هh2k p`I8,~4"x=6QCCM;:"/"AS^(@ ).@Lz^# 9K %ח*9Ce5.`! #Qy dJA%{N׈mՇ]6UB.w'W*'XIT`;ʖm6[pSЖlb,mnm1VsoiiS;ۘ_PK E.hOu-8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Nop.phpUTr]u 0 }` 8kWwzQ!/|MCbcKfЬIΘ.$/fi Ť3f %*8O6f68  |i׎SIAT6(N`> 9|WiY?ɿR˪D!M3FžPK E.hOnnL= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Property.phpUTr]U]o0}ϯ nIJJi*2KlGڢ6ϽkiJ!anqH(I1w8=ˢhyB U:Fc6J"<7#c3/T`Jf9cˊN$&jIØ%)fb4Pk@^'6=  %.CDGl/bxN!RiPIgbxo%7c r/ _? JPp@`I AbPƧ|v,9Z#/#y/lPYX-y)E͑"!;| iW?Űm~MA/MkZ|\d4AXxRNi;9MHUuuF׌Ŋj+{͉Oŭuw%1#<0t]ſa'a1-X]P5JOhrs9 y@bL mhױnLӮU!R QL$X?ޓgP.$H}o$J ChfM -+UnUIplKpe0P}jBj AWqFV2LA9]4Fn srnc# ja ^ʲb!j8VI/Mn;GDs&2ۧ ř~F|/쓫Fw{㔧nZ~5Ҥ qPK E.hO/bTSv> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/StaticVar.phpUTr]uSn0+@צi^U/6HX(^;Cbyg3^En%d,PS$F 1-1e*T4g,ZҎl~%}hְ$"4PV6wXV[ADWx7Cn-M.KӍ;(+O/uJ}SPuHle}wPK E.hOeA< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Static_.phpUTr]uMo0 > mh16.*7  U젡$M T_?~6PJQ}b|h$$XKjPHmf9ݕr9]ҽ#Aԥ?ל&0`G5h+p¢Zij aHhlQ)=C@d/dl` HGAA;{OQߥM4X_x]\1xkaaٕ(ˠ NcŅV /<%-5Xy%cX62止Ƿ ř~t- WwcrFa~xvNōdk4,ROKW_nˏ~RYҎxLPK E.hO[ < nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Switch_.phpUTr]uRn0 +|@*TlhױnLhWn4h@$MK),F{~~v&K QlQq$hE왖2XrIfj8l=Z>bVLkXpeLڴ7{&Ioj(HW€Z`z5'e뭿or,oH\ ۦ〰ܰf(X>x`7{l9Ѐ|nЦ4 W}A6- {~ǡHmKaA \?^1:i角v !S8mbperg6n8M14J:v1^66]i/V\nUcYqxPK E.hOF..2; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Throw_.phpUTr]uRn0+ڢ^KRU"$%TMR m}pٙfuDbSK.tEJ쐴JO!4ISr;v>Ni> =* ~f?9o{m_HT7 a i'/d(J&k6ˆ݅O9{q`7e$x)˚Yl\m;"[%=Bv1^ *ӈ9W5>]1.>1<-&cg ̮}I mAF"js;Aa9N}PK E.hOG,%a= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUse.phpUTr]uSn0 +|TЮcl2i D3 M&Ma9sܼ˽*ӤJF9%(I8rJs ^Бln-ְTXҧpK~ke0F3* ٰH= Z`Z$$l}s!&eM |()ì6B%7a=L HTx\_WpN]mo:ضE*M8Des@sVAaiþԏouLxvIv0[7*7)KpxUJt:Enj'O"wOHnSӚPK E.hO!LZ G nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpUTr]m @ { EnI"=h%E}w-8H3/Yo}1М%X-Wyzj*! B4y$." V.L{^PlB0T 2I`w0,G@+ka&=I'CNR#I՚z3T}PK E.hOD nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/UTr]PK E.hO9=6,M nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpUTr]}Tn0+@459#@S HAm|AnADzb(&\'d5Jz`ڠmGi7)b$iSZ3T߄N';V+4ȶ Iw.^jX](+Q…I~pofk-߰FZڒ 0 \Jc֊Ď վV1W"uG(6( H08*:3J8ågtRc[B\8UY60ﵕ(έE4eGYӯ9s}ы_yua'L\DKK F~&}c1 & ճ׽P?Y3ސ۽qf'e5R%<^44tfI_y|ܴbꮠbzJ?PK E.hOzER nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpUTr]}SMO0W̡Rڪ, ⴇe+*RX;N6|ȇ=y77zAPCCCF&]DឬƂ`34x=/ Joi*P3,T603T I ?%o u>{2/g#ٱ{yN02(N0ҝp hYT5ȖV}LN PU؛65r-`O-E _8>T~uH| V !TQE0:LMaH=rgҞ]D_uC#FwXB u+c0N\rӰU(v&NJコ~xk 5#6wZ?LIZOѐ4ISŌ7+]䖥* ~dд׭6%|%7`=Ak[ԕ+A"2xinqoӍ5ܜX"]_!q,+5ncIOB.s >Ԃ1+y[g{7H$0tBO)Ntw-wpKzì NОKDia؉E@9E>}_PK E.hO[X9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Use_.phpUTr]uTao0ί V֩MT$ؑ픢}wv\-B}サ{|\f%<əmcHKnWA%YMӬ2m^*嫙-,W 2 -:ikˋ w XȿR$j(^oZU%n)nCUɵwAIj 6Dwlo`Ãz'ce" 5^R#6MM .X cx$$=f@H47aXu S^81oBIӫ/={\ Ba̡ԟE} 9 ɞG,vB=O|( hR/M.?cF/ Gs &\Bd T)D=NH daSzp,ntEk5|E)PdΪ'{I/j EVP=GmYp\Q9+Bm & R5n ]N. m&bU' Q>!Z1{;Fv [C%Y m5h/4{KSތ6hcУ&$js.uz<OD?:`ӺًNIvHKu3 !m)$b,AmMc7Mݛ`q_PK E.hOp99 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/UnionType.phpUTr]uMO1+@QWxBH2 m|C7w*+4Y6Rl>%5Y`c4hS/9{~8,=Y JnԻ}3±,InQ d)sIw}Bڕ+)&MwB/N!(z+h4Vv>Acp S+aUIi8)0vꬦ34^>L9ԡEg^J{t8΅Bi\kAB46`oQ0I#. FXxijqIKO&myPK E.hOjF(A nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/VarLikeIdentifier.phpUTr]uOK1skx H)R< 2ݝ톦I-dk-(昼{o&wPSi(ʾw=fܹ;Kd!~[i:; e&EڢسW>Q^[ )XMA{攉:V-2]Ģ wˁd2Pt{xTMZxɗ*jPBJ.$1Y"?-=ն;xZz>:X`ŪԄ h8?0iy9PK E.hO??7 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeAbstract.phpUTr]XQS6~WloáG)\t[.Q ѝ" d;8i^շ~y:K!X0vl)Iޞds4)nf 5 Ym3P %>OQ||(y3f{R,gO2ݳCB#<rC4Ӛ-B5js{&0dl0JR Ylu> G=v};fQ}YW$Vv )0iA̸޺k2fZ *GSµ^kzp 'kLWe՟W5lU* tiyœ'y2a_e^<`@Iɻn]mE\RWڬzijкrkS-Ye uBa, '9vRwΕ vozLך]v;k<~*}-v~_K1֒dm*IvU͸u \~g]u?+_{xo2x3$oAK kRB7b5/ 1[{.Ƙpy>"NHFUFMibċt8z0g'])Cc2RM|3ª[<s.!KJd&ĿE/e Hd9hg 엜~$G-CvIq<U3UF!Gp2ZndTm)e 7vk=Pqc]wհ4Ə!xԠH o,euk!<05i4nTfz*׌Gx6IHGAӿm~HG(@ap MQ O9TA9΢jUF*]wOϸ &2ld0t>XoFGn\O|L&c_$qFў}sNf}Ôi`uuNhӮt!k|nön-RI"b[5 T)#^!|dђSIHM酀(QZq*H.(\|'`tHLJ۫Fgd_GL)XFyBlGL( *bcp+O](g_C~pjGhv&Ϯq}wğGM@NKxЉ1~ S eb]̎^,K<0 x lx5,$# WoHDCC@,2CSȅqFEb 1{vHUoxUNFGf'MvX c<|JO)K HLXQ\q@!^H:<8}be޵PjBO}{"RSҦUjՇXZ5h|P?Xk'W=:sȡ$/g@z$H&>Qad4N0IR;uAF?';B!|<|\-M ;R~yЧo2\;mR ,Tnl`p-IL.+4̞Ҫ ?`g= 6m_iZO;`ֳJ-"Z S( FQRz'vj6 R`# a(ꑡp;65;FW**%l Z |8 KNN;;kU=7M[ڣiQuvgNiQY&.!CUݥX&3%c+)Pilaz{te$_w _]; ]2P|"<|M'dTPssiZtl'T1ǣl+-C& H(~φ6Z \͇EQ~@^lA:%MA"NO4)fhNP+缑&O$Gl)uNRf⦤4hb.j^E`]LѸ*Wg߯'jkEju7p1:72fwwF~&Bul{ V]7Y+Y,tmxaG[s_{dfg4 qycV{RII/} xxіّYC#xum:)jt愖 Mbi'~X( >vu3Pu*aLލhT$-g4})t2 f4JMO. DNTr4)S9M 6v@(yD2Jl~qm[e+q{TWKmsWn؎ MCDK6dSS@N sVi{!SLjvu"P3=kcv8A3`7f^vP11fdKKg)PK E.hO8MH: 5 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeFinder.phpUTr]UMk0WLam5l ^@K/I:䄥F >Cyyz~Z(Q f^u+|e oi 83Fh7ڙŗ?K |o6v3YtVsL?^v*}-{ENaRl%l1m"oa j,w-t%yTgTWמ3 Pr^Cs-}ϼlV919zP~˼RUlQ^σ~Y#PK E.hO<-Av`)8 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeTraverser.phpUTr]Z[OG~W"vDI(*R qAxwGYlgf!(mW_eޝs?;sf˻tBLHQZHmJUM'3RQ8M?ĻZ)81JrM]`43u1TN ?]zBQtARId8G.DSq BI3aI4)hR ![v+"p lߙAQAYiyG$IE; 1$5(ғD C{mG+^FqgE} n&I) c!5~)dB6 SWo2,Mq fytrzwwaSADR1X@$St&M(%N-UC -R^0%̊ȭ -qU_ibUwKOz\޶05l1zl}kjxU ݔDSTL1پxL@oU"K+5 WUNemm\}QTt*V"T S_Y@)y$jQxq8(1R8 $HUs uۅ=ϣD`%V&fщ S8-Ao<]WȍOLO̜cK:VY8l(&1jro@zvP#*ܞъO KҶ ͵JcAJnOZj WvrI:i=(8+ҬuβcMQW4McT 2Q*dɚ2[ʯl}mktK7?}W,hj\;1х$ wM$ɨm)xs(B I]WZ~UZ͵ V2!x>'WjVAa1 U|BlXΉsɚwHG~7ce_vjhJ|@j27d*#I2-Qq|a8jJÑ%DS¯,N8f~ngp oyІodN=dp/ypOgjxd]/}tr.J/tvFGWQ>i:=pi~ڸ5翟))7J硫jShαw|8߃C5LA*{NSq_gR*y\iu-B'aJw<Zbe[QTrT(C>Mݽ٥]M–#4'L4lo[֣(͡ox?`d1t}˸]6e)PԄ*eGB^"|#7[)42֎s^7)6KK ѪS V²+aU.{PK E.hO}uA nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeTraverserInterface.phpUTr]OK0sCы,xLm&"~wA,R\{ܹ΁, +Ϥ~C{ adй$TmGHrĩPd! M] 5 a^,$&`GlA*X~ iX[3t[Դ {;b fT\$GrτE$/`[0aڜ; 'ý+RGAb)$j3gS<5lSN|/PK E.hOZM6 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor.phpUTr]UM0ẂCXj#UM&K*3vkaQ̼{7M@u$st5F H<+C*lj \H+u5' a,5rfZҰEX dn3ߺU*CxւubcAW!Kq'98 hi QE}gL a;pMR2չFoYw`$Bf?}K 4:u>A_^*dΗlHd9~f%aq%UA23ҕgqӮ7{;z!޼] sh_yR +(Q5 s+م8 _0#VR(IYaHtQ6k$SkOV4..iبGjė{tpݤ_q'?f??pM,@ʩPK E.hO3 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/UTr]PK E.hOzaE nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/CloningVisitor.phpUTr]mPN1 +|ԇ(祠;qBB٬ۍ:!v**vEA왉Рl KNw;hºkshճ;W~a(o1y i 뀔`GJiB[Ov@d>1uUɢzYZ˄'lPĴ i%YDŽ(i)rǓpZ 3< 5 Wo1םw$T`Tj =Ĩ/`(d<7uԾ{4GPK E.hOhłbE nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/FindingVisitor.phpUTr]}RO0xWŘx0^{.w_1@{߯z]CR '$hW]Yf}-$˺~Σx%):F47M%$Fu t)k8 labh>cv !tqbaL&4'~6̷"B#S%6QLy1\!wM1BJZFIYOx1BxĽ0K{gGq~OHPuwAkL~;NpV űu%>|QZ$Y'T[>Vtb)=v鸓O[`e:E98I|"rߗ:20/* ajӀ 呵KϢ?HPK E.hOzJBJ nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpUTr]O0sMJ/UXJ1j#{m $*={o};:JҖN,I8DXf)2+j7"g+?.["g}!,l1܂rn(=u9)W~g*B 4'Wc2>'s% 05Jw"Ŧ(R%2g |ae $2 &>ِ`ij1!pU祒PZ}FZRz6RB&ı .ntC "AqI8k^#VftP# K[Ӷu ieju{%3X{=ZqbK蘜wݮ'NDY5N#5P{ѱ/@viQS}?h AU;oicݬ_Oo׎ ?PK E.hOXdy$!C nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/NameResolver.phpUTr]Ymo6_"N}uFtV;K CSDɓ%$Z~i"@-x+O_DyIoBgN$UWŕLR܍@Sm()_$q򫌂Pbum.Ȩo,]>|[42[pw ߗ23'ݍyt° ` Il^4T"@𲹡OGӣ#I&iu |xtJ$67*7Q4C\971RI8: _9cKMIr "P5:bLAA@ MƉ2EBG.} IdFǑxʬ|b= /P3 0UݾFmHޖJ*`. 3C[{4b*Y0' W"0D/+%CSuA?^=eJ4UK&W‰/&@bB~tky|D@WٺgO2I83.D6Pb|{?IҫK/_"[w`:=~ǒweʳ.,m;HQ{_ FMp}=*$K3KHi* < ~K2#a_Y/6m CI.rp.NAZ݌CPe$^.n2n Yߛ d{' qTIz߫n5~\" Ӂ؝A89mhJH\֠muܨreZO9ҍ;zo*6o ZF?D hΟy{xymae'*Wظ߭U/Tb+XZ .7s/=Ɯ&-s϶쁐wC=4;ەR[A\mv:R]?kò>jѺB7HDI0(DVƼ3}L鏁b^꡷.r"Al_W/oGOޚ٨`b< G]ϫ-:>tuIr?.]Z \[yM&۳ךV96w/ D -P\V2ζ븐 M UΪsw%~%IU~_yß_wL ;yJa#Zϒ~B_Ͼ༗3.{  :G@(M3@t!)}o5CXVʾ @|:kaZ"Bk=(v Ŕ떧]} Kc|ὠ=]ek::z YBKo[3F *dSWuCwDuU9[!4$dkέ}iD^.4?uɠv-ۨ\o@ZdI)}?N01 %16Yev䩇x)#]4nZM1+bŲqduNw[Wc⺢Z=i2k1mke?pVM(x׌ʳ]P:8ow RVPCWcR >e\M[TsEnm/w^;&%Nd%n^8oo$dثz@ S’Ɛ º99:?w>ss':02;{gXcy_ .:TF3?KDG*J֬X-zXgFy3~]+q_9s*=_Vo4= djWEƳqy PK E.hOX> nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitorAbstract.phpUTr]nA D )kPjJ&"EeV]{H*R* 3ۺ # |K.V%=;E!.QKgyLY`L 5˶72Ja,#Rc#21xkȉz FE"|dw<:I4Ÿo_Bf^w#+nPK E.hOT4t1 nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser.phpUTr]RN07tHB 0 uBFr L(8s}BmaZ|V,F(_* H&({@ֲ(ŀ(%hW!Á3!o"Ao,q6 BpME';"Gke+a10 4C3V"B-7e$HQ*&\";4WNBd^mǧ-:eCr1g<*NSZfwgΤj*hM}vwPGuvʧ1WX$K}f_PK E.hO. nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/UTr]PK E.hOOit: nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Multiple.phpUTr]Tn0 +x0P'f+0 ؀ ڢPmH%' (Yre7C{|䳯>u % ̍%Y{{ll.LVۺ 2HIß4GOU6*701kl*k/=̀BIcAWq R+$T,aqqZ{ap; D DC-i>bIU@pC=T׿tƀg䬓B+^PWXM+ZV8c?)akYΓ>Hcg8rTrڎ+tǃ lԮ'aSJ< tXDM^sؽ+N<:FPu\plܕZwMM~5BԢa5MJ++] 6͸8 N0հY#̝^?O7r;_$^Tz@Ɏ+3ɭ]:.Sv| \sk8?䔬mdOA26Ulb{'{ {0|n*":-'F9 }i2ʛgkx>Їi{;80MW20LgPK E.hObzC 6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Php5.phpUTr]}k{6 >|l|,wb,~?_}=\,[h.Qq˃2󏣴FwX~n>NVxfWj~6d}3 Nng4yfqrZ~?NYzX#eNMVɻ}a:-WĚV|:<}xJ^~X b>Y&'O4YgeUr0."yX2m[LVgdZ.G뷿n:^.3V*[Z?ʃzvZV_V_Z*KIaf5)̯?ݿO_'7JΚ~?no e¸|53 C)dtf%Ղ%Ǐ 5+q:aT=Β_&: {MQi&oV=ޏ泋dz2aTKZRoߧyƋʔ?śTeɅj7WCJGώČߜ\^^љэᅔ͋o_^]oodxu>ͅwק)Nn\^tPRʼ/ntX߾*|b%[_:ϕ#]*ir~6d'o_ \:^)߫C?Oy$M$α?+{&/rKGKE(_%۩49rQN&sT|!'+_SU)^]ُ,,D!sh( Ӌˑ,qr.U~Rqq=TތL7^ vz *TY$o^)K:]޼|zzxFRߞ iFUDfe\nUo/eN˗L,lw鷪)_:4ͬ|r-ßo^ ;k~yBf&p\HD|ftzs~9ގC&[ 7ol7Wt(Ro+L6 O.9勊 C&#!@$uFpa8uՐQ"%25d=4 uo5^&'*ͥق1H#zh |TEXNjA;#PRnʁ&Ɇ*<^i=ϔ Rf/d9iZ@0ְXGn1<1 ^XTTrey#sdo\8MBLS-Cz*Q`VF9iDmI,z vI^yd9ňD(tG:ĜW k5;מc%{X†/"x蔜/ uWg;AJv'gTڊ489?0q%G;&#(ƪJO4=" V`BOT&njhZO0n`E(y"gڄzx,Ź#v5!=ĞD٬;&$@}~OfS˫Eφ$-p oPm&G,! q4Ob|i\2 &}a58l1c fX(6toDhj;11b4!!ll8^41=J*pYCQw 2d3r󆦜 CTMM6Fi_~~'uA AW:c%#8.'^2a|!Xȯ+)m/5,R(R~{V]Rl*!!^(wyS[+GF|fH9a#\fف\.*km՞Ŝ2S-xcUӼhblی+É> ʰbF1G'^vಸ-a'((vl-qYAlTìX\`,~nZP.K0bxlPy{e-? P˴$͌|iwTڧ"3׫\t笎^C8c` S Yb\|1$PhIOo)* ^-ͩR9ʠ(6&T/=eA9N2*AeeS< ' *wӤ5ղP֢mU#'tJ:0`AplPXVxtK~`,7`l j~pXq=Ugf36POCaeH z5}ǩrMJϺ ]!Rΰb?Ers`YU~`Fjـ-}cCRK%?tDK'l?n"͂ >i 6XR*AC&/G Hb[1dVM5abcG5,TU k<=vA^ yҸB y60N׉JlLjiPHYb*[RD4jQ3K4%[Z5`a%Xm>K .d3~8ċ>0fu Qn?T5 4 GX-g4`n@< ;([[j@N8mVYn.(zyQl// Lj5 0Uc8,aflĥ`CVSN=U'WÌŞ}}*cQPױKHn u&h%VnCmV[@0OY0Vw)>)7,\ + L疟#XN-υyϊ"t~&*tXQPa2V [8,'Jnad2r@b3@6MJ`IUOvB;! il0F \D vt < (@@q"9AA,F9$mp hE;{"6B|)h":## cĨ cA$du*.oxAMDLu0<¹h 2C< }BtV.9b,t<@#͋r(O q7 `Q?(:C28pE(]5DtȽ8W*PVca'!*Q@`Щ(qKˇ$?#hBDE=8wn.dXP,-&^"++wThpɎ EIo*-kVZBd% \ƈ'.qby'x/mҤmV Xk,  kq;.>dHC!طCX޻bĴ` )FDJ_yA -7V Q4h#X"Ov2f~LʺX y*C|CPcŇ}B)BWual@lɷzmЧ^Y*M`JH4M7 _L 3g4M >{yLq ZbXAŶlxc#eȝ<$QǹلD{^4 |A4> L x@fqv qVA8Ӕ9#cLi$[<(/*M#lIoGz6Lcآ8q 8B/HaZl" >32 Rk\엟WT;VFE!$>0u8bslf%<`u1eGhOrIQB;(%^'Y (&ϲըpOM8YwS>q٪&r(p (tv&a8WH+yA8D @̿HC|!]]) #8u\_[Rgga; CgNYP"){^_JMK]aЇ3i䊄*uDVOاOař@o6l6E:?܌줮9)w";ܒC-[E0Dj[%?u\ fie,b A0mIA8HH& -+n JLE[' #(as mVOQسbThv-Hג12g[(PvF5)g!8POb^X.kZ)d !H4|1HէiF$BZ`,o;q7YJN(NpxJ(0KY.|R 䓍%^BjR{66Hg w~ee82Hfv\d Fkj%M@zb}zf ˲1%Qc c,!NlFP\=' ذB@CAZX`6B% j/aêqxPSX\RHWt1P,?L ʣ+>Y}!,(3RuS>w~ [ټROdh Bf26i(DR%tiy11W7+DV p!YƄiJmsUA'lܐUpր;xEk _~P!<¤MH >Ց$vnTӒ"[Z/.i*D;]"*lFZ"oFO}9Dwprq>'qґ&GM=b=~.s!^0T~ܐfM WpXg$0Ӧ4gH1:>S%պpy%Ez`"3"~z|K| ax)@(W"|!>gf֥@ `"H`!9*NC6Fl >e\ʰ\PgEhȐGkjntٵ " UlI؞0ZJS.8+okc87$rvB9%{9Tb6"|+f*`uk: J \ϵM:mr;|\R,2C@Bd_?ecƽ 9HK$!pPDjd5WiǤ?tgL*K_@BA mDX/q&€L`9ZUO1"E]\]mOǕsD!C+eq.Vq|s@PfcDin&fǶq]Blbp!bfC旅ћkHX4X pjK  t cc{ Kz 趪u64:0M']u%ٙ.ͥ\DZ "`|Tp!0xp7S E #!xPă Xfm@ h+/ V(U&B"ιҕ &}#>vnn!m3s$O:l+(*:aWI Ob\&;ۉ1mhI(VDAh3hD|q@8L@F"Xdh~.%0)qBNF8 x;-v&kqGM&R~m*Rs![HВ dWUިǘ ,FbFum;R~rW,Atj3|ݐKQ;o)Ra5yzB!?P!oS2eQ* a(rSϘ{RKy/䀥‡]jTRL+a-)^Z8.Sv䵁g [,|P`7! Y*RށBppiXft=1!;l9ea)ȩ| Q#LX "ŮFLe)V Hm.uS"-lzƘK.ʔ]( %vWcʝqw +v=8{;Mυg!.} b*l0cE_K@vTL ̊3G)".7cuڄW˩͹6Ce;VBK5{R@JV !?F\*mq^21#/GgP:e9J`{lRJZl{XaW7SbHW!uT<)TwDqⶬ*J)sey|>>X1#%+>B~U 'X{cH~ϯ]EBM8Bu#Ewx:D7qp&":;%&~μF޿Ru9ݱ9 8\W\.m k{j *"RWݮo [STʹTzO=ԭC\*6L'Uwym #)/n-U+[R^WI$Q-NMګ#-otz^[KHז* c,4q*]vJla:5)N%6(.کA=aSUW (剨7FO5[RԽ H a@h*ΚfsVRNP)VBQH=s s+e!Ujc׬?Kܚ&]r:Nߎ~Z>yjWQoV'_Yҕf}eO~\^ϗ|QR1 +\gP|ׯ! HJk8&}|%'9~bOQNFM[O&[x-u޴E7d!i."mzR|eJDK]m;VW}ƛƮ"u:YdYvq:4]9bCLVO8'l9K~WG|xd\`e)b Cˊ|N+ZFүJz8}8.KJ]Tx' c7j2WkEd>\}Zw"&{'މhw"&g'ىlrv"&g'ىlrv"&g'݉lrw"ܝ&w'݉lrw"ܝ&w'݉lrw"&o'ۉlv"&o'ۉlv"&o'߉lw"&'߉lw"&'߉lw"Ȧ`')؉l v"Ȧ`7{t;MNdSD6;MNdSD6;MNdSȦp')܉lv""X,vh4x.&'ɢ5έ ԙs'w\QszL4W"W}tW"F>^?qenL5D/wc|-j2awdv]pt 5I{$gGyLPux:?L&$<]Ȱ ;5!MS͂ʟQ\r׾&5/{* ~rdx>::?˼ˮi*>z"Bcʷ}и1]ۡi#/^;piUfIvy?vtybD#S?%Qp6^r5m8*W)}:-W]k d4'_ޜ_Zj4ZO/G7'ZMYL,iO,2>r2GRi iPLth1*(sGSfGa >4hoEO(sGSfǾJ-qtQFOrSޡMH_ht&`Mk(idJ^M7FIS[*2q:łZS5;nagTZLYtr[\#M6n0kS 5%-pZ礵UӃjMJKk5e+j[G{C[!M..nN^g}z8(>#J| |- e?u*AT)n75ҥ]Fؽg,œoO.nnO/_>^=yjݍg|6dMeoߧ&?4c=oE}@?ʆahOW= )RˀEk]e#l ulilclJeq2ː^-M>bns0睮s^ܧܼ4r}Q65b0IfbʥkmqkPTϓC֩/Orbsfb>V^DM]:Vc%^tc ֨[aϖϭJ Y%ٞ7V >z/@d-"Mp Qj)T֍tа8ƶ{fͅm7MfS:Vnଝ~m2^ߏS1\E/4OEc[ ..:ajU8SivƋ}R<͎vn>=FoKNsYז5@Kt\xX(ͪBG/;T?Ll_x$|/2 el,޷a)v'FW0Y<Ջ~6R>@ySbu.^v\oĦ1XteW]pzڕ7&tݚnΔvuZ.@'aȴ~κ|=qi1t;֖Mc:YE[Scב,ti!uʭi=aң袕؇fUoRksuQg8l)ƟWZ~2kQtN?Dn7="9qnߍʭt@wajainpt1:>Z*.X̴Ň" H κ9{e@(r'hk:]zǭzvN`vGXwΔCrkV9z 4vN5#yyݏXiG.ǩNhyVq7L![jG9 cW t׀CɻCfgLweh3L2if GJdl"߅\~ru6lD:5}:\h<:2liꚲMސf-.u!dۘwqB%ovB%Yw@!D]wy禣Y:rfl+,RYè޾Vh.h--5k ʚ.o7ó5Ec]ߝ [֔ꪯoNnZ))/5P]ЗuQ}{q~ x/.Kxq1)bo.vS.[0.Yٹ.$^G]d#Mu`4E]0 (d|h1`槩괩+t*yڋ89ow=rE)~:ϚOn)jՅFOw]46/?6^G]7)vlY(|v7n Nڛޛ52o^ڣ5Ү~,١PTR0]]Ze~(0e8yH4 Cqqt>&=)/du>ۃ$]mOKY+,ُa2e}&4&SԋlY4Ŝ(%XԺhU \?LӃaSLaSLYS")a-+uQj p8&Sp&)!M`?=]jhCC1'v`P~(@ծU QMrb5*ݡ8Pu"zަE{ժ-cF2yZ[ؓn Y/U)7>{Htd >L獛V)R[Vdqp 0nX]ߏ惗{}N4!㎴oP'uw>K%H ]ޯ HS Ud1+6 #Ȫ]<ՁwZURVO Iݸ@ *uix]2e:?~p  {|{9:JM&ÿ{qM@^ jc .jb]]TxJҬLƾlqZ..Y(&wGÇdr:2q(چlj`1M[ԶT%(I>2eJQ.nO):m`GLYMԭ76~kgmM /W|:S믿_&#HKHGgÿXϫ·E6}gJXZ,LJE܋k]0T=.fF-xc2i>c ^;4!puq^.}?Inrv`\]Y/ۺ6$tt|\$O~8Ze`tq f۽.}xKGˤKI{`}.I?d9!ÕG>sO>b6#ܓ}LCv"PknʃÄ~4D.qIV=ƞAO\~kv}U]'ԀlYsq9!otY}G&3a1HǒOZle{-`.]i!w—G_Z{v_{Go;gqn</rmo.zsy3<3]yQd`ҟȕfPxԯż50v]]#\ /ɹ[?2*mYEa/-;S6llnlSǓJl3SN)vB!O'مwӶݭ拓Ň4zLJ䒋c!IԮ4ﮋ<\Cg}V-.ch/"Nxw^mۦkru鲻\Oo'iVn 4Hc~>(݉s033P3pnh|ߨ>nO - % LY_RA0~x]0n kW4k9zՠ H욵2Ӆ ׬}F.fpoaޛdA뻱[OZ3}}]ַ]eiC`װS]kB(s'F_`.|u.i}ff=C,+(K]/cf~aMgZ&w-17ics6J W?va[#Ԩ]i m cgFZJqg;0ʹ'pȖvl{F=#[#[;l aaS&"<xˬ&wTx1-LdpsW~6Yl\զ ͷހŘ?p8T[*Y}7z.ńemdehBw6rul-{n]ucˏfqw'><:g2eB^]c1a҄$#j h[Ƿ i BM0w?q馻yú3{`6zAvF^._>k=c‡zm xჹ3.|x6zPF^].>k=cwmg @m굍1・ \}3VW6zưFT^]*>k=cƇ{m .a^.\BOo-F򭅞1_u1û3u}ǯttZgyB\t;niBGt5kUW=qqۏP}r4}yP;8gh ]_}u8ruBNGu^-ңj]Syv7@h6µưRɆ=_%;8nnm~ӫF.8aA.4y]TCo}uAz1\;=<0 )a^}]@a$L}] S-oz;Bjݔx1w}bds.$%)w6+Νb=1E6^U..W]P*Ə풹3B鼼 $NYZϩ-0zHR Vx14mbybW_UOk#1iER]Vx[_`Vsv^bjݔ.s3(zqZaJ\L}ׅ^Uۮ6{BVj7m}CwQ9ܪu:D8m5{%Tt0Cu0AI^mlm{5Cmc{؋CE5 mj=.*~uBӀ0t#[1(怳Wٴ+(c]][NoA2a2VܫNm=TKlT]D=W B鶞=7 =޷Z\M__?PK E.hOˉaAwN6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Php7.phpUTr]}{۶+}zI7no2YVZ>sz^b3ne+ms_r^@KD>}`0 /O>l6ȸp1^,O>{\򏇋<~*>"ճ?(34KTOoV>_i\,?$ln8^]Owi0x#e&ό/r1E$Wb|?^PcF_}4 G/4Zge*Wa=,rX.&Eq2_%h|grp7Wni$wj1]}_q6fjK4_};?\Mod|kء5~2]N#+B՜Z~܅RtrRLE9 wj8-_QYNz8yGu,PI&wP 7{gg*exEJK<8x|B>Y'p}s::>{}2T>9Ko?O.y}z9T>,8xv f<;Roe/F'⋋ѵᙔ_o^^*TዳW7qd6:x}z|rq̱k%痪S?RJz w8x@hT ,y\ptH򛒷WGëO/k6WΆn;b.POSI޿9JKϯ??5:.V:l9bA97Wױ2N"G?*cU)] ]V9x# %%t|v>5NO_J9ήgғщlՋ4NTP%8 }#5+%hx3GWrzH#2)r.KwL_p3ӗRG߫2~v$ϡqf+zz(H8ء\ˣgUs '}ėGק#HepRv}\B^b)0[ɹ4&;;QЧv*i_+jSK~u:V8Cن\P<G .%|tE,X̮d(s^o׉Iy_] _ųid9U0N [n+ ?|5>$\n,1kÓs)'q .n__PZDoL:U<{u[ҳ>V(Q?',WË#E N/N:|#N%'O?Cgϟ>siqE$4K3#Y N9"|-"o{s;ImOEĦe3ԡO ~RKWs 1NB?~JR},y5ww /2xv{WsĔņQ߹ڛ|"~A:pkv5HIޤMa$=lz>7s>s>s j D" MBژ譍TCE88ePfS5ʡI.~c$"D")*}ч>}S=}>Cj>D$H'PM"D0  `(6'D$$"! HHDB" h.DUo@4iD4E"$H& IdnD$)2IL"8$N&IdZD$)2Z0aZ"-DĄY If I阔RA$&0f,<R$Ct2v<,YFG 1#{$#6{fQBF1_:9m_ 岊dh&:!?]*RBPH I\CjL1G" ?D@Ŋetծ'EJ{c绋ƀGc1Q6^)stĚ7~#IQ(hy4<g hy4<E"E q#Rs=H9(HTGvGkGң19 "G "Bj ÂI]9HM#y<=H\M$M$M y<['1AӉŒf;BD@,Ql:}N4ŠXAI jFBhڌn;<="P:f*`[vQ[ AD<-ɏ]SvlA9>IN2cڌ ɏjb qTu,枖p: I~BC$>l/[UoS@ig ̛V?&n=8Hy8[|/'4!鮀z?p=?!C<{]bK}OR$1MuT7d)T!3Aۇ-MT!)f A- 1ndi2zx"T4$>:F Dcfa96O"uD&iR{ˇkXGFM;@P,J"t8!*Ls !Eb(МЅ. ";i,9xEc*oiH㔪DF%债 2xN&7L0QU X+tکLL&Ҟh[DWLe }! dD?^.%$-N&A$M%~N:Y6 dBtcͱxfPL4%>BRO{fq3RoXƹqL8".p|A}諻0.95i:tw:TČMPJykAfYƮ^CX'vw<&9}aBe7Ld;vi뱐u\2h]j?^ԍ"w"./]\0^ct yc)NicKpۖ5JĴP.{(8t N/!t&0h^&5jw .;]yV Ρ\EuOF?MN.Ur ޺nvC_ljM{ ҒxUM]S²>Q-]S;*򬐳0!!+Npj9XFkG&$I lbz\ɺk)0I- 7x=S؇gnsd'.$\R .Amȓoe"d]W|x7 +!,|HLlB*(YUe^ϟA ʺ׳@02j޷\EerRk&XsY;xl;أANhQ\9M330j2HYX] 24QPD@ g`4gK: XbshN@E ɇ&) S?456D+7L|f7Xuo:)ML~H0{M+e`\y٘L|]< -LSd0y=^=e '4_L.1P/ 8_ƶ{RQ6r+5Pːo3arYT%-28, fc1b$\VuZ&!WFW :Gx0݌! /)F`S[?!GHRٔ0&]kͷ J6R?ɰUx$?DC=f0ou,l$[)HR`ƹj7eHknO|S!ٶh6irff6F"sxr,򗶷-mNqۨPeG <1b8}nm;5ɾwӾBCl)QVqyD x3)si峁3L%аX 4\xaS-$s$l*(^>b`Jc1)%;'fe .~o ^U_p8b: Jg~=g4T>϶tl>5T([ax9ĠF(/>P;냬_q vslTjA\^,Nӹ@IPCד@s0'`HD` FOP#Մδ7׉ 3^,ak*̺Қdf4Q[6-z9U8VAUbM<0]|vKU5$3&3a 9CD 'EypBNf8@G)q * .bȃl/We C @|hKm*}hu7D.N.Ϫh~A8?ymjwCݨC'^296m~^hq U\LTIwKF;3&nSS5O|NUbi~9A&'Bw ĕ?YV3P> :_80:]P0P"bί2NT(nI,_Alͭ [7Vz <3o8s4r?X?&upyf2YS,b"J l=r:A&PJ0@gi[ f&i8agBN͉&ܫ=)lD $)7CU~E6GX90ΆqR-?#]b ORR * _SOI3sD"}R,]%~D ?)>We)50Uxжw86f@q)I-QSHfDO0TVTeDx0Lk0@iыRJG[ wsrh#rE`a|r|Pqŧ}\¯O{( cSn[ {u?DdXf1ډ#P!;GX1b<1)ƎO$f'DLS1}¹ P-}ljZ^U}mD{:l<֧u5A& . hz!\pSK8xea_ riIyiH);kda @qKY6>sLYV"  C5N:reSv*Hԭ61Bų61ցIHrhȳES!\X̅#RF oA=d͕hr)y^+eA0 X}GYl#4P B QwdOD]AԊƵtHmұolK {?AO HJqBMN)bʙu >өPGq.U4K>[:elJ rEojMBjgnRbtx+R`pQ7 Ex.IA~D}BIau Hჱ>qʼnD܃g"lA,T.;Aw8 Rk޷L%,C 8C|3l8X@%;V=t8c}j/,& 4W&!j)\ׅ2A; lI1<I&jqh vu@3 B[Bq?"iL 6<%uOD>D. #-kIOC[dȫcpP.=Gy򋦊l顸HԄ_#Dj ք청aw=W---.ƙ[b B$—h5zIO6pm oOj)?HU ǓEdD~ΧDlњhq[DlSL玛+>m؜1|";D0v&ʱjw&60ȍl#&gy2O%qq'5[xi 9|PĂCp-:l 84g)TnIz}@pi]oӮ]="ITc<(h @G= n>OW$9߻Q91HiWIL<;o)oI$n@bFl sA8.* eME$6=P7`c$z+-œxĉQՂh?RY ,3 jh VTX SM?IiN0{: "0 z̛c <^=d LDbxP'*O@6}k WQz r,tQ9 E`Z ,b,T9 A~}6%ZN\IzI- % 0&Ia\[{D nTps9|QmSQAnl`^.VޡwxgA; .m-g,[i ^q ІFsa"X|0'zjE A oiXDWTh?G4$## q M8`QB23HK8J䔁YęD RGP"akbr9ф $@\j&l]۱j囃R'fNrm@i&K'h hQs,dA LұJ`8#RX%$hWp$O8 1湁a3prJ {)KҜHe6EFPK8\l{=` ذ+Xb+@עA| +וS_D(fh1RsIӔvڛDgk3~KVidߕh!4bN(S: 0K!NFqD|#oI>D9#80<$B, x=I$D P`o0 h,&BC'Rse!&| )qc@H"ȕ!F~Sts@ x9Ɓ`!p }R]%n*D,2 ( R᛹hĪR8Mi HX ')2!ȧ }|())ETCCp'MFXdUqȶ>}ٶv]j;i?8A!lgQ"34 A@)8|&aPHQ[.<@Q*I !PHDj.|S]t s*C'\G2M-"5XueF[͞ c "JJsXʘ9ׅB HI3Uco%ltk/C`/P;nD'jY*(%'Uud?4RgIi*>h+0kP/B7}86D)ìax{ٽfɩP|%fyfeu@jqN DT)&%o Rad!`)CvKJTJiZ:Wxh+%nV!J/^#C24jPD:7*FjDxX%"c˞ m'bUjJ{/`-!D a{hfX,H-Rq~1!G[/$>I)-7*Z^7\w]0=G~"b; %B=3z֎H@!HfJ2~?L\ 3Q~OU8HI5aP&8'/~5jU4L5zl ^MS|RC6YWWء?'fA`,F1 EJґ,[)=A I[[@bvv}-`8$Mß1 ? Fq_ q۹b @>`J{;إp(-i<; nQ7eZqDlG- $$DI͡zMkRHUlsRD]p[snBc!T6M މgQ8Cܜ@k,Bqж;n<'[ay݂&- kH hB ۡ;LiÐ$ٰsdta ]N{R0vYPS~FhʀkbD6uq+<"|ǔ>%r`#t<יKo22]xF|v-'8|as)t[ Dʳ}"DT RaBewjAj*1h`ކ= /OۥvE sdވC)\;U\n ,TT:nqo $VP-vGA! KSzLpzCD+FsriCcsiḊxˉ" d'8\T ?SNP:Fi ѳh~A)z4kR"mODPDfDxk"lv-`VIs钺aR3EDK55"|X.Fn*|sD Ng=9&S eoH5 տ-\䷩hZMPtԌbaro{ӊ&|COTRJcN9-*VyW_fD*:.:*Vi<)ŴV<u(%R,UAy]WfiQI)SR+Uڨ9E1D8/J"rͬPJelUL^e6R؆WEPg"9E'V(×RfmSu+jRf RfGMEq+mHd qFd6Y]Fwx:};e_/V&[YU0/8|ɓH.$D,r|&o!5E~h|-ƷIimӟVVjS;dy@E֡P4>jq՟:-F4]FBYjjo~;F6uݭntZ]V*ZM翌?D+17}4[-X1Yq_4?=}ƫE Nʩ>|N NjF[xZ- f. WI!z> QGALLSm)}F5+Wj/zE1h&d^tՋnzMV/E7Y&d^tՋn{Mv/E7ٽ&d^t݋n{Mv/E79&^tӋnrzMN/E79&^tۋnr{Mn/E7&^t׋nzM^/E7y^t׋nzM~/E7&^tOA/E7覠tuKbFӻhD8B̚_y\Ud6b dיxjXOZ'Ӥ$jwlLIt:-3>D@KVwk؋AbЇv@.|Mmj[#ů?inLߣEzCȰ҉-NTi{;9B뛶n6zɯ_&X!I}ϧmrcPjV3Dg&`re=n^\O6} H+8$fS;a Ye#}NjJַ*2+4ⷢ Vk:;Ï媉lm^:ZQ|=:>=Ք|K=>]]kJe7}?>?iZ^ʬIuާ?jFr˲keAV>8kx}>[{M(sCSj{jf~=Z庬}S5YAô:g4hurG}fr›Ns?ձ״7v[ET?:ZL&3:$NHPU!QFC Z@GV+0S;z4:V'j,Mou4X5(myeR;;+u\kZ.sH`jۍ;Z.d:߽1µWj~ȧ5|f]ו&'P @Vz+W .dWg'O̘ϦLaȘB/Wv)uU}C쒨N-'uq\oNw4Itj)@EBSt"-+|fՐe{&0* 2oҞ j&C"Jh3NѨ RrMJ2X[Ʒzbsj4qb{1oHB3~sSVKx^o3 ;Ԣ~V#:{:{άgZp7ξ>{uŴdZ XFb߶Y[DJ}2QԞfj0_"p܄ry A!(fwyC}^ F?< [ аu-]6Y~ؗ+\Ee'"ZaU5x>[MfbS7*]q1ۍ6n:;FtqVh.pxzZtcd}lr*;E\DZ8teuh.,^76ުqךd?Ъe9x2zWNMH k[ueuXj~n`[7o [[uݐL#Y OoWFXZ(1EkWɿd f',V耕kj7lVȃU-:`ߵB5ڜK>ϖύ܈dlo}oS~NfA_K]xN\Ku#:ZZbZGVw G95ftxP,S'%<_Nfc; ySV؅CP9wV+tލyV`"VǺ:NMqנ;cןP<6%H44_֡0؂6?>F|m6V!&u1t\8-tǪ|Wqst10FXK~4˘w+%O];UxW}ڰ목݌ӒzJ{ 8kcz1Y-|mNvxE ɷ=-ON_/o^\]_ GmZQ)̵S[-LZk-V@6bڤ8A&M +u..ЕM`0XD4m3 rjq7Y9&,w]buc9EX] t(};5Ehýc쟽8nm;g@h۵76hLxk]L7>g /BVס;maE+is-]+pT#B4QUAJ+Z#.Nͮ`k29͢fȫ଺ΪomuEk&v{;]3Wk-&՝j]aݦ;եwQK7ZuNo1Dzr]$R':p1h9ZoĤI8'Xu1uWhkڸy.n 8}kİP )-/&= 렮݄S`D¹ ֺ%6Zq2 GQv'PD؏mxƯn:涛eDnұTn *X q?DUn-]bLJJɾ)]!q6͔[en*VwNs4N[`O^a';0kA ,/AX/]eă3mm wY/&irCtWZguid cui?Bܲ6tݍ|mtn+$FپS:`Ĕ +WgtoD@9%3`D@9%s`o]j`:є ؛A\MɁ]ي'⺠oߟ=XqJW;Ee3^{OY=sv>,a9P2*&}qv̚:iy-GκV[k6 ^ѼrnY-ZbJ[Rҿ=Ȁg >M㵛VS[Vha' nX]ݏu!GkأQȅp_@'5@w:F[9w ﯇f|b0uVrddGu'-PlSДHRqR m  VwI:/ٌq;}kt4IÛ/|tf2!Ny9˭._oMt/Wq['m9.[Wmҫ%V 2p |JxIu@-놓cͅ)iGP똩آ]Ŭ )eEQÎh.SuD1u| KvY&jYIv3j>Ձ'fijOG'7ÿ^ϋONU6}KYwE+;z|xXD˝: ~Zф ]Q3^}E6Qm X_5j{#FOY+M*%vXi)"r%qR(fMYM.iY?d9WqqOji_&_F7E(&0bG.zsaO'Ŋ ݮ拣8zInXit[K.}]u-NWtκqkj5Ԗ NYÓxZ7[nϚk "ö/pn٘/+;61fAA KԁG%ǿ<$5:Pi4VDFn*M»w,]TN;{Ot1sFRUӌ>otw,$Tw?n]S˱jt@Wl7t;0?,;D&] {b?/p狮|Lng`%t"~0j` c.!jL+y7_Ĥe7]m{^'/mHpbcv^gVmCX}ܣ8ǷUc]!^FYM&ƶ! :-N/hE{,olSIv):?z6%½ &gEh>y5re621l>t8BC\Z$^)jfmM $R5*jՃ`)w=2VK{yu=1P0,Uu4gs EUFEBwm%-]r1mzoU#sҮ}1tV,D \F6|~iS:(XrY3Ei:aSҒ?Qq\F;f;o3 J+-MàES-2zn<)ZUԑS@: u]2=]5 E<43r)ٺB1+VXn f%Yd(eE9'tS ![s $R5@*lrPKD҃k#VڢTTn#PPCS I\%Ó m ]:ulm 6|aOKnKYC^vݥOlc}d *>8yk|~TUOafև/,]80vh_ jv>I'uSRBdᛞ:77mCp>6:+*Ve%4mCPK E.hO"9 nikic-PHP-Parser-9a9981c/lib/PhpParser/ParserAbstract.phpUTr]=ks8+29ql|8XY$Y"$3n<);\q&4~=[Ζl8QQɸ(o}}A/xǜ-ysv fIO,f>^IYn,Onb"Y2$E`*O-(Y~E".32)-h`UȜd~vy h^Ey*[}8x 69>Y-F܏lr dO//MEyv0AeKetQZ| 0؉b6l&bxn8G4!Gdc(՗b9 h<gDc}!e_"レ4ϳkX(ยNs67/0uR%Oy'Je#m+ٟ? 6) Y6eevAvzes/ciy/0=mtKTJ2M7H>ϓ yE 6WIа%cKJ`~l G  h/?^N4,y;++ 2'9#*2-q78q 5 e|̋"Mhuy t=U# l9hVTT؊d q砄tB2$#J%ḋF4͔Ŗߗ`z(vŎ"'=?'h#ŁOz,%Wk e =2'[AJz)+:&@7P\ Ã5 (e*7xx3>j!6{>O|wiV]Zr 4GjS |5W>mբQPY$NVY:[|mZĐ+dS bɢU XaQPEZ,B?j'+! v|`;HvdRx(!:_k%%4V"De/#(q4 -,*1̜O,N'L$J9@G  ½2x#'M&5%8X#Ւ˙5ZbNgrf'77Xe\<[鍯D\cZDŽ⚑/Q5Q4;c%KӁْnFPG=rJ/_,pW(iW Jy}:Y(Hŧzi/%JH_ok&HZggx]AFS"<ѪT{`}լ !vh6BSq1K@&ݞ< yeW ZC b͹_hL6'; DO9Oč"ܛV () ^F İS]J9]2~sbΆ kcy^b]-Aӑ;nd w4ԯiVhl; {P.ek Q,L10Gi,(:3IW\aTPjB(jJ!D`ˉ8mtШ*s1=DH9}L}%];*r>CoyR|)Xpm9NHʩDH5Cl.k Rru^Zn\Uإxie!YMxhA/ȢN6D3!U&ֵ$w`nd+RW^ʌ~. D8b0\kon+`Yv=7k^gBSJ$JOMɄ1Is> `*3F|'dqDRKp_lMhT(J6Y}ȭ:Bd+vM-4eDB{T8)’"4&ʳ46plp!KA?6Ѥv'JVdz5est˴ָZ-fORR]%?ںgCs5%~*>{^CP8CK.F E"m UyDd04LfNql+F \М!A<* l,yFG )&$8I17 V^9t)T3Qm>ɀ Nr")i&oy]x+я V Ɂ"| Te}i,e kC UYbVRH. t6*xݨ/ia9-H͉<[UӆkDU^F[WnNK%N݊Z}Ɛ֢ mVCj>a@넴|1=izXO.[Ll\r$tI+&`Sv(AvήeЈ/s_h|pb.@jTiBylp%%[s}au!JT;4%DiDmqygu>zwd؈cRٺhp$bIbspsnxDjY ^Cu`>>S]ܧ2|)x۳2o ZJC:4V2[$T_).(`#N%3+W9]6Ie:&kO[&# D;ZKaE>6B߽(Rqo!k URiW|_Mi ؏k'SSP4릱$1ʶ7}4TNU0p2ѫZW(X"JYصJgUk{|*.Ym'Bྎ+:bc,Xcu4>#f%3ᰢMnޠV(Yv+5%@ge;j jF7OKqLp(DlĂ2"N:c)i6S;[밊r6p 6񢈦ZiБ,yhumF dzYӫ&${eT~=iI{RaHyjB&'F+-'mcHa=#)e4bCrS}|858G)U4w\B1dѼu( ǣx b,cG~6/*)-Ǫ.Z~q-d{ ~Sky DmmK3 |,]UZ{L{G:A!ծ;#&^Ydb,Ӌ\ k(n^")Ê o3xMnX}KLhMO&HN`pVy /̳5X8C^7xy)U[,JQ=F3SP- _vEG2 "Q6?GD "gљ9LyaM1mU]Ne$A۾3IK)ߦ93yYq XoewFt `nb5UDXAq y4U{9T!*Ɠ zEDƧr%7bA_CkB17$jH,Sˇ zbiIGPCf8‰y1J9\renj3Cz ?Ay/JS\EĒC]1UFmKK| -CTݫ fo/FJ^Tq(MAUӻhIJl-su%QA|R2z؍۠a7R! m"#;2B.U z'Yw4a^c'X94 e}n74cqPVX:aX]dPX~׭|:'^WshEQ7.$N~8JeAvW]9⨜AТ^/j;!dK'K0W0B*b`9V]cUa n7''C:t'?(2?TA]>;.Z/Qw#fՏ!2^/[UeK/6!z,||A%fDSǏsM!I1 bGP&(u {fORT*DW 9OCb`hRn*=_KZ!%(o@o[ں vXExm÷9\H!p ̬fcK}(,k2tR _twPy|ʼhA#+x W=%__\w/yF[n;&&zaA)?߆ 9%|7.y # ygտF s{~qlA=~~?Y-H$>$n\||{q:ptuƻ2W\ʐ|AT&4YسkJL2j-om@Y#x[͝6p`I%j%/%ec3RӫǷR%{`sU̹'C*"A*f=&74aoT # v_+3L̐B7ꌖØOIidwEM*kAZUb]QTTUlTXԴVyůЯ4RCpR7eJL6:` ɧE=esw ' _G*w?<{Pyó^4vqߦl ?vd/nԉ(UXuA20O_U#N&UΞg}h3͕wޔ5' ;WO&ՑpKW L,oT(PP7Hצ {up t 7hһڍ%զ@٘/'ⲟI>)`Rܣpykm!bgJ]& wȒZ93p )X3x- G3 9tiU2"&:XЧto9_Gd`RcjrQUD6FSOAL|X xGeI]Fhz݂ 1н% GSyG ͜H:`~-;Yݶį*q+VUA2@T97 "' VjƥdȄrqJ/1~\JWgX;4.#L!j ӿ^nSXa1+čWt4_kƪw[W)֊AQۊE4RwHm%#[Q Yp,Ncf 0X-6_ _+eX4Jy1FCCI`G3QS5נX_Jց$p:9/fM4[7?vЉQD_wk\;QCqw/|SxO: OrXJ!c }qKޖJ怲ꃟVdbŦ ]Mȳ9xWV zG"tYQY՟XJp$!z=m~$YQqA(~Oab$Q"YwEvV6(q;SZWH{@ď@PՂز~ñE&հ[RfwATIPQCM]fA(k îhzZ H} }/v=ݖx4?5gњks5)ҟ_ .*o%ڼs.Y3m |1t_Aw^~j)^ &{;œ޳WxoEb W.B 8xچ [A9 + L#+x>V~WӿP/G'ҷ!4;dr2 %Dԯ.jK{}t|o;Ϭ-#yE}p#Owy:|4Y늷LD,?iq?\hIxfG?٫M9 /M1 p+&gͭ ޫ;.PK E.hOup#N8 nikic-PHP-Parser-9a9981c/lib/PhpParser/ParserFactory.phpUTr]Tn0}W܇IKӀjRJ:!Qj֩r"u,YWA;qJccs9$Hs"WZ2z#Pŗ8Y"L31%R4kBu!7LЂ+ v>8.GSzNMnߚ=/%W\z=x/hT@\G&)@(-dt:Cx` &H2580 G(Rpo: ٚ:c|DygWl>|VvWeN4{@ 9BHY0)5/*;&B3cccNQOѭ[7Ey,õ,Wu&!jm7!/QQHKNmeqw^` ?gWq옂VcǏlԸvRki~f0OhcÙe]>e"Gl4wʯ;Va88<(r{R+9`WIdw㩢,ҿ_!o!d8gbb5}Vy?z[PK E.hO5 nikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinter/UTr]PK E.hOtɔA nikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinter/Standard.phpUTr]]}s6?ɸXNr7>Jyٵ7d E$>.@$HrIMXb-؄ۮv_=zYs., BEgE<8P:'|O6-a:7Y}Y#+_ ۂ|}n )_D‡|A Ð]D7 w&!F#/łێ2؅(t#>aӥgG1mۄtHfxMoۊfN}P;l]juz$| VDb5qlcT'|j-d_Z^{7!:x\! us6̹K^ NDZLk+^*5k]| !F OҧJ)"]hS$*/"/,\lôaՏӁ|g _^PPjEadS l~xAM8pԔY}0g12R$Fs{4~|[ˋTs ,LtEb!C,yԂ& slM,H|n!>lE|J׵n`ʶ5 yC32nI2^t\8Zׅz `Ԅw#+eК0y.fSw/ص[X܌eHÚMiMqhx3Uې lnp8a+C.1w^C%2ׯ989Ԙ҄hŒr[5ǛŻ j@+ɹ_Bp?ZIۊ"$46kBz*_6|eܒ}ݘ[JZШBZt6|e_[hm8T4=8Xm?Y&\ 90G.KQ cc$W&}YlI.ZWuݘRRBBJHblRNߋA-<-bBnY@~nQ.[\ad)K[O$Z*RIe]]4@&%a"p+󢀟?7 83z|EfJV'APp0@ۊ7DuWQ*R H~"J* U*( PzA"LPâЦ%w'.N^bJR<Ħ֊5X9k4xĂI0<q8Dm|G $XDDHiHY<Ym$ٔ_(^ ц<+^ tiINNdiu^T{'Dq`%!r->qGf)d'MsQu/Ǧ€u^?|禘$ʧuP/RǧFs \D %#o@g6uCyZqgs+.qºo1,F<ҠpVJ+_~ǥ9.njVpf*y])1?pў7*ZgAty畂IW̦#V> jl\FE<@GކFZ'D?{A Ac9sUhpĐLXjpZEUᶁ Oz0_,Tol{x,^4C,lkn-Atwwϳ޸?8:tp[uIǧJ:JԠ?K'h@yWTd.e!yEW-C+I@D\XNZ7*}"} :+:9CMG$u;Ulgldpκ\leދ7=IdN6Jy4[YwݦlAd˧ /[댒ZWа(<+>I(~99bTЧ1$eeuB!qU<{lXJ(j4)1|BY~h6t|Keqq܅#Z,$=YNFIK]%+{e>2&73 ,fV;%\yU&{̚lmn.%N^ΆC(uqjb6g'}i%ZMLXワSE7"6!;t )UÀ@aak HUz;h:@ˤ =fr>EVn $ڳ1LiC~@{i{e6}>SdCYBbc8TjfO35n9@iplv_8t9{ N^Xڵ72(qVSeaބ iJ꛶im g$N9r8V<2YbSA!r7qxV`fܪ餰2[nC_)]"MW&=byo34{/3حEL8f+~:Z6CPK-.4m|,sJQb c); [jAʎRNZ|>Ą*4pzAϞVƪCevThQШB\I,W ͸bʠqȡޫq"}E7~[fQ,:(SK,S5R:?WPQu,rW&g]Ӹ[Ԩ ѤAIbJ)2J#%c"xN"0rm0ί6j49?Dj4}? ^smPFzʆaKo?qSJSN"II:d LNjK'O?VВ^*\(/1Ե+(KuT 䥙^/J&Q+ }I#m*n(GÌY&RĬꚧF,nJ 7VƱYUFYUK { u_~,o{$(8vё4ԚKQE\1Wt y(]A!a+OKY&TwJ bޯ`LuFfQJW[ǔIJ #6뤧2w*ha1\b*زɖE,R-^1'c NrzyB@$en]ۅN-yI~ENΉ@'KڙxyMPslC! >͝R.WqqǪ\|Gnݙ`?m0>>秃4@#zw<_מh,ʞ=Yŧ^|5 Mu2!^1Z#]W{-T⹬)C?Yu5@|p+[̟n~F$ Ï'{Y[jZ7nMf "-?xR8sboBxb&,f V3C,7,<_E< ؎I;{ ܂wS_UWV}]׭fq4k:C2%D4biIE"؄$KE^g~X!yl.Jʺ[(5;($єm.ˏm$TOH;c$쭕Bc-[\L>$֕T(;keU"3E[ d*W.e#Vh5!TaTem6 vԪ4eHv 񇇃yA ;\ΓQ4lFOV']UL`xq6,;ާȶܰg`@A/JP\83R-s}9zz9zcw:˗ݟ:h0)\ 6h46<`ļ|u݋ە8W{UNB^2=2}{oPK E.hOO-@ nikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinterAbstract.phpUTr]=sƎ`NeIdU|#v?leyXyegUb*^òLneś$OϦ1Z@' 4VgO~~ggeLt<>G*z2z<:|{KV,s6,y˦ts j@j4<MDJovTy-`%e)W "G@""\$w%$l}^. v>)Q^ӮH$zj(i?TCHtU:УNJ 䵏 ԣNgĿ: "~" k&S?%:J_:"/VK\N1Hd>Na_K3~˻dHb7f3#3qᠷOu'\<~70NY9eѫ,/eב\~dyG` s,l,w9nVt 9ş mm ";N7iЈ Spkh:uozSX;XO<ÝI['~FAq$,"{[ITe[վKPNuk['G8 [ut5cYa }{}ϟ=S\D@h*oܒR;ѳ經&(Z4@C 9 KLaE 3eQr\TJ4y!2oHq6a, n`>1P؀[$<PTM T8jYOv`,n&NfޗL>R-TbaDS&ʗHV<[ bEǰӥ@> #HI.j} V|6o8Em`,|Ƣ4)+e0J1cdX8aӻ#[@ Kal5(Z`.s>z<ruCsG䱙g gAy`)|c">xث/88/6w􎈕d&)]`z秵}i| M ,ʓ0~·@ )5B$j$%ۂ]i)=rAyRQ "hP3 Ks+⑒ 68Ųz8ҷu/._mu,'(}s)R0?|[J.eD#rQa.&#Z|!Xt|b+GH@qmd=3nEE >GylOm@ܕ8{4frPC _[z;0 dpM܄"A\@WtuP";}n~R= ]:.qѲ}NSl/~7Ka˸|3r euVwt^smiYZVB8zI-0i]Jhd9pyo3=T-nܭ೭S>s8LT>ֈAš-ꋶmI-J\/1Bd%y{Fз4~/[n8{h;pL6%֖x +*_n Y\$;Nal0`׶ yͨNϢRh4նZe)ExϹ,ەtG%/ G{YAlիWpcVGDIͿtz͟X[R0|Aa\,9E5P`<`3@F jW_k Z 3D1ݢ;e:Zst ˆ3D/As ?ǀE 8r?oHqn[!_N/$~ymdt]}/tCe=Í!] .02D3Gqm߯7A/:ds/A-FG}HU!:4Dm n U& j-_4GWxM_7+4/ۗMG[*ǠYڶ B<\Zb L*(d 4ϣxJfCοPE+Н)ʼnbZ nQ4?1pZ?]a-|.&(R^#AZ?"qOosSf.۩IxUFTZ)(n#t+zu:GʣEka0ncOyl &2nc$B~jh6iZ:|̷A?׳ͱqmʾ&_e`,6{Td֠'Z@/[n̋wK[ 2ґ4<@gZF5?f`i0ծ9S kuF1'5G& iS12Y;Z?}~SB(!I % wMAg ੯vUQ%l=,]w~gK|M6u{A&iEo˗7CO/ K>Eti}#Sзmc)}"@Xo&qT2Z=oșaE=bɩd;p|I:`"g b7(1;dUB%P0CzƷz6 %1š|2 }GjQA_#ׁG~#j$ ,!m0~ 5hፇX%s10gm,+alO /2cJt$')2+ &Ϣ> ĽkLNLs,sDYYP|Gv* R:Xb`1P65qe@{%o޺YU|'a021۱n]`,CNᙫS~[w$,O X=eUPtKR&װ\BwtML mN;Uf 5ӳJF4y ]K,Jn>$|MZjFUmݸ`SG p 'EYlGJߓ{>5C!-٢Zvu+PdvhA3=m9cWa\z}Vjנ),w N}N ]q>b'Ωng#b&k0yWi#w#|iۺQ gQ kY!dRTKdT=|r']i!Pvɢ{F0kErQ$C=TFS,  u~Z[O G .Ă'.x,I5|Cj0(m0 5<'~A\Sj q[L qo"R,b'/'ymz2zk,k-cqbH0/iAQ+g*jD1rVr{pB>havPtj֧)5ЋVR^Ė<_uD0ly]a `h7VC/% ݪ=IL``PW  +a;(v_%kKkYW_Ӕ4F1|ů\HOl\31dai}d5?wk2*Gqr\@ٽ- /˛ͨRFz}žne F3j-BfNNE}+Y 531 6$vkj/!cbYv  Mwy*Iq-}inU!V9%;mY3ƆwxS{ʙ!  WٕCS,@B|U}XnY;Te]CI fxhCW:Zc,̖@eLT,\&^&_҇AT~LK^ ϔa嫊$8%>(2oZ;c+FGM@RC׵~?GA /Rʘu*vqGDL9"ȢA4Ƥ(V}w$P ]60/Ռq BZ~+qŷ>Z˙N:G A0uD{+-z>U{pHdX%L,hZ(ꯖXEzy/HN\^lZZ`i@pvq_.#O(/X;["j٥%ܲ~B;V!?VY/Db* GHy_1ThEBJ$_':ZSo_+{W/ǟq7%X|BCr9N74t!nIsbH:uEujρ)|歇F>|:8nulͻ7njkj36NDUSꗼ j[sM"9қ ߞkmḲqȣOΊ/rdQ=)(O˹QOQ`Qs:G;GwhtZ(M .qn,[J`v)՟^ [ Z}so&~* Pm~%-dūhBVw(Ģg|d  ~"[3;Nhadmf8AzJg(N%I !|dWÒy,s|jYA*|ߥXaYJ9v' th[{`xt}8>8t[!~NE``H=F@B"aH$\–nC ˵ ؿx^,hxxx}̿CizxW$m1hN?n1x-vU^;)xJO1boNݸE-4< VܘbS%}%bRkM d7?W[hxr6ia@ 8˒xaPwoB1_>^77ɧGeNELz3/d:ͻή1][~ IlHUa][/ OfsXl/`ӻ|ll~ vnJ j_=嫾B)eƫ'FVu@ta,0:owBR7}Nt4ٍ/}8] n,0j ^/'_]9eYxvygHlQy8O0"ɰ,' 3Gh{w%GkI:jaO5bi m~ mt[f{& :cݒjQ !֚r[(2QId|uPUmѵaj%5dkM} Pa.ߑ[ [u +ArN 31@!kƔ+ԋj!J`Eˏv)9+L]S`!^oo`2>>yp2N;=q"vA<=>Qt8ix>8ɧb!լKb_9ᛳsp b| /|4ă08)H(r{Zb 7W8\WtF]v `X 0i9$*Vuy@CXxS<l#t{O.bΙ3oE X(_WoF4T3&*pH2(,J${\YWlJluW}*Mbۅ g|>WP1YԜsؤ3-psLUHk/롻&tD@vZE;Pvw]7qKԺqdKKOƿS,a׿r0^|닝- JCEB]yaS.Jd c<+-9KH?evî4[-AWaLjhFW~}a Lj/Wy\5r~0o,l' O+`{c(,1V(C钳$cp1&nҮTQpv+j5)NоpMzWR<&"~qHL`<ڠ6jv3lP]߅Β{1(+P@ e,p$$寣ާ_sΫ>@rC@:2Qburdah5GЌ0:hx A,^` ovu0':A2b*h4S^hl 0F3!"i#+3f̰KN gwuaBq=ٳGUCbxv[7ܪgeӖlطBqG"6s3<[ZT6vyM}{>Nc !%vvw0T@tNO:N)`=tEu k4۞^44һf++/r6 ȕHejڭag|=n ŮZd5d3Y-&*yLH|vtM_'e.˩o`fF+p:gtt JB4n>9lnfd.EfL55a+)_z6$Am3(iɼ-e븸mn:0hϻ>08lZ~uCsZ/oeաNW{ ނcq{oitҰ3Gs.Gs;0IV*AUVE7qa dZfjymV3MZ1;hS[cm ޺sb4jLmctSĎ!C/FaڼQa:yw:y>^;iP6o, 2T= M4Gn4j[?(]B663NJP6 ?mnikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Declaration.phpUTr]PK E.hO;eH? (onikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/FunctionLike.phpUTr]PK E.hO3`m< qnikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Function_.phpUTr]PK E.hO!= tnikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Interface_.phpUTr]PK E.hODb 9 +wnikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Method.phpUTr]PK E.hOb!= znikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Namespace_.phpUTr]PK E.hOD 8 |nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Param.phpUTr]PK E.hOI ; nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Property.phpUTr]PK E.hOjB %; nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/TraitUse.phpUTr]PK E.hOzXE Onikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/TraitUseAdaptation.phpUTr]PK E.hOT@BD9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Trait_.phpUTr]PK E.hOˣ7 Ynikic-PHP-Parser-9a9981c/lib/PhpParser/Builder/Use_.phpUTr]PK E.hOs,%9 nikic-PHP-Parser-9a9981c/lib/PhpParser/BuilderFactory.phpUTr]PK E.hO8%"9 nikic-PHP-Parser-9a9981c/lib/PhpParser/BuilderHelpers.phpUTr]PK E.hO6v2 nikic-PHP-Parser-9a9981c/lib/PhpParser/Comment.phpUTr]PK E.hO/ mnikic-PHP-Parser-9a9981c/lib/PhpParser/Comment/UTr]PK E.hOXg6 änikic-PHP-Parser-9a9981c/lib/PhpParser/Comment/Doc.phpUTr]PK E.hOo 5NVG xnikic-PHP-Parser-9a9981c/lib/PhpParser/ConstExprEvaluationException.phpUTr]PK E.hO>~(#= 4nikic-PHP-Parser-9a9981c/lib/PhpParser/ConstExprEvaluator.phpUTr]PK E.hO#0 nikic-PHP-Parser-9a9981c/lib/PhpParser/Error.phpUTr]PK E.hOE&7 nikic-PHP-Parser-9a9981c/lib/PhpParser/ErrorHandler.phpUTr]PK E.hO4 ٴnikic-PHP-Parser-9a9981c/lib/PhpParser/ErrorHandler/UTr]PK E.hOz|gpB 4nikic-PHP-Parser-9a9981c/lib/PhpParser/ErrorHandler/Collecting.phpUTr]PK E.hOgH[j@ nikic-PHP-Parser-9a9981c/lib/PhpParser/ErrorHandler/Throwing.phpUTr]PK E.hO0 @nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/UTr]PK E.hOjF ,< nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/DiffElem.phpUTr]PK E.hO_i:: nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/Differ.phpUTr]PK E.hOcd*~M nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpUTr]PK E.hOrMq? nikic-PHP-Parser-9a9981c/lib/PhpParser/Internal/TokenStream.phpUTr]PK E.hO{[v 6 nikic-PHP-Parser-9a9981c/lib/PhpParser/JsonDecoder.phpUTr]PK E.hO32"A0 nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer.phpUTr]PK E.hO- nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/UTr]PK E.hO#O : Nnikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/Emulative.phpUTr]PK E.hO; qnikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/UTr]PK E.hO:f.X nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpUTr]PK E.hOCx0rN nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpUTr]PK E.hO؛ ^ gnikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpUTr]PK E.hO oܿ2U nikic-PHP-Parser-9a9981c/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.phpUTr]PK E.hOlv &6 nikic-PHP-Parser-9a9981c/lib/PhpParser/NameContext.phpUTr]PK E.hOH D/ nikic-PHP-Parser-9a9981c/lib/PhpParser/Node.phpUTr]PK E.hO, Unikic-PHP-Parser-9a9981c/lib/PhpParser/Node/UTr]PK E.hOc 3 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Arg.phpUTr]PK E.hOr5޴6 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Const_.phpUTr]PK E.hOf4 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr.phpUTr]PK E.hO1 j nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UTr]PK E.hO_i8B  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrayDimFetch.phpUTr]PK E.hO)^]>  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrayItem.phpUTr]PK E.hO]Gr;  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Array_.phpUTr]PK E.hOh O=B nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ArrowFunction.phpUTr]PK E.hO$2Q; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Assign.phpUTr]PK E.hOM= @nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp.phpUTr]PK E.hO: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/UTr]PK E.hO4)̚H Rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpUTr]PK E.hOW!G [nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpUTr]PK E.hOF%H bnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpUTr]PK E.hOwyF mnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpUTr]PK E.hO@-tD rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Concat.phpUTr]PK E.hOK֖A unikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Div.phpUTr]PK E.hOaC snikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Minus.phpUTr]PK E.hOMA tnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Mod.phpUTr]PK E.hOFHbA rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Mul.phpUTr]PK E.hOkB pnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Plus.phpUTr]PK E.hOeЖA o nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/Pow.phpUTr]PK E.hO8G m!nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpUTr]PK E.hOZH u"nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpUTr]PK E.hOsii3> #nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/AssignRef.phpUTr]PK E.hOTZZ= M%nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp.phpUTr]PK E.hO: 'nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/UTr]PK E.hO&=H 'nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpUTr]PK E.hO;G )nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpUTr]PK E.hO ²=H  *nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpUTr]PK E.hO.Jo>H A+nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpUTr]PK E.hO!G<G b,nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpUTr]PK E.hOoRծ:F -nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.phpUTr]PK E.hOҔڧ5D .nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpUTr]PK E.hO}bz/A /nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Div.phpUTr]PK E.hO}uz4C 0nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Equal.phpUTr]PK E.hOx7E 1nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Greater.phpUTr]PK E.hOa)FL 2nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpUTr]PK E.hO{=G  4nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Identical.phpUTr]PK E.hO{β?H ?5nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpUTr]PK E.hO0tް<G `6nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpUTr]PK E.hOc?H ~7nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpUTr]PK E.hO[J3C 8nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpUTr]PK E.hO /A 9nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Mod.phpUTr]PK E.hO/A :nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpUTr]PK E.hOӰ:F ;nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpUTr]PK E.hOCJ <nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpUTr]PK E.hOӀ/1B  >nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpUTr]PK E.hOjH0A 5?nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpUTr]PK E.hO<G J@nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpUTr]PK E.hO >H hAnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpUTr]PK E.hO ޯ7E Bnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpUTr]PK E.hO0FL Cnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpUTr]PK E.hO=G Dnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpUTr]PK E.hOF/? Enikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BitwiseNot.phpUTr]PK E.hOZF'1? zGnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/BooleanNot.phpUTr]PK E.hOxw+9 Inikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast.phpUTr]PK E.hO6 Jnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/UTr]PK E.hOg,Gd@ Jnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Array_.phpUTr]PK E.hO ໒? Knikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Bool_.phpUTr]PK E.hOpn}@ Lnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Double.phpUTr]PK E.hOuh > ,Nnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Int_.phpUTr]PK E.hOA $Onikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Object_.phpUTr]PK E.hOA  Pnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/String_.phpUTr]PK E.hO2@ Qnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Cast/Unset_.phpUTr]PK E.hO3D Rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ClassConstFetch.phpUTr]PK E.hO[)v; Tnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Clone_.phpUTr]PK E.hOr< < Unikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Closure.phpUTr]PK E.hOtq? Xnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ClosureUse.phpUTr]PK E.hOSC3? Znikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ConstFetch.phpUTr]PK E.hOz5,y; 6\nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Empty_.phpUTr]PK E.hOG}: ]nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Error.phpUTr]PK E.hO 61B _nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ErrorSuppress.phpUTr]PK E.hO }+v:  1{nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/ShellExec.phpUTr]PK E.hO4}g? |nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/StaticCall.phpUTr]PK E.hOvH ~nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/StaticPropertyFetch.phpUTr]PK E.hO6< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Ternary.phpUTr]PK E.hO 0? ւnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UnaryMinus.phpUTr]PK E.hO*^u1> lnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/UnaryPlus.phpUTr]PK E.hO /= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Variable.phpUTr]PK E.hO?:9> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/YieldFrom.phpUTr]PK E.hO]G; 3nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Expr/Yield_.phpUTr]PK E.hO=z$< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/FunctionLike.phpUTr]PK E.hO!$): ynikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Identifier.phpUTr]PK E.hOXמ+4 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name.phpUTr]PK E.hO1 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/UTr]PK E.hOaXOC Tnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/FullyQualified.phpUTr]PK E.hO)FCsJ=  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Name/Relative.phpUTr]PK E.hOX< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/NullableType.phpUTr]PK E.hO}i;5 vnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Param.phpUTr]PK E.hOf]b6  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar.phpUTr]PK E.hO3 ǟnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/UTr]PK E.hO>P6> !nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/DNumber.phpUTr]PK E.hOOsLA? Vnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/Encapsed.phpUTr]PK E.hO1yhDI nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpUTr]PK E.hOFJl&'> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/LNumber.phpUTr]PK E.hOT!MA =nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst.phpUTr]PK E.hO> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/UTr]PK E.hOTzAH "nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpUTr]PK E.hO!qp:E ?nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpUTr]PK E.hOi =F Xnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/File.phpUTr]PK E.hO(deJK tnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Function_.phpUTr]PK E.hO g=F nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Line.phpUTr]PK E.hO~OCH nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Method.phpUTr]PK E.hOuML ײnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.phpUTr]PK E.hOdAH nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phpUTr]PK E.hO `> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Scalar/String_.phpUTr]PK E.hOnf4 rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt.phpUTr]PK E.hO1 3nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/UTr]PK E.hO`sB; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Break_.phpUTr]PK E.hOUnW: /nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Case_.phpUTr]PK E.hOI4֦A; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Catch_.phpUTr]PK E.hO;? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ClassConst.phpUTr]PK E.hO%a> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ClassLike.phpUTr]PK E.hOpgf@ Enikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ClassMethod.phpUTr]PK E.hO\ ; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Class_.phpUTr]PK E.hOh4; 5nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Const_.phpUTr]PK E.hOHW C> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Continue_.phpUTr]PK E.hO*#~C snikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/DeclareDeclare.phpUTr]PK E.hOY!dq= [nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Declare_.phpUTr]PK E.hO+\-8 #nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Do_.phpUTr]PK E.hOIa6: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Echo_.phpUTr]PK E.hOq^kc4< unikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/ElseIf_.phpUTr]PK E.hORR5: ;nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Else_.phpUTr]PK E.hOIG? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Expression.phpUTr]PK E.hOh|7= ~nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Finally_.phpUTr]PK E.hOje)9 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/For_.phpUTr]PK E.hO&8Y= ?nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Foreach_.phpUTr]PK E.hOQ> nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Function_.phpUTr]PK E.hOexE< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Global_.phpUTr]PK E.hOׂY: nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Goto_.phpUTr]PK E.hOYk= wnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/GroupUse.phpUTr]PK E.hOFIA ynikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/HaltCompiler.phpUTr]PK E.hOi4&%8 *nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/If_.phpUTr]PK E.hOYv2? lnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/InlineHTML.phpUTr]PK E.hO喽/? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Interface_.phpUTr]PK E.hOCJ: 'nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Label.phpUTr]PK E.hO9? nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Namespace_.phpUTr]PK E.hOu-8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Nop.phpUTr]PK E.hOnnL= nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Property.phpUTr]PK E.hO_wE nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/PropertyProperty.phpUTr]PK E.hOW7< nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Return_.phpUTr]PK E.hO/bTSv> knikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/StaticVar.phpUTr]PK E.hOeA< Fnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Static_.phpUTr]PK E.hO[ < nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Switch_.phpUTr]PK E.hOF..2; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Throw_.phpUTr]PK E.hOG,%a= <nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUse.phpUTr]PK E.hO!LZ G  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpUTr]PK E.hOD  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/UTr]PK E.hO9=6,M  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpUTr]PK E.hOzER  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpUTr]PK E.hOTL; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Trait_.phpUTr]PK E.hOod = nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/TryCatch.phpUTr]PK E.hOɤ;; nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Unset_.phpUTr]PK E.hOdxE; xnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/UseUse.phpUTr]PK E.hO[X9 Rnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/Use_.phpUTr]PK E.hO]u_0;  nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/Stmt/While_.phpUTr]PK E.hOp99 nikic-PHP-Parser-9a9981c/lib/PhpParser/Node/UnionType.phpUTr]PK E.hOjF(A gnikic-PHP-Parser-9a9981c/lib/PhpParser/Node/VarLikeIdentifier.phpUTr]PK E.hO??7 nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeAbstract.phpUTr]PK E.hON\5 #nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeDumper.phpUTr]PK E.hO8MH: 5 y*nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeFinder.phpUTr]PK E.hO<-Av`)8 -nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeTraverser.phpUTr]PK E.hO}uA k4nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeTraverserInterface.phpUTr]PK E.hOZM6 5nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor.phpUTr]PK E.hO3 !8nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/UTr]PK E.hOzaE {8nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/CloningVisitor.phpUTr]PK E.hOhłbE 9nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/FindingVisitor.phpUTr]PK E.hOzJBJ <nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpUTr]PK E.hOXdy$!C `>nikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitor/NameResolver.phpUTr]PK E.hOX> CFnikic-PHP-Parser-9a9981c/lib/PhpParser/NodeVisitorAbstract.phpUTr]PK E.hOT4t1 lGnikic-PHP-Parser-9a9981c/lib/PhpParser/Parser.phpUTr]PK E.hO. Hnikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/UTr]PK E.hOOit: MInikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Multiple.phpUTr]PK E.hObzC 6 Lnikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Php5.phpUTr]PK E.hOˉaAwN6 anikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Php7.phpUTr]PK E.hOf1^8 nikic-PHP-Parser-9a9981c/lib/PhpParser/Parser/Tokens.phpUTr]PK E.hO"9 nikic-PHP-Parser-9a9981c/lib/PhpParser/ParserAbstract.phpUTr]PK E.hOup#N8 nikic-PHP-Parser-9a9981c/lib/PhpParser/ParserFactory.phpUTr]PK E.hO5 znikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinter/UTr]PK E.hOtɔA nikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinter/Standard.phpUTr]PK E.hOO-@ nikic-PHP-Parser-9a9981c/lib/PhpParser/PrettyPrinterAbstract.phpUTr]PKit5D(9a9981c347c5c49d6dfe5cf826bb882b824080dcPK!NW[1'php-parser/lib/PhpParser/PhpVersion.phpnu[ 50100, 'callable' => 50400, 'bool' => 70000, 'int' => 70000, 'float' => 70000, 'string' => 70000, 'iterable' => 70100, 'void' => 70100, 'object' => 70200, 'null' => 80000, 'false' => 80000, 'mixed' => 80000, 'never' => 80100, 'true' => 80200, ]; private function __construct(int $id) { $this->id = $id; } /** * Create a PhpVersion object from major and minor version components. */ public static function fromComponents(int $major, int $minor): self { return new self($major * 10000 + $minor * 100); } /** * Get the newest PHP version supported by this library. Support for this version may be partial, * if it is still under development. */ public static function getNewestSupported(): self { return self::fromComponents(8, 5); } /** * Get the host PHP version, that is the PHP version we're currently running on. */ public static function getHostVersion(): self { return self::fromComponents(\PHP_MAJOR_VERSION, \PHP_MINOR_VERSION); } /** * Parse the version from a string like "8.1". */ public static function fromString(string $version): self { if (!preg_match('/^(\d+)\.(\d+)/', $version, $matches)) { throw new \LogicException("Invalid PHP version \"$version\""); } return self::fromComponents((int) $matches[1], (int) $matches[2]); } /** * Check whether two versions are the same. */ public function equals(PhpVersion $other): bool { return $this->id === $other->id; } /** * Check whether this version is greater than or equal to the argument. */ public function newerOrEqual(PhpVersion $other): bool { return $this->id >= $other->id; } /** * Check whether this version is older than the argument. */ public function older(PhpVersion $other): bool { return $this->id < $other->id; } /** * Check whether this is the host PHP version. */ public function isHostVersion(): bool { return $this->equals(self::getHostVersion()); } /** * Check whether this PHP version supports the given builtin type. Type name must be lowercase. */ public function supportsBuiltinType(string $type): bool { $minVersion = self::BUILTIN_TYPE_VERSIONS[$type] ?? null; return $minVersion !== null && $this->id >= $minVersion; } /** * Whether this version supports [] array literals. */ public function supportsShortArraySyntax(): bool { return $this->id >= 50400; } /** * Whether this version supports [] for destructuring. */ public function supportsShortArrayDestructuring(): bool { return $this->id >= 70100; } /** * Whether this version supports flexible heredoc/nowdoc. */ public function supportsFlexibleHeredoc(): bool { return $this->id >= 70300; } /** * Whether this version supports trailing commas in parameter lists. */ public function supportsTrailingCommaInParamList(): bool { return $this->id >= 80000; } /** * Whether this version allows "$var =& new Obj". */ public function allowsAssignNewByReference(): bool { return $this->id < 70000; } /** * Whether this version allows invalid octals like "08". */ public function allowsInvalidOctals(): bool { return $this->id < 70000; } /** * Whether this version allows DEL (\x7f) to occur in identifiers. */ public function allowsDelInIdentifiers(): bool { return $this->id < 70100; } /** * Whether this version supports yield in expression context without parentheses. */ public function supportsYieldWithoutParentheses(): bool { return $this->id >= 70000; } /** * Whether this version supports unicode escape sequences in strings. */ public function supportsUnicodeEscapes(): bool { return $this->id >= 70000; } /* * Whether this version supports attributes. */ public function supportsAttributes(): bool { return $this->id >= 80000; } public function supportsNewDereferenceWithoutParentheses(): bool { return $this->id >= 80400; } } PK!&U%%3php-parser/lib/PhpParser/Internal/TokenPolyfill.phpnu[= 80000) { class TokenPolyfill extends \PhpToken { } return; } /** * This is a polyfill for the PhpToken class introduced in PHP 8.0. We do not actually polyfill * PhpToken, because composer might end up picking a different polyfill implementation, which does * not meet our requirements. * * @internal */ class TokenPolyfill { /** @var int The ID of the token. Either a T_* constant of a character code < 256. */ public int $id; /** @var string The textual content of the token. */ public string $text; /** @var int The 1-based starting line of the token (or -1 if unknown). */ public int $line; /** @var int The 0-based starting position of the token (or -1 if unknown). */ public int $pos; /** @var array Tokens ignored by the PHP parser. */ private const IGNORABLE_TOKENS = [ \T_WHITESPACE => true, \T_COMMENT => true, \T_DOC_COMMENT => true, \T_OPEN_TAG => true, ]; /** @var array Tokens that may be part of a T_NAME_* identifier. */ private static array $identifierTokens; /** * Create a Token with the given ID and text, as well optional line and position information. */ final public function __construct(int $id, string $text, int $line = -1, int $pos = -1) { $this->id = $id; $this->text = $text; $this->line = $line; $this->pos = $pos; } /** * Get the name of the token. For single-char tokens this will be the token character. * Otherwise it will be a T_* style name, or null if the token ID is unknown. */ public function getTokenName(): ?string { if ($this->id < 256) { return \chr($this->id); } $name = token_name($this->id); return $name === 'UNKNOWN' ? null : $name; } /** * Check whether the token is of the given kind. The kind may be either an integer that matches * the token ID, a string that matches the token text, or an array of integers/strings. In the * latter case, the function returns true if any of the kinds in the array match. * * @param int|string|(int|string)[] $kind */ public function is($kind): bool { if (\is_int($kind)) { return $this->id === $kind; } if (\is_string($kind)) { return $this->text === $kind; } if (\is_array($kind)) { foreach ($kind as $entry) { if (\is_int($entry)) { if ($this->id === $entry) { return true; } } elseif (\is_string($entry)) { if ($this->text === $entry) { return true; } } else { throw new \TypeError( 'Argument #1 ($kind) must only have elements of type string|int, ' . gettype($entry) . ' given'); } } return false; } throw new \TypeError( 'Argument #1 ($kind) must be of type string|int|array, ' .gettype($kind) . ' given'); } /** * Check whether this token would be ignored by the PHP parser. Returns true for T_WHITESPACE, * T_COMMENT, T_DOC_COMMENT and T_OPEN_TAG, and false for everything else. */ public function isIgnorable(): bool { return isset(self::IGNORABLE_TOKENS[$this->id]); } /** * Return the textual content of the token. */ public function __toString(): string { return $this->text; } /** * Tokenize the given source code and return an array of tokens. * * This performs certain canonicalizations to match the PHP 8.0 token format: * * Bad characters are represented using T_BAD_CHARACTER rather than omitted. * * T_COMMENT does not include trailing newlines, instead the newline is part of a following * T_WHITESPACE token. * * Namespaced names are represented using T_NAME_* tokens. * * @return static[] */ public static function tokenize(string $code, int $flags = 0): array { self::init(); $tokens = []; $line = 1; $pos = 0; $origTokens = \token_get_all($code, $flags); $numTokens = \count($origTokens); for ($i = 0; $i < $numTokens; $i++) { $token = $origTokens[$i]; if (\is_string($token)) { if (\strlen($token) === 2) { // b" and B" are tokenized as single-char tokens, even though they aren't. $tokens[] = new static(\ord('"'), $token, $line, $pos); $pos += 2; } else { $tokens[] = new static(\ord($token), $token, $line, $pos); $pos++; } } else { $id = $token[0]; $text = $token[1]; // Emulate PHP 8.0 comment format, which does not include trailing whitespace anymore. if ($id === \T_COMMENT && \substr($text, 0, 2) !== '/*' && \preg_match('/(\r\n|\n|\r)$/D', $text, $matches) ) { $trailingNewline = $matches[0]; $text = \substr($text, 0, -\strlen($trailingNewline)); $tokens[] = new static($id, $text, $line, $pos); $pos += \strlen($text); if ($i + 1 < $numTokens && $origTokens[$i + 1][0] === \T_WHITESPACE) { // Move trailing newline into following T_WHITESPACE token, if it already exists. $origTokens[$i + 1][1] = $trailingNewline . $origTokens[$i + 1][1]; $origTokens[$i + 1][2]--; } else { // Otherwise, we need to create a new T_WHITESPACE token. $tokens[] = new static(\T_WHITESPACE, $trailingNewline, $line, $pos); $line++; $pos += \strlen($trailingNewline); } continue; } // Emulate PHP 8.0 T_NAME_* tokens, by combining sequences of T_NS_SEPARATOR and // T_STRING into a single token. if (($id === \T_NS_SEPARATOR || isset(self::$identifierTokens[$id]))) { $newText = $text; $lastWasSeparator = $id === \T_NS_SEPARATOR; for ($j = $i + 1; $j < $numTokens; $j++) { if ($lastWasSeparator) { if (!isset(self::$identifierTokens[$origTokens[$j][0]])) { break; } $lastWasSeparator = false; } else { if ($origTokens[$j][0] !== \T_NS_SEPARATOR) { break; } $lastWasSeparator = true; } $newText .= $origTokens[$j][1]; } if ($lastWasSeparator) { // Trailing separator is not part of the name. $j--; $newText = \substr($newText, 0, -1); } if ($j > $i + 1) { if ($id === \T_NS_SEPARATOR) { $id = \T_NAME_FULLY_QUALIFIED; } elseif ($id === \T_NAMESPACE) { $id = \T_NAME_RELATIVE; } else { $id = \T_NAME_QUALIFIED; } $tokens[] = new static($id, $newText, $line, $pos); $pos += \strlen($newText); $i = $j - 1; continue; } } $tokens[] = new static($id, $text, $line, $pos); $line += \substr_count($text, "\n"); $pos += \strlen($text); } } return $tokens; } /** Initialize private static state needed by tokenize(). */ private static function init(): void { if (isset(self::$identifierTokens)) { return; } // Based on semi_reserved production. self::$identifierTokens = \array_fill_keys([ \T_STRING, \T_STATIC, \T_ABSTRACT, \T_FINAL, \T_PRIVATE, \T_PROTECTED, \T_PUBLIC, \T_READONLY, \T_INCLUDE, \T_INCLUDE_ONCE, \T_EVAL, \T_REQUIRE, \T_REQUIRE_ONCE, \T_LOGICAL_OR, \T_LOGICAL_XOR, \T_LOGICAL_AND, \T_INSTANCEOF, \T_NEW, \T_CLONE, \T_EXIT, \T_IF, \T_ELSEIF, \T_ELSE, \T_ENDIF, \T_ECHO, \T_DO, \T_WHILE, \T_ENDWHILE, \T_FOR, \T_ENDFOR, \T_FOREACH, \T_ENDFOREACH, \T_DECLARE, \T_ENDDECLARE, \T_AS, \T_TRY, \T_CATCH, \T_FINALLY, \T_THROW, \T_USE, \T_INSTEADOF, \T_GLOBAL, \T_VAR, \T_UNSET, \T_ISSET, \T_EMPTY, \T_CONTINUE, \T_GOTO, \T_FUNCTION, \T_CONST, \T_RETURN, \T_PRINT, \T_YIELD, \T_LIST, \T_SWITCH, \T_ENDSWITCH, \T_CASE, \T_DEFAULT, \T_BREAK, \T_ARRAY, \T_CALLABLE, \T_EXTENDS, \T_IMPLEMENTS, \T_NAMESPACE, \T_TRAIT, \T_INTERFACE, \T_CLASS, \T_CLASS_C, \T_TRAIT_C, \T_FUNC_C, \T_METHOD_C, \T_LINE, \T_FILE, \T_DIR, \T_NS_C, \T_HALT_COMPILER, \T_FN, \T_MATCH, ], true); } } PK!4ϫ 1php-parser/lib/PhpParser/compatibility_tokens.phpnu[ $attributes Additional attributes */ public function __construct(Expr $value, ?Expr $key = null, bool $byRef = false, array $attributes = [], bool $unpack = false) { $this->attributes = $attributes; $this->key = $key; $this->value = $value; $this->byRef = $byRef; $this->unpack = $unpack; } public function getSubNodeNames(): array { return ['key', 'value', 'byRef', 'unpack']; } public function getType(): string { return 'ArrayItem'; } } // @deprecated compatibility alias class_alias(ArrayItem::class, Expr\ArrayItem::class); PK!ߓ,,4php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.phpnu['; } public function getType(): string { return 'Expr_BinaryOp_Pipe'; } } PK!I1php-parser/lib/PhpParser/Node/Expr/Cast/Void_.phpnu[attributes = $attributes; $this->var = $var; $this->name = \is_string($name) ? new Identifier($name) : $name; } public function getSubNodeNames() : array { return ['var', 'name']; } public function getType() : string { return 'Expr_NullsafePropertyFetch'; } } PK!p /php-parser/lib/PhpParser/Node/Expr/CallLike.phpnu[ */ public abstract function getRawArgs() : array; /** * Returns whether this call expression is actually a first class callable. */ public function isFirstClassCallable() : bool { foreach ($this->getRawArgs() as $arg) { if ($arg instanceof VariadicPlaceholder) { return \true; } } return \false; } /** * Assert that this is not a first-class callable and return only ordinary Args. * * @return Arg[] */ public function getArgs() : array { \assert(!$this->isFirstClassCallable()); return $this->getRawArgs(); } } PK!ճŘ-php-parser/lib/PhpParser/Node/Expr/Throw_.phpnu[attributes = $attributes; $this->expr = $expr; } public function getSubNodeNames() : array { return ['expr']; } public function getType() : string { return 'Expr_Throw'; } } PK!3SS9php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpnu[ Arguments */ public $args; /** * Constructs a nullsafe method call node. * * @param Expr $var Variable holding object * @param string|Identifier|Expr $name Method name * @param array $args Arguments * @param array $attributes Additional attributes */ public function __construct(Expr $var, $name, array $args = [], array $attributes = []) { $this->attributes = $attributes; $this->var = $var; $this->name = \is_string($name) ? new Identifier($name) : $name; $this->args = $args; } public function getSubNodeNames() : array { return ['var', 'name', 'args']; } public function getType() : string { return 'Expr_NullsafeMethodCall'; } public function getRawArgs() : array { return $this->args; } } PK!x ,-php-parser/lib/PhpParser/Node/Expr/Match_.phpnu[attributes = $attributes; $this->cond = $cond; $this->arms = $arms; } public function getSubNodeNames() : array { return ['cond', 'arms']; } public function getType() : string { return 'Expr_Match'; } } PK!;77,php-parser/lib/PhpParser/Node/Stmt/Block.phpnu[ $attributes Additional attributes */ public function __construct(array $stmts, array $attributes = []) { $this->attributes = $attributes; $this->stmts = $stmts; } public function getType(): string { return 'Stmt_Block'; } public function getSubNodeNames(): array { return ['stmts']; } } PK!_:ǜ/php-parser/lib/PhpParser/Node/Stmt/EnumCase.phpnu[name = \is_string($name) ? new Node\Identifier($name) : $name; $this->expr = $expr; $this->attrGroups = $attrGroups; } public function getSubNodeNames() : array { return ['attrGroups', 'name', 'expr']; } public function getType() : string { return 'Stmt_EnumCase'; } } PK!~BB,php-parser/lib/PhpParser/Node/Stmt/Enum_.phpnu[ null : Scalar type * 'implements' => array() : Names of implemented interfaces * 'stmts' => array() : Statements * 'attrGroups' => array() : PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, array $subNodes = [], array $attributes = []) { $this->name = \is_string($name) ? new Node\Identifier($name) : $name; $this->scalarType = $subNodes['scalarType'] ?? null; $this->implements = $subNodes['implements'] ?? []; $this->stmts = $subNodes['stmts'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; parent::__construct($attributes); } public function getSubNodeNames() : array { return ['attrGroups', 'name', 'scalarType', 'implements', 'stmts']; } public function getType() : string { return 'Stmt_Enum'; } } PK!X-php-parser/lib/PhpParser/Node/DeclareItem.phpnu[value pair node. * * @param string|Node\Identifier $key Key * @param Node\Expr $value Value * @param array $attributes Additional attributes */ public function __construct($key, Node\Expr $value, array $attributes = []) { $this->attributes = $attributes; $this->key = \is_string($key) ? new Node\Identifier($key) : $key; $this->value = $value; } public function getSubNodeNames(): array { return ['key', 'value']; } public function getType(): string { return 'DeclareItem'; } } // @deprecated compatibility alias class_alias(DeclareItem::class, Stmt\DeclareDeclare::class); PK!j,q*php-parser/lib/PhpParser/Node/MatchArm.phpnu[conds = $conds; $this->body = $body; $this->attributes = $attributes; } public function getSubNodeNames() : array { return ['conds', 'body']; } public function getType() : string { return 'MatchArm'; } } PK!00.php-parser/lib/PhpParser/Node/PropertyItem.phpnu[ $attributes Additional attributes */ public function __construct($name, ?Node\Expr $default = null, array $attributes = []) { $this->attributes = $attributes; $this->name = \is_string($name) ? new Node\VarLikeIdentifier($name) : $name; $this->default = $default; } public function getSubNodeNames(): array { return ['name', 'default']; } public function getType(): string { return 'PropertyItem'; } } // @deprecated compatibility alias class_alias(PropertyItem::class, Stmt\PropertyProperty::class); PK!`@@+php-parser/lib/PhpParser/Node/Attribute.phpnu[attributes = $attributes; $this->name = $name; $this->args = $args; } public function getSubNodeNames() : array { return ['name', 'args']; } public function getType() : string { return 'Attribute'; } } PK!hg g .php-parser/lib/PhpParser/Node/PropertyHook.phpnu[ 0 : Flags * 'byRef' => false : Whether hook returns by reference * 'params' => array(): Parameters * 'attrGroups' => array(): PHP attribute groups * @param array $attributes Additional attributes */ public function __construct($name, $body, array $subNodes = [], array $attributes = []) { $this->attributes = $attributes; $this->name = \is_string($name) ? new Identifier($name) : $name; $this->body = $body; $this->flags = $subNodes['flags'] ?? 0; $this->byRef = $subNodes['byRef'] ?? false; $this->params = $subNodes['params'] ?? []; $this->attrGroups = $subNodes['attrGroups'] ?? []; } public function returnsByRef(): bool { return $this->byRef; } public function getParams(): array { return $this->params; } public function getReturnType() { return null; } /** * Whether the property hook is final. */ public function isFinal(): bool { return (bool) ($this->flags & Modifiers::FINAL); } public function getStmts(): ?array { if ($this->body instanceof Expr) { $name = $this->name->toLowerString(); if ($name === 'get') { return [new Return_($this->body)]; } if ($name === 'set') { if (!$this->hasAttribute('propertyName')) { throw new \LogicException( 'Can only use getStmts() on a "set" hook if the "propertyName" attribute is set'); } $propName = $this->getAttribute('propertyName'); $prop = new PropertyFetch(new Variable('this'), (string) $propName); return [new Expression(new Assign($prop, $this->body))]; } throw new \LogicException('Unknown property hook "' . $name . '"'); } return $this->body; } public function getAttrGroups(): array { return $this->attrGroups; } public function getType(): string { return 'PropertyHook'; } public function getSubNodeNames(): array { return ['attrGroups', 'flags', 'byRef', 'name', 'params', 'body']; } } PK!YCY55/php-parser/lib/PhpParser/Node/Scalar/Float_.phpnu[ $attributes Additional attributes */ public function __construct(float $value, array $attributes = []) { $this->attributes = $attributes; $this->value = $value; } public function getSubNodeNames(): array { return ['value']; } /** * @param mixed[] $attributes */ public static function fromString(string $str, array $attributes = []): Float_ { $attributes['rawValue'] = $str; $float = self::parse($str); return new Float_($float, $attributes); } /** * @internal * * Parses a DNUMBER token like PHP would. * * @param string $str A string number * * @return float The parsed number */ public static function parse(string $str): float { $str = str_replace('_', '', $str); // Check whether this is one of the special integer notations. if ('0' === $str[0]) { // hex if ('x' === $str[1] || 'X' === $str[1]) { return hexdec($str); } // bin if ('b' === $str[1] || 'B' === $str[1]) { return bindec($str); } // oct, but only if the string does not contain any of '.eE'. if (false === strpbrk($str, '.eE')) { // substr($str, 0, strcspn($str, '89')) cuts the string at the first invalid digit // (8 or 9) so that only the digits before that are used. return octdec(substr($str, 0, strcspn($str, '89'))); } } // dec return (float) $str; } public function getType(): string { return 'Scalar_Float'; } } // @deprecated compatibility alias class_alias(Float_::class, DNumber::class); PK!ǢP;php-parser/lib/PhpParser/Node/Scalar/InterpolatedString.phpnu[ $attributes Additional attributes */ public function __construct(array $parts, array $attributes = []) { $this->attributes = $attributes; $this->parts = $parts; } public function getSubNodeNames(): array { return ['parts']; } public function getType(): string { return 'Scalar_InterpolatedString'; } } // @deprecated compatibility alias class_alias(InterpolatedString::class, Encapsed::class); PK!PCC<php-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.phpnu[ $attributes Additional attributes */ public function __construct(int $value, array $attributes = []) { $this->attributes = $attributes; $this->value = $value; } public function getSubNodeNames(): array { return ['value']; } /** * Constructs an Int node from a string number literal. * * @param string $str String number literal (decimal, octal, hex or binary) * @param array $attributes Additional attributes * @param bool $allowInvalidOctal Whether to allow invalid octal numbers (PHP 5) * * @return Int_ The constructed LNumber, including kind attribute */ public static function fromString(string $str, array $attributes = [], bool $allowInvalidOctal = false): Int_ { $attributes['rawValue'] = $str; $str = str_replace('_', '', $str); if ('0' !== $str[0] || '0' === $str) { $attributes['kind'] = Int_::KIND_DEC; return new Int_((int) $str, $attributes); } if ('x' === $str[1] || 'X' === $str[1]) { $attributes['kind'] = Int_::KIND_HEX; return new Int_(hexdec($str), $attributes); } if ('b' === $str[1] || 'B' === $str[1]) { $attributes['kind'] = Int_::KIND_BIN; return new Int_(bindec($str), $attributes); } if (!$allowInvalidOctal && strpbrk($str, '89')) { throw new Error('Invalid numeric literal', $attributes); } // Strip optional explicit octal prefix. if ('o' === $str[1] || 'O' === $str[1]) { $str = substr($str, 2); } // use intval instead of octdec to get proper cutting behavior with malformed numbers $attributes['kind'] = Int_::KIND_OCT; return new Int_(intval($str, 8), $attributes); } public function getType(): string { return 'Scalar_Int'; } } // @deprecated compatibility alias class_alias(Int_::class, LNumber::class); PK! yCC-php-parser/lib/PhpParser/Node/ComplexType.phpnu[ $attributes Additional attributes */ public function __construct( Expr\Variable $var, ?Node\Expr $default = null, array $attributes = [] ) { $this->attributes = $attributes; $this->var = $var; $this->default = $default; } public function getSubNodeNames(): array { return ['var', 'default']; } public function getType(): string { return 'StaticVar'; } } // @deprecated compatibility alias class_alias(StaticVar::class, Stmt\StaticVar::class); PK!l,php-parser/lib/PhpParser/Node/ClosureUse.phpnu[ $attributes Additional attributes */ public function __construct(Expr\Variable $var, bool $byRef = false, array $attributes = []) { $this->attributes = $attributes; $this->var = $var; $this->byRef = $byRef; } public function getSubNodeNames(): array { return ['var', 'byRef']; } public function getType(): string { return 'ClosureUse'; } } // @deprecated compatibility alias class_alias(ClosureUse::class, Expr\ClosureUse::class); PK!E 5php-parser/lib/PhpParser/Node/VariadicPlaceholder.phpnu[attributes = $attributes; } public function getType() : string { return 'VariadicPlaceholder'; } public function getSubNodeNames() : array { return []; } } PK!UPR0php-parser/lib/PhpParser/Node/AttributeGroup.phpnu[attributes = $attributes; $this->attrs = $attrs; } public function getSubNodeNames() : array { return ['attrs']; } public function getType() : string { return 'AttributeGroup'; } } PK!3RR8php-parser/lib/PhpParser/Node/InterpolatedStringPart.phpnu[ $attributes Additional attributes */ public function __construct(string $value, array $attributes = []) { $this->attributes = $attributes; $this->value = $value; } public function getSubNodeNames(): array { return ['value']; } public function getType(): string { return 'InterpolatedStringPart'; } } // @deprecated compatibility alias class_alias(InterpolatedStringPart::class, Scalar\EncapsedStringPart::class); PK!aD2php-parser/lib/PhpParser/Node/IntersectionType.phpnu[attributes = $attributes; $this->types = $types; } public function getSubNodeNames() : array { return ['types']; } public function getType() : string { return 'IntersectionType'; } } PK!Q+͍)php-parser/lib/PhpParser/Node/UseItem.phpnu[ $attributes Additional attributes */ public function __construct(Node\Name $name, $alias = null, int $type = Use_::TYPE_UNKNOWN, array $attributes = []) { $this->attributes = $attributes; $this->type = $type; $this->name = $name; $this->alias = \is_string($alias) ? new Identifier($alias) : $alias; } public function getSubNodeNames(): array { return ['type', 'name', 'alias']; } /** * Get alias. If not explicitly given this is the last component of the used name. */ public function getAlias(): Identifier { if (null !== $this->alias) { return $this->alias; } return new Identifier($this->name->getLast()); } public function getType(): string { return 'UseItem'; } } // @deprecated compatibility alias class_alias(UseItem::class, Stmt\UseUse::class); PK!pXNphp-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpnu[resolveIntegerOrFloatToken($tokens[$i + 1][1]); \array_splice($tokens, $i, 2, [[$tokenKind, '0' . $tokens[$i + 1][1], $tokens[$i][2]]]); $c--; } } return $tokens; } private function resolveIntegerOrFloatToken(string $str) : int { $str = \substr($str, 1); $str = \str_replace('_', '', $str); $num = \octdec($str); return \is_float($num) ? \T_DNUMBER : \T_LNUMBER; } public function reverseEmulate(string $code, array $tokens) : array { // Explicit octals were not legal code previously, don't bother. return $tokens; } } PK!mzGmm>php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpnu[emulator = $emulator; } public function getPhpVersion() : string { return $this->emulator->getPhpVersion(); } public function isEmulationNeeded(string $code) : bool { return $this->emulator->isEmulationNeeded($code); } public function emulate(string $code, array $tokens) : array { return $this->emulator->reverseEmulate($code, $tokens); } public function reverseEmulate(string $code, array $tokens) : array { return $this->emulator->emulate($code, $tokens); } public function preprocessCode(string $code, array &$patches) : string { return $code; } } PK!I@php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpnu[getKeywordString()) !== \false; } protected function isKeywordContext(array $tokens, int $pos) : bool { $previousNonSpaceToken = $this->getPreviousNonSpaceToken($tokens, $pos); return $previousNonSpaceToken === null || $previousNonSpaceToken[0] !== \T_OBJECT_OPERATOR; } public function emulate(string $code, array $tokens) : array { $keywordString = $this->getKeywordString(); foreach ($tokens as $i => $token) { if ($token[0] === \T_STRING && \strtolower($token[1]) === $keywordString && $this->isKeywordContext($tokens, $i)) { $tokens[$i][0] = $this->getKeywordToken(); } } return $tokens; } /** * @param mixed[] $tokens * @return array|string|null */ private function getPreviousNonSpaceToken(array $tokens, int $start) { for ($i = $start - 1; $i >= 0; --$i) { if ($tokens[$i][0] === \T_WHITESPACE) { continue; } return $tokens[$i]; } return null; } public function reverseEmulate(string $code, array $tokens) : array { $keywordToken = $this->getKeywordToken(); foreach ($tokens as $i => $token) { if ($token[0] === $keywordToken) { $tokens[$i][0] = \T_STRING; } } return $tokens; } } PK! /,  Rphp-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.phpnu[ \T_PUBLIC_SET, \T_PROTECTED => \T_PROTECTED_SET, \T_PRIVATE => \T_PRIVATE_SET, ]; for ($i = 0, $c = count($tokens); $i < $c; ++$i) { $token = $tokens[$i]; if (isset($map[$token->id]) && $i + 3 < $c && $tokens[$i + 1]->text === '(' && $tokens[$i + 2]->id === \T_STRING && \strtolower($tokens[$i + 2]->text) === 'set' && $tokens[$i + 3]->text === ')' && $this->isKeywordContext($tokens, $i) ) { array_splice($tokens, $i, 4, [ new Token( $map[$token->id], $token->text . '(' . $tokens[$i + 2]->text . ')', $token->line, $token->pos), ]); $c -= 3; } } return $tokens; } public function reverseEmulate(string $code, array $tokens): array { $reverseMap = [ \T_PUBLIC_SET => \T_PUBLIC, \T_PROTECTED_SET => \T_PROTECTED, \T_PRIVATE_SET => \T_PRIVATE, ]; for ($i = 0, $c = count($tokens); $i < $c; ++$i) { $token = $tokens[$i]; if (isset($reverseMap[$token->id]) && \preg_match('/(public|protected|private)\((set)\)/i', $token->text, $matches) ) { [, $modifier, $set] = $matches; $modifierLen = \strlen($modifier); array_splice($tokens, $i, 1, [ new Token($reverseMap[$token->id], $modifier, $token->line, $token->pos), new Token(\ord('('), '(', $token->line, $token->pos + $modifierLen), new Token(\T_STRING, $set, $token->line, $token->pos + $modifierLen + 1), new Token(\ord(')'), ')', $token->line, $token->pos + $modifierLen + 4), ]); $i += 3; $c += 3; } } return $tokens; } /** @param Token[] $tokens */ protected function isKeywordContext(array $tokens, int $pos): bool { $prevToken = $this->getPreviousNonSpaceToken($tokens, $pos); if ($prevToken === null) { return false; } return $prevToken->id !== \T_OBJECT_OPERATOR && $prevToken->id !== \T_NULLSAFE_OBJECT_OPERATOR; } /** @param Token[] $tokens */ private function getPreviousNonSpaceToken(array $tokens, int $start): ?Token { for ($i = $start - 1; $i >= 0; --$i) { if ($tokens[$i]->id === T_WHITESPACE) { continue; } return $tokens[$i]; } return null; } } PK!*3Bphp-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpnu[text !== '(') { continue; } $numTokens = 1; $text = '('; $j = $i + 1; if ($j < $c && $tokens[$j]->id === \T_WHITESPACE && preg_match('/[ \t]+/', $tokens[$j]->text)) { $text .= $tokens[$j]->text; $numTokens++; $j++; } if ($j >= $c || $tokens[$j]->id !== \T_STRING || \strtolower($tokens[$j]->text) !== 'void') { continue; } $text .= $tokens[$j]->text; $numTokens++; $k = $j + 1; if ($k < $c && $tokens[$k]->id === \T_WHITESPACE && preg_match('/[ \t]+/', $tokens[$k]->text)) { $text .= $tokens[$k]->text; $numTokens++; $k++; } if ($k >= $c || $tokens[$k]->text !== ')') { continue; } $text .= ')'; $numTokens++; array_splice($tokens, $i, $numTokens, [ new Token(\T_VOID_CAST, $text, $token->line, $token->pos), ]); $c -= $numTokens - 1; } return $tokens; } public function reverseEmulate(string $code, array $tokens): array { for ($i = 0, $c = count($tokens); $i < $c; ++$i) { $token = $tokens[$i]; if ($token->id !== \T_VOID_CAST) { continue; } if (!preg_match('/^\(([ \t]*)(void)([ \t]*)\)$/i', $token->text, $match)) { throw new \LogicException('Unexpected T_VOID_CAST contents'); } $newTokens = []; $pos = $token->pos; $newTokens[] = new Token(\ord('('), '(', $token->line, $pos); $pos++; if ($match[1] !== '') { $newTokens[] = new Token(\T_WHITESPACE, $match[1], $token->line, $pos); $pos += \strlen($match[1]); } $newTokens[] = new Token(\T_STRING, $match[2], $token->line, $pos); $pos += \strlen($match[2]); if ($match[3] !== '') { $newTokens[] = new Token(\T_WHITESPACE, $match[3], $token->line, $pos); $pos += \strlen($match[3]); } $newTokens[] = new Token(\ord(')'), ')', $token->line, $pos); array_splice($tokens, $i, 1, $newTokens); $i += \count($newTokens) - 1; $c += \count($newTokens) - 1; } return $tokens; } } PK!x,Fphp-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpnu[') !== \false; } public function emulate(string $code, array $tokens) : array { // We need to manually iterate and manage a count because we'll change // the tokens array on the way $line = 1; for ($i = 0, $c = \count($tokens); $i < $c; ++$i) { if ($tokens[$i] === '?' && isset($tokens[$i + 1]) && $tokens[$i + 1][0] === \T_OBJECT_OPERATOR) { \array_splice($tokens, $i, 2, [[\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line]]); $c--; continue; } // Handle ?-> inside encapsed string. if ($tokens[$i][0] === \T_ENCAPSED_AND_WHITESPACE && isset($tokens[$i - 1]) && $tokens[$i - 1][0] === \T_VARIABLE && \preg_match('/^\\?->([a-zA-Z_\\x80-\\xff][a-zA-Z0-9_\\x80-\\xff]*)/', $tokens[$i][1], $matches)) { $replacement = [[\T_NULLSAFE_OBJECT_OPERATOR, '?->', $line], [\T_STRING, $matches[1], $line]]; if (\strlen($matches[0]) !== \strlen($tokens[$i][1])) { $replacement[] = [\T_ENCAPSED_AND_WHITESPACE, \substr($tokens[$i][1], \strlen($matches[0])), $line]; } \array_splice($tokens, $i, 1, $replacement); $c += \count($replacement) - 1; continue; } if (\is_array($tokens[$i])) { $line += \substr_count($tokens[$i][1], "\n"); } } return $tokens; } public function reverseEmulate(string $code, array $tokens) : array { // ?-> was not valid code previously, don't bother. return $tokens; } } PK!L+NEphp-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.phpnu[') !== false; } public function emulate(string $code, array $tokens): array { for ($i = 0, $c = count($tokens); $i < $c; ++$i) { $token = $tokens[$i]; if ($token->text === '|' && isset($tokens[$i + 1]) && $tokens[$i + 1]->text === '>') { array_splice($tokens, $i, 2, [ new Token(\T_PIPE, '|>', $token->line, $token->pos), ]); $c--; } } return $tokens; } public function reverseEmulate(string $code, array $tokens): array { for ($i = 0, $c = count($tokens); $i < $c; ++$i) { $token = $tokens[$i]; if ($token->id === \T_PIPE) { array_splice($tokens, $i, 1, [ new Token(\ord('|'), '|', $token->line, $token->pos), new Token(\ord('>'), '>', $token->line, $token->pos + 1), ]); $i++; $c++; } } return $tokens; } } PK!_'[[Fphp-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpnu[php-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpnu[$node->getAttribute('parent'), the previous * node can be accessed through $node->getAttribute('previous'), * and the next node can be accessed through $node->getAttribute('next'). */ final class NodeConnectingVisitor extends NodeVisitorAbstract { /** * @var Node[] */ private $stack = []; /** * @var ?Node */ private $previous; public function beforeTraverse(array $nodes) { $this->stack = []; $this->previous = null; } public function enterNode(Node $node) { if (!empty($this->stack)) { $node->setAttribute('parent', $this->stack[\count($this->stack) - 1]); } if ($this->previous !== null && $this->previous->getAttribute('parent') === $node->getAttribute('parent')) { $node->setAttribute('previous', $this->previous); $this->previous->setAttribute('next', $node); } $this->stack[] = $node; } public function leaveNode(Node $node) { $this->previous = $node; \array_pop($this->stack); } } PK! Aphp-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.phpnu[ Token positions of comments */ private array $commentPositions = []; /** * Create a comment annotation visitor. * * @param Token[] $tokens Token array */ public function __construct(array $tokens) { $this->tokens = $tokens; // Collect positions of comments. We use this to avoid traversing parts of the AST where // there are no comments. foreach ($tokens as $i => $token) { if ($token->id === \T_COMMENT || $token->id === \T_DOC_COMMENT) { $this->commentPositions[] = $i; } } } public function enterNode(Node $node) { $nextCommentPos = current($this->commentPositions); if ($nextCommentPos === false) { // No more comments. return self::STOP_TRAVERSAL; } $oldPos = $this->pos; $this->pos = $pos = $node->getStartTokenPos(); if ($nextCommentPos > $oldPos && $nextCommentPos < $pos) { $comments = []; while (--$pos >= $oldPos) { $token = $this->tokens[$pos]; if ($token->id === \T_DOC_COMMENT) { $comments[] = new Comment\Doc( $token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); continue; } if ($token->id === \T_COMMENT) { $comments[] = new Comment( $token->text, $token->line, $token->pos, $pos, $token->getEndLine(), $token->getEndPos() - 1, $pos); continue; } if ($token->id !== \T_WHITESPACE) { break; } } if (!empty($comments)) { $node->setAttribute('comments', array_reverse($comments)); } do { $nextCommentPos = next($this->commentPositions); } while ($nextCommentPos !== false && $nextCommentPos < $this->pos); } $endPos = $node->getEndTokenPos(); if ($nextCommentPos > $endPos) { // Skip children if there are no comments located inside this node. $this->pos = $endPos; return self::DONT_TRAVERSE_CHILDREN; } return null; } } PK! ]]@php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpnu[$node->getAttribute('parent'). */ final class ParentConnectingVisitor extends NodeVisitorAbstract { /** * @var Node[] */ private $stack = []; public function beforeTraverse(array $nodes) { $this->stack = []; } public function enterNode(Node $node) { if (!empty($this->stack)) { $node->setAttribute('parent', $this->stack[count($this->stack) - 1]); } $this->stack[] = $node; } public function leaveNode(Node $node) { array_pop($this->stack); } } PK!(..-php-parser/lib/PhpParser/Builder/EnumCase.phpnu[name = $name; } /** * Sets the value. * * @param Node\Expr|string|int $value * * @return $this */ public function setValue($value) { $this->value = BuilderHelpers::normalizeValue($value); return $this; } /** * Sets doc comment for the constant. * * @param PhpParser\Comment\Doc|string $docComment Doc comment to set * * @return $this The builder instance (for fluid interface) */ public function setDocComment($docComment) { $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built enum case node. * * @return Stmt\EnumCase The built constant node */ public function getNode() : PhpParser\Node { return new Stmt\EnumCase($this->name, $this->value, $this->attributeGroups, $this->attributes); } } PK! kog g *php-parser/lib/PhpParser/Builder/Enum_.phpnu[name = $name; } /** * Sets the scalar type. * * @param string|Identifier $type * * @return $this */ public function setScalarType($scalarType) { $this->scalarType = BuilderHelpers::normalizeType($scalarType); return $this; } /** * Implements one or more interfaces. * * @param Name|string ...$interfaces Names of interfaces to implement * * @return $this The builder instance (for fluid interface) */ public function implement(...$interfaces) { foreach ($interfaces as $interface) { $this->implements[] = BuilderHelpers::normalizeName($interface); } return $this; } /** * Adds a statement. * * @param Stmt|PhpParser\Builder $stmt The statement to add * * @return $this The builder instance (for fluid interface) */ public function addStmt($stmt) { $stmt = BuilderHelpers::normalizeNode($stmt); $targets = [Stmt\TraitUse::class => &$this->uses, Stmt\EnumCase::class => &$this->enumCases, Stmt\ClassConst::class => &$this->constants, Stmt\ClassMethod::class => &$this->methods]; $class = \get_class($stmt); if (!isset($targets[$class])) { throw new \LogicException(\sprintf('Unexpected node of type "%s"', $stmt->getType())); } $targets[$class][] = $stmt; return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Returns the built class node. * * @return Stmt\Enum_ The built enum node */ public function getNode() : PhpParser\Node { return new Stmt\Enum_($this->name, ['scalarType' => $this->scalarType, 'implements' => $this->implements, 'stmts' => \array_merge($this->uses, $this->enumCases, $this->constants, $this->methods), 'attrGroups' => $this->attributeGroups], $this->attributes); } } PK!ż0/php-parser/lib/PhpParser/Builder/ClassConst.phpnu[constants = [new Const_($name, BuilderHelpers::normalizeValue($value))]; } /** * Add another constant to const group * * @param string|Identifier $name Name * @param Node\Expr|bool|null|int|float|string|array|\UnitEnum $value Value * * @return $this The builder instance (for fluid interface) */ public function addConst($name, $value) { $this->constants[] = new Const_($name, BuilderHelpers::normalizeValue($value)); return $this; } /** * Makes the constant public. * * @return $this The builder instance (for fluid interface) */ public function makePublic() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PUBLIC); return $this; } /** * Makes the constant protected. * * @return $this The builder instance (for fluid interface) */ public function makeProtected() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PROTECTED); return $this; } /** * Makes the constant private. * * @return $this The builder instance (for fluid interface) */ public function makePrivate() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_PRIVATE); return $this; } /** * Makes the constant final. * * @return $this The builder instance (for fluid interface) */ public function makeFinal() { $this->flags = BuilderHelpers::addModifier($this->flags, Stmt\Class_::MODIFIER_FINAL); return $this; } /** * Sets doc comment for the constant. * * @param PhpParser\Comment\Doc|string $docComment Doc comment to set * * @return $this The builder instance (for fluid interface) */ public function setDocComment($docComment) { $this->attributes = ['comments' => [BuilderHelpers::normalizeDocComment($docComment)]]; return $this; } /** * Adds an attribute group. * * @param Node\Attribute|Node\AttributeGroup $attribute * * @return $this The builder instance (for fluid interface) */ public function addAttribute($attribute) { $this->attributeGroups[] = BuilderHelpers::normalizeAttribute($attribute); return $this; } /** * Sets the constant type. * * @param string|Node\Name|Identifier|Node\ComplexType $type * * @return $this */ public function setType($type) { $this->type = BuilderHelpers::normalizeType($type); return $this; } /** * Returns the built class node. * * @return Stmt\ClassConst The built constant node */ public function getNode() : PhpParser\Node { return new Stmt\ClassConst($this->constants, $this->flags, $this->attributes, $this->attributeGroups, $this->type); } } PK! "php-parser/lib/PhpParser/Token.phpnu[pos + \strlen($this->text); } /** Get 1-based end line number of the token. */ public function getEndLine(): int { return $this->line + \substr_count($this->text, "\n"); } } PK!Y7D &php-parser/lib/PhpParser/Modifiers.phpnu[ 'public', self::PROTECTED => 'protected', self::PRIVATE => 'private', self::STATIC => 'static', self::ABSTRACT => 'abstract', self::FINAL => 'final', self::READONLY => 'readonly', self::PUBLIC_SET => 'public(set)', self::PROTECTED_SET => 'protected(set)', self::PRIVATE_SET => 'private(set)', ]; public static function toString(int $modifier): string { if (!isset(self::TO_STRING_MAP[$modifier])) { throw new \InvalidArgumentException("Unknown modifier $modifier"); } return self::TO_STRING_MAP[$modifier]; } private static function isValidModifier(int $modifier): bool { $isPow2 = ($modifier & ($modifier - 1)) == 0 && $modifier != 0; return $isPow2 && $modifier <= self::PRIVATE_SET; } /** * @internal */ public static function verifyClassModifier(int $a, int $b): void { assert(self::isValidModifier($b)); if (($a & $b) != 0) { throw new Error( 'Multiple ' . self::toString($b) . ' modifiers are not allowed'); } if ($a & 48 && $b & 48) { throw new Error('Cannot use the final modifier on an abstract class'); } } /** * @internal */ public static function verifyModifier(int $a, int $b): void { assert(self::isValidModifier($b)); if (($a & Modifiers::VISIBILITY_MASK && $b & Modifiers::VISIBILITY_MASK) || ($a & Modifiers::VISIBILITY_SET_MASK && $b & Modifiers::VISIBILITY_SET_MASK) ) { throw new Error('Multiple access type modifiers are not allowed'); } if (($a & $b) != 0) { throw new Error( 'Multiple ' . self::toString($b) . ' modifiers are not allowed'); } if ($a & 48 && $b & 48) { throw new Error('Cannot use the final modifier on an abstract class member'); } } } PK! E*php-parser/lib/PhpParser/PrettyPrinter.phpnu['", "T_IS_GREATER_OR_EQUAL", "T_PIPE", "'.'", "T_SL", "T_SR", "'+'", "'-'", "'*'", "'/'", "'%'", "'!'", "T_INSTANCEOF", "'~'", "T_INC", "T_DEC", "T_INT_CAST", "T_DOUBLE_CAST", "T_STRING_CAST", "T_ARRAY_CAST", "T_OBJECT_CAST", "T_BOOL_CAST", "T_UNSET_CAST", "'@'", "T_POW", "'['", "T_NEW", "T_CLONE", "T_EXIT", "T_IF", "T_ELSEIF", "T_ELSE", "T_ENDIF", "T_LNUMBER", "T_DNUMBER", "T_STRING", "T_STRING_VARNAME", "T_VARIABLE", "T_NUM_STRING", "T_INLINE_HTML", "T_ENCAPSED_AND_WHITESPACE", "T_CONSTANT_ENCAPSED_STRING", "T_ECHO", "T_DO", "T_WHILE", "T_ENDWHILE", "T_FOR", "T_ENDFOR", "T_FOREACH", "T_ENDFOREACH", "T_DECLARE", "T_ENDDECLARE", "T_AS", "T_SWITCH", "T_MATCH", "T_ENDSWITCH", "T_CASE", "T_DEFAULT", "T_BREAK", "T_CONTINUE", "T_GOTO", "T_FUNCTION", "T_FN", "T_CONST", "T_RETURN", "T_TRY", "T_CATCH", "T_FINALLY", "T_USE", "T_INSTEADOF", "T_GLOBAL", "T_STATIC", "T_ABSTRACT", "T_FINAL", "T_PRIVATE", "T_PROTECTED", "T_PUBLIC", "T_READONLY", "T_PUBLIC_SET", "T_PROTECTED_SET", "T_PRIVATE_SET", "T_VAR", "T_UNSET", "T_ISSET", "T_EMPTY", "T_HALT_COMPILER", "T_CLASS", "T_TRAIT", "T_INTERFACE", "T_ENUM", "T_EXTENDS", "T_IMPLEMENTS", "T_OBJECT_OPERATOR", "T_NULLSAFE_OBJECT_OPERATOR", "T_LIST", "T_ARRAY", "T_CALLABLE", "T_CLASS_C", "T_TRAIT_C", "T_METHOD_C", "T_FUNC_C", "T_PROPERTY_C", "T_LINE", "T_FILE", "T_START_HEREDOC", "T_END_HEREDOC", "T_DOLLAR_OPEN_CURLY_BRACES", "T_CURLY_OPEN", "T_PAAMAYIM_NEKUDOTAYIM", "T_NAMESPACE", "T_NS_C", "T_DIR", "T_NS_SEPARATOR", "T_ELLIPSIS", "T_NAME_FULLY_QUALIFIED", "T_NAME_QUALIFIED", "T_NAME_RELATIVE", "T_ATTRIBUTE", "';'", "']'", "'('", "')'", "'{'", "'}'", "'`'", "'\"'", "'$'" ); protected array $tokenToSymbol = array( 0, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 58, 172, 174, 173, 57, 174, 174, 167, 168, 55, 53, 9, 54, 50, 56, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 32, 165, 45, 17, 47, 31, 70, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 72, 174, 166, 37, 174, 171, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 169, 36, 170, 60, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 174, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 33, 34, 35, 38, 39, 40, 41, 42, 43, 44, 46, 48, 49, 51, 52, 59, 61, 62, 63, 64, 65, 66, 67, 68, 69, 71, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164 ); protected array $action = array( 132, 133, 134, 582, 135, 136, 162, 779, 780, 781, 137, 41, 863,-32766, 970, 1404, -584, 974, 973, 1302, 0, 395, 396, 455, 246, 854,-32766,-32766,-32766,-32766, -32766, 440,-32766, 27,-32766, 773, 772,-32766,-32766,-32766, -32766, 508,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32766, 131,-32766,-32766,-32766,-32766, 437, 782, 859, 1148,-32766, 949,-32766,-32766,-32766,-32766,-32766,-32766, 972, 1385, 300, 271, 53, 398, 786, 787, 788, 789, 305, 865, 441, -341, 39, 254, -584, -584, -195, 843, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 819, 583, 820, 821, 822, 823, 811, 812, 353, 354, 814, 815, 800, 801, 802, 804, 805, 806, 368, 846, 847, 848, 849, 850, 584, 1062, -194, 856, 807, 808, 585, 586, 3, 831, 829, 830, 842, 826, 827, 4, 860, 587, 588, 825, 589, 590, 591, 592, 939, 593, 594, 5, 854, -32766,-32766,-32766, 828, 595, 596,-32766, 138, 764, 132, 133, 134, 582, 135, 136, 1098, 779, 780, 781, 137, 41,-32766,-32766,-32766,-32766,-32766,-32766, -275, 1302, 613, 153, 1071, 749, 990, 991,-32766,-32766,-32766, 992,-32766, 891,-32766, 892,-32766, 773, 772,-32766, 986, 1309, 397, 396,-32766,-32766,-32766, 858, 299, 630,-32766,-32766, 440, 502, 736,-32766,-32766, 437, 782,-32767,-32767,-32767,-32767, 106, 107, 108, 109, 951,-32766, 1021, 29, 734, 271, 53, 398, 786, 787, 788, 789, 144, 1071, 441, -341, 332, 38, 864, 862, -195, 843, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 819, 583, 820, 821, 822, 823, 811, 812, 353, 354, 814, 815, 800, 801, 802, 804, 805, 806, 368, 846, 847, 848, 849, 850, 584, 863, -194, 139, 807, 808, 585, 586, 323, 831, 829, 830, 842, 826, 827, 1370, 148, 587, 588, 825, 589, 590, 591, 592, 245, 593, 594, 395, 396,-32766, -32766,-32766, 828, 595, 596, -85, 138, 440, 132, 133, 134, 582, 135, 136, 1095, 779, 780, 781, 137, 41, -32766,-32766,-32766,-32766,-32766, 51, 578, 1302, 257,-32766, 636, 107, 108, 109,-32766,-32766,-32766, 503,-32766, 316, -32766,-32766,-32766, 773, 772,-32766, -383, 166, -383, 1022, -32766,-32766,-32766, 305, 79, 1133,-32766,-32766, 1414, 762, 332, 1415,-32766, 437, 782,-32766, 1071, 110, 111, 112, 113, 114, -85, 283,-32766, 477, 478, 479, 271, 53, 398, 786, 787, 788, 789, 115, 407, 441, 10,-32766, 299, 1341, 306, 307, 843, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 819, 583, 820, 821, 822, 823, 811, 812, 353, 354, 814, 815, 800, 801, 802, 804, 805, 806, 368, 846, 847, 848, 849, 850, 584, 320, 1068, -582, 807, 808, 585, 586, 1389, 831, 829, 830, 842, 826, 827, 329, 1388, 587, 588, 825, 589, 590, 591, 592, 86, 593, 594, 1071, 332,-32766,-32766, -32766, 828, 595, 596, 349, 151, -581, 132, 133, 134, 582, 135, 136, 1100, 779, 780, 781, 137, 41,-32766, 290,-32766,-32766,-32766,-32766,-32766,-32766,-32766,-32767,-32767, -32767,-32767,-32767,-32766,-32766,-32766, 891, 1175, 892, -582, -582, 754, 773, 772, 1159, 1160, 1161, 1155, 1154, 1153, 1162, 1156, 1157, 1158,-32766, -582,-32766,-32766,-32766,-32766, -32766,-32766,-32766, 782,-32766,-32766,-32766, -588, -78,-32766, -32766,-32766, 350, -581, -581,-32766,-32766, 271, 53, 398, 786, 787, 788, 789, 383,-32766, 441,-32766,-32766, -581, -32766, 773, 772, 843, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 819, 583, 820, 821, 822, 823, 811, 812, 353, 354, 814, 815, 800, 801, 802, 804, 805, 806, 368, 846, 847, 848, 849, 850, 584, -620, 1068, -620, 807, 808, 585, 586, 389, 831, 829, 830, 842, 826, 827, 441, 405, 587, 588, 825, 589, 590, 591, 592, 333, 593, 594, 1071, 87, 88, 89, 459, 828, 595, 596, 460, 151, 803, 774, 775, 776, 777, 778, 854, 779, 780, 781, 816, 817, 40, 461, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 462, 283, 1329, 1159, 1160, 1161, 1155, 1154, 1153, 1162, 1156, 1157, 1158, 115, 869, 488, 489, 782, 1304, 1303, 1305, 108, 109, 1132, 154,-32766, -32766, 1134, 679, 23, 156, 783, 784, 785, 786, 787, 788, 789, 698, 699, 852, 152, 423, -580, 393, 394, 157, 843, 790, 791, 792, 793, 794, 795, 796, 797, 798, 799, 819, 841, 820, 821, 822, 823, 811, 812, 813, 840, 814, 815, 800, 801, 802, 804, 805, 806, 845, 846, 847, 848, 849, 850, 851, 1094, -578, 863, 807, 808, 809, 810, -58, 831, 829, 830, 842, 826, 827, 399, 400, 818, 824, 825, 832, 833, 835, 834, 294, 836, 837, 158, -580, -580, 160, 294, 828, 839, 838, 54, 55, 56, 57, 534, 58, 59, 36, -110, -580, -57, 60, 61, -110, 62, -110, 670, 671, 129, 130, 312, -587, 140, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -110, -578, -578, 141, 147, 949, 161, 712, -87, 163, 164, 165, -84, 949, -78, -73, -72, -578, 63, 64, 143, -309, -71, 65, 332, 66, 251, 252, 67, 68, 69, 70, 71, 72, 73, 74, 739, 31, 276, 47, 457, 535, -357, 713, 740, 1335, 1336, 536, -70, 863, 1068, -69, -68, 1333, 45, 22, 537, 949, 538, -67, 539, -66, 540, 52, -65, 541, 542, 714, 715, -46, 48, 49, 463, 392, 391, 1071, 50, 543, -18, 145, 281, 1302, 381, 348, 291, 750, 1304, 1303, 1305, 1295, 939, 753, 290, 948, 545, 546, 547, 150, 939, 290, -305, 295, 288, 289, 292, 293, 549, 550, 338, 1321, 1322, 1323, 1324, 1326, 1318, 1319, 304, 1300, 296, 301, 302, 283, 1325, 1320, 773, 772, 1304, 1303, 1305, 305, 308, 309, 75, -154, -154, -154, 327, 328, 332, 966, 854, 1070, 939, 149, 115, 1416, 388, 680, -154, 708, -154, 725, -154, 13, -154, 668, 723, 313, 31, 277, 1304, 1303, 1305, 863, 390,-32766, 600, 1166, 987, 951, 863, 310, 701, 734, 1333, 990, 991, 951,-32766, 686, 544, 734, 949, 685, 606, 1340, 485, 513, 925, 986, -110, -110, -110, 35, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 702, 949, 634, 1295, 773, 772, 741, -579, 305, -614, 1334, 0, 0, 0, 951, 311, 949, 0, 734, -154, 549, 550, 319, 1321, 1322, 1323, 1324, 1326, 1318, 1319, 1209, 1211, 744, 0, 1342, 0, 1325, 1320, -544, -534, 0, -578,-32766, -4, 949, 11, 77, 751, 1302, 30, 387, 328, 332, 862, 43,-32766,-32766,-32766, -613, -32766, 939,-32766, 968,-32766, 44, 759,-32766, 1330, 773, 772, 760,-32766,-32766,-32766, -579, -579, 882,-32766,-32766, 930, 1031, 1008, 1015,-32766, 437, 1005, 939, 1016, 928, 1003, -579, 1137, 1140, 1141, 1138,-32766, 1177, 1139, 1145, 37, 874, 939, -586, 1357, 1374, 1407,-32766, 673, -578, -578, -612, -588, 1302, -587, -586, -585, 31, 276, -528, -32766,-32766,-32766, 1,-32766, -578,-32766, 78,-32766, 863, 939,-32766, 32, 1333, -278, 33,-32766,-32766,-32766, 42, 1007, 46,-32766,-32766, 734, 76, 80, 81,-32766, 437, 82, 83, 390, 84, 453, 31, 277, 85, 146, 303, -32766, 155, 159, 990, 991, 249, 951, 863, 544, 1295, 734, 1333, 334, 369, 370, 371, 548, 986, -110, -110, -110, 951, 372, 326, 373, 734, 374, 550, 375, 1321, 1322, 1323, 1324, 1326, 1318, 1319, 376, 377, 422, 378, 21, -50, 1325, 1320, 379, 382, 454, 1295, 577, 951, 380, 384, 77, 734, -4, -276, -275, 328, 332, 15, 16, 17, 18, 20, 363, 550, 421, 1321, 1322, 1323, 1324, 1326, 1318, 1319, 142, 504, 505, 512, 515, 516, 1325, 1320, 949, 517, 518,-32766, 522, 523, 524, 531, 77, 1302, 611, 718, 1101, 328, 332, 1097,-32766,-32766, -32766, 1250,-32766, 1331,-32766, 949,-32766, 1099, 1096,-32766, 1077, 1290, 1309, 1073,-32766,-32766,-32766, -280,-32766, -102, -32766,-32766, 14, 19, 1302, 24,-32766, 437, 323, 420, 625,-32766,-32766,-32766, 631,-32766, 659,-32766,-32766,-32766, 724, 1254,-32766, -16, 1308, 1251, 1386,-32766,-32766,-32766, 735,-32766, 738,-32766,-32766, 742, 743, 1302, 745,-32766, 437, 746, 747, 748,-32766,-32766,-32766, 939,-32766, 300, -32766,-32766,-32766, 752, 1309,-32766, 764, 737, 332, 765, -32766,-32766,-32766, -253, -253, -253,-32766,-32766, 426, 390, 939, 756,-32766, 437, 926, 863, 1411, 1413, 885, 884, 990, 991, 980, 1023,-32766, 544, -252, -252, -252, 1412, 979, 977, 390, 925, 986, -110, -110, -110, 978, 981, 1283, 959, 969, 990, 991, 957, 1176, 1172, 544, 1126, -110, -110, 1013, 1014, 657, -110, 925, 986, -110, -110, -110, 1410, 2, 1368, -110, 1268, 951, 1383, 0, 0, 734, -253, 0,-32766, 0, 0,-32766, 863, 1059, 1054, 1053, 1052, 1058, 1055, 1056, 1057, 0, 0, 0, 951, 0, 0, 0, 734, -252, 305, 0, 0, 79, 0, 0, 1071, 0, 0, 332, 0, 0, 0, 0, 0, 0, 0, -110, -110, 0, 0, 0, -110, 0, 0, 0, 0, 0, 0, 0, 299, -110, 0, 0, 0, 0, 0, 0, 0, 0,-32766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 305, 0, 0, 79, 0, 0, 0, 0, 0, 332 ); protected array $actionCheck = array( 3, 4, 5, 6, 7, 8, 17, 10, 11, 12, 13, 14, 84, 76, 1, 87, 72, 74, 75, 82, 0, 108, 109, 110, 15, 82, 89, 90, 91, 10, 93, 118, 95, 103, 97, 38, 39, 100, 10, 11, 12, 104, 105, 106, 107, 10, 11, 12, 111, 112, 15, 10, 11, 12, 117, 118, 59, 82, 128, 31, 1, 33, 34, 35, 36, 37, 129, 124, 1, 31, 73, 74, 75, 76, 77, 78, 79, 164, 1, 82, 9, 153, 154, 139, 140, 9, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 1, 9, 82, 128, 129, 130, 131, 9, 133, 134, 135, 136, 137, 138, 9, 162, 141, 142, 143, 144, 145, 146, 147, 86, 149, 150, 9, 82, 10, 11, 12, 156, 157, 158, 118, 160, 169, 3, 4, 5, 6, 7, 8, 168, 10, 11, 12, 13, 14, 31, 76, 33, 34, 35, 36, 168, 82, 83, 15, 143, 169, 119, 120, 89, 90, 91, 124, 93, 108, 95, 110, 97, 38, 39, 100, 133, 1, 108, 109, 105, 106, 107, 162, 167, 1, 111, 112, 118, 32, 169, 118, 117, 118, 59, 45, 46, 47, 48, 49, 50, 51, 52, 165, 129, 32, 9, 169, 73, 74, 75, 76, 77, 78, 79, 169, 143, 82, 168, 173, 9, 165, 161, 168, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 84, 168, 9, 128, 129, 130, 131, 168, 133, 134, 135, 136, 137, 138, 1, 9, 141, 142, 143, 144, 145, 146, 147, 99, 149, 150, 108, 109, 10, 11, 12, 156, 157, 158, 32, 160, 118, 3, 4, 5, 6, 7, 8, 168, 10, 11, 12, 13, 14, 31, 76, 33, 34, 35, 72, 87, 82, 9, 142, 54, 50, 51, 52, 89, 90, 91, 169, 93, 9, 95, 118, 97, 38, 39, 100, 108, 15, 110, 165, 105, 106, 107, 164, 167, 165, 111, 112, 82, 169, 173, 85, 117, 118, 59, 118, 143, 53, 54, 55, 56, 57, 99, 59, 129, 134, 135, 136, 73, 74, 75, 76, 77, 78, 79, 71, 108, 82, 110, 142, 167, 152, 139, 140, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 9, 118, 72, 128, 129, 130, 131, 1, 133, 134, 135, 136, 137, 138, 9, 9, 141, 142, 143, 144, 145, 146, 147, 169, 149, 150, 143, 173, 10, 11, 12, 156, 157, 158, 9, 160, 72, 3, 4, 5, 6, 7, 8, 168, 10, 11, 12, 13, 14, 31, 167, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 10, 11, 12, 108, 165, 110, 139, 140, 169, 38, 39, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 31, 155, 33, 34, 35, 36, 37, 38, 39, 59, 10, 11, 12, 167, 17, 10, 11, 12, 9, 139, 140, 10, 11, 73, 74, 75, 76, 77, 78, 79, 9, 31, 82, 33, 34, 155, 31, 38, 39, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 166, 118, 168, 128, 129, 130, 131, 9, 133, 134, 135, 136, 137, 138, 82, 9, 141, 142, 143, 144, 145, 146, 147, 72, 149, 150, 143, 10, 11, 12, 9, 156, 157, 158, 9, 160, 3, 4, 5, 6, 7, 8, 82, 10, 11, 12, 13, 14, 31, 9, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 9, 59, 1, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 71, 9, 139, 140, 59, 161, 162, 163, 51, 52, 1, 15, 53, 54, 170, 77, 78, 15, 73, 74, 75, 76, 77, 78, 79, 77, 78, 82, 103, 104, 72, 108, 109, 15, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 1, 72, 84, 128, 129, 130, 131, 17, 133, 134, 135, 136, 137, 138, 108, 109, 141, 142, 143, 144, 145, 146, 147, 31, 149, 150, 15, 139, 140, 15, 31, 156, 157, 158, 2, 3, 4, 5, 6, 7, 8, 15, 103, 155, 17, 13, 14, 108, 16, 110, 113, 114, 17, 17, 115, 167, 17, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 139, 140, 17, 17, 1, 17, 82, 32, 17, 17, 17, 32, 1, 32, 32, 32, 155, 53, 54, 169, 36, 32, 58, 173, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 32, 72, 73, 74, 75, 76, 170, 118, 32, 80, 81, 82, 32, 84, 118, 32, 32, 88, 89, 90, 91, 1, 93, 32, 95, 32, 97, 72, 32, 100, 101, 142, 143, 32, 105, 106, 107, 108, 109, 143, 111, 112, 32, 32, 32, 82, 117, 118, 32, 32, 161, 162, 163, 124, 86, 32, 167, 32, 129, 130, 131, 32, 86, 167, 36, 38, 36, 36, 36, 36, 141, 142, 36, 144, 145, 146, 147, 148, 149, 150, 151, 118, 38, 38, 38, 59, 157, 158, 38, 39, 161, 162, 163, 164, 139, 140, 167, 77, 78, 79, 171, 172, 173, 39, 82, 142, 86, 72, 71, 85, 155, 92, 92, 79, 94, 94, 96, 99, 98, 115, 82, 116, 72, 73, 161, 162, 163, 84, 108, 87, 91, 84, 133, 165, 84, 137, 96, 169, 88, 119, 120, 165, 142, 102, 124, 169, 1, 98, 159, 152, 99, 99, 132, 133, 134, 135, 136, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 102, 1, 159, 124, 38, 39, 32, 72, 164, 167, 172, -1, -1, -1, 165, 138, 1, -1, 169, 170, 141, 142, 137, 144, 145, 146, 147, 148, 149, 150, 61, 62, 32, -1, 152, -1, 157, 158, 155, 155, -1, 72, 76, 0, 1, 155, 167, 32, 82, 155, 155, 172, 173, 161, 165, 89, 90, 91, 167, 93, 86, 95, 160, 97, 165, 165, 100, 166, 38, 39, 165, 105, 106, 107, 139, 140, 165, 111, 112, 165, 165, 165, 165, 117, 118, 165, 86, 165, 165, 165, 155, 165, 165, 165, 165, 129, 165, 165, 165, 169, 166, 86, 167, 166, 166, 166, 76, 166, 139, 140, 167, 167, 82, 167, 167, 167, 72, 73, 167, 89, 90, 91, 167, 93, 155, 95, 160, 97, 84, 86, 100, 167, 88, 168, 167, 105, 106, 107, 167, 165, 167, 111, 112, 169, 167, 167, 167, 117, 118, 167, 167, 108, 167, 110, 72, 73, 167, 167, 115, 129, 167, 167, 119, 120, 167, 165, 84, 124, 124, 169, 88, 167, 167, 167, 167, 132, 133, 134, 135, 136, 165, 167, 169, 167, 169, 167, 142, 167, 144, 145, 146, 147, 148, 149, 150, 167, 167, 170, 167, 156, 32, 157, 158, 167, 167, 167, 124, 167, 165, 167, 169, 167, 169, 170, 168, 168, 172, 173, 168, 168, 168, 168, 168, 168, 142, 168, 144, 145, 146, 147, 148, 149, 150, 32, 168, 168, 168, 168, 168, 157, 158, 1, 168, 168, 76, 168, 168, 168, 168, 167, 82, 168, 168, 168, 172, 173, 168, 89, 90, 91, 168, 93, 168, 95, 1, 97, 168, 168, 100, 168, 168, 1, 168, 105, 106, 107, 168, 76, 168, 111, 112, 168, 168, 82, 168, 117, 118, 168, 168, 168, 89, 90, 91, 168, 93, 168, 95, 129, 97, 168, 168, 100, 32, 168, 168, 168, 105, 106, 107, 169, 76, 169, 111, 112, 169, 169, 82, 169, 117, 118, 169, 169, 169, 89, 90, 91, 86, 93, 31, 95, 129, 97, 169, 1, 100, 169, 169, 173, 169, 105, 106, 107, 102, 103, 104, 111, 112, 170, 108, 86, 170, 117, 118, 170, 84, 170, 170, 170, 170, 119, 120, 170, 170, 129, 124, 102, 103, 104, 170, 170, 170, 108, 132, 133, 134, 135, 136, 170, 170, 170, 170, 170, 119, 120, 170, 170, 170, 124, 170, 119, 120, 170, 170, 170, 124, 132, 133, 134, 135, 136, 170, 167, 170, 133, 171, 165, 170, -1, -1, 169, 170, -1, 142, -1, -1, 118, 84, 120, 121, 122, 123, 124, 125, 126, 127, -1, -1, -1, 165, -1, -1, -1, 169, 170, 164, -1, -1, 167, -1, -1, 143, -1, -1, 173, -1, -1, -1, -1, -1, -1, -1, 119, 120, -1, -1, -1, 124, -1, -1, -1, -1, -1, -1, -1, 167, 133, -1, -1, -1, -1, -1, -1, -1, -1, 142, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 164, -1, -1, 167, -1, -1, -1, -1, -1, 173 ); protected array $actionBase = array( 0, 156, -3, 315, 474, 474, 880, 1074, 1271, 1294, 749, 675, 531, 559, 836, 1031, 1031, 1046, 1031, 828, 1005, 42, 59, 59, 59, 963, 898, 632, 632, 898, 632, 997, 997, 997, 997, 1061, 1061, -63, -63, 96, 1232, 1199, 255, 255, 255, 255, 255, 1265, 255, 255, 255, 255, 255, 1265, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 77, 194, 120, 205, 1197, 783, 1150, 1163, 1152, 1166, 1145, 1144, 1151, 1156, 1167, 1261, 1263, 889, 1254, 1267, 1158, 972, 1147, 1162, 962, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 19, 35, 535, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 529, 529, 529, 910, 910, 524, 299, 1113, 1075, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 1113, 140, 28, 1000, 493, 493, 458, 458, 458, 458, 458, 696, 1328, 1301, 171, 171, 171, 171, 1363, 1363, -70, 523, 248, 756, 291, 197, -87, 644, 38, 199, 323, 323, 482, 482, 233, 233, 482, 482, 482, 324, 324, 94, 94, 94, 94, 82, 249, 860, 67, 67, 67, 67, 860, 860, 860, 860, 913, 869, 860, 1036, 1049, 860, 860, 370, 645, 966, 646, 646, 398, -72, -72, 398, 64, -72, 294, 286, 257, 859, 91, 433, 257, 1073, 404, 686, 686, 815, 686, 686, 686, 923, 610, 923, 1141, 902, 902, 861, 807, 964, 1198, 1168, 901, 1252, 929, 1253, 1200, 342, 251, -56, 263, 550, 806, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1139, 1195, 523, 1141, -25, 1247, 1249, 1195, 1195, 1195, 523, 523, 523, 523, 523, 523, 523, 523, 870, 523, 523, 694, -25, 625, 635, -25, 896, 523, 915, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, 178, 77, 77, 194, 13, 13, 77, 200, 121, 13, 13, 13, -11, 13, 77, 77, 77, 610, 886, 849, 663, 283, 874, 114, 886, 886, 886, 71, 9, 76, 809, 888, 288, 882, 882, 882, 907, 986, 986, 882, 903, 882, 907, 882, 882, 986, 986, 875, 986, 274, 620, 465, 597, 624, 986, 340, 882, 882, 882, 882, 916, 986, 127, 139, 639, 882, 329, 287, 882, 882, 916, 858, 876, 908, 986, 986, 986, 916, 545, 908, 908, 908, 931, 936, 864, 872, 445, 431, 679, 232, 924, 872, 872, 882, 605, 864, 872, 864, 872, 933, 872, 872, 872, 864, 872, 903, 533, 872, 813, 665, 218, 872, 882, 20, 1008, 1009, 800, 1010, 1002, 1013, 1069, 1014, 1016, 1171, 982, 1028, 1004, 1020, 1071, 998, 995, 885, 792, 793, 921, 914, 979, 897, 897, 897, 975, 977, 897, 897, 897, 897, 897, 897, 897, 897, 792, 932, 926, 899, 1037, 796, 810, 1114, 857, 1214, 1264, 1036, 1008, 1016, 804, 1004, 1020, 998, 995, 856, 853, 844, 851, 843, 840, 808, 814, 871, 1116, 1119, 1021, 920, 811, 1085, 1038, 1211, 1044, 1045, 1047, 1088, 1123, 942, 1125, 1216, 895, 1217, 1218, 965, 1051, 1173, 897, 974, 873, 968, 1049, 978, 792, 969, 1129, 1130, 1081, 961, 1097, 1098, 1072, 911, 884, 970, 1219, 1059, 1060, 1062, 1176, 1177, 930, 1082, 996, 1099, 912, 1058, 1100, 1101, 1105, 1106, 1179, 1222, 1182, 922, 1183, 945, 879, 1077, 909, 1223, 165, 892, 893, 906, 1068, 683, 1035, 1184, 1208, 1229, 1108, 1109, 1110, 1230, 1231, 1024, 946, 1083, 900, 1084, 1078, 947, 948, 689, 905, 1132, 890, 891, 904, 705, 768, 1238, 1239, 1240, 1025, 877, 894, 951, 953, 1133, 887, 1135, 1241, 771, 954, 1242, 1115, 816, 817, 521, 784, 747, 818, 881, 1194, 925, 865, 878, 1067, 817, 883, 955, 1245, 957, 958, 959, 1111, 960, 1086, 1246, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 789, 789, 789, 789, 789, 789, 789, 789, 789, 632, 632, 632, 632, 789, 789, 789, 789, 789, 789, 789, 632, 789, 789, 789, 632, 632, 0, 0, 632, 0, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 789, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 616, 823, 823, 616, 616, 823, 823, 823, 823, 823, 823, 823, 823, 823, 823, 616, 616, 0, 616, 616, 616, 616, 616, 616, 616, 875, 823, 823, 324, 324, 324, 324, 823, 823, 396, 396, 396, 823, 324, 823, 64, 324, 823, 64, 823, 823, 823, 823, 823, 823, 823, 823, 823, 0, 0, 823, 823, 823, 823, -25, -72, 823, 903, 903, 903, 903, 823, 823, 823, 823, -72, -72, 823, -57, -57, 823, 823, 0, 0, 0, 324, 324, -25, 0, 0, -25, 0, 0, 903, 903, 823, 64, 875, 446, 823, 342, 0, 0, 0, 0, 0, 0, 0, -25, 903, -25, 523, -72, -72, 523, 523, 13, 77, 446, 612, 612, 612, 612, 77, 0, 0, 0, 0, 0, 610, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 875, 903, 0, 875, 0, 875, 875, 903, 903, 903, 0, 0, 0, 0, 0, 0, 0, 0, 986, 0, 0, 0, 0, 0, 0, 0, 903, 0, 986, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 903, 0, 0, 0, 0, 0, 0, 0, 0, 0, 897, 911, 0, 0, 911, 0, 897, 897, 897, 0, 0, 0, 905, 887 ); protected array $actionDefault = array( 3,32767,32767,32767, 102, 102,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767, 100, 32767, 632, 632, 632, 632,32767,32767, 257, 102,32767, 32767, 503, 417, 417, 417,32767,32767,32767, 576, 576, 576, 576, 576, 17,32767,32767,32767,32767,32767,32767, 32767, 503,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767, 36, 7, 8, 10, 11, 49, 338, 100, 32767,32767,32767,32767,32767,32767,32767,32767, 102,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767, 404, 625,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767, 497, 507, 485, 486, 488, 489, 416, 577, 631, 344, 628, 342, 415, 146, 354, 343, 245, 261, 508, 262, 509, 512, 513, 218, 401, 150, 151, 448, 504, 450, 502, 506, 449, 422, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 420, 421, 505, 482, 481, 480,32767,32767, 446, 447,32767, 32767,32767,32767,32767,32767,32767,32767, 102,32767, 451, 454, 419, 452, 453, 470, 471, 468, 469, 472,32767, 323,32767, 473, 474, 475, 476,32767,32767, 382, 196, 380,32767, 477,32767, 111, 455, 323, 111,32767,32767, 32767,32767,32767,32767,32767,32767,32767, 461, 462,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767, 102,32767,32767,32767, 100, 520, 570, 479, 456, 457,32767, 545,32767, 102, 32767, 547,32767,32767,32767,32767,32767,32767,32767,32767, 572, 443, 445, 540, 626, 423, 629,32767, 533, 100, 196,32767, 546, 196, 196,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767, 571,32767, 639, 533, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110, 110,32767, 196, 110,32767, 110, 110,32767,32767, 100, 196, 196, 196, 196, 196, 196, 196, 196, 548, 196, 196, 191,32767, 271, 273, 102, 594, 196, 550,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767, 404,32767,32767,32767,32767, 533, 466, 139, 32767, 535, 139, 578, 458, 459, 460, 578, 578, 578, 319, 296,32767,32767,32767,32767,32767, 548, 548, 100, 100, 100, 100,32767,32767,32767,32767, 111, 519, 99, 99, 99, 99, 99, 103, 101,32767,32767,32767,32767, 226,32767, 101, 101, 99,32767, 101, 101,32767,32767, 226, 228, 215, 230,32767, 598, 599, 226, 101, 230, 230, 230, 250, 250, 522, 325, 101, 99, 101, 101, 198, 325, 325,32767, 101, 522, 325, 522, 325, 200, 325, 325, 325, 522, 325,32767, 101, 325, 217, 99, 99, 325,32767,32767,32767,32767, 535,32767,32767,32767, 32767,32767,32767,32767, 225,32767,32767,32767,32767,32767, 32767,32767,32767, 565,32767, 583, 596, 464, 465, 467, 582, 580, 490, 491, 492, 493, 494, 495, 496, 499, 627,32767, 539,32767,32767,32767, 353,32767, 637,32767, 32767,32767, 9, 74, 528, 42, 43, 51, 57, 554, 555, 556, 557, 551, 552, 558, 553,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767, 638,32767, 578,32767,32767,32767,32767, 463, 560, 604,32767,32767, 579, 630,32767,32767,32767, 32767,32767,32767,32767,32767, 139,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767, 565,32767, 137,32767, 32767,32767,32767,32767,32767,32767,32767, 561,32767,32767, 32767, 578,32767,32767,32767,32767, 321, 318,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767, 578,32767,32767,32767,32767,32767, 298,32767, 315,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767, 400, 535, 301, 303, 304,32767,32767,32767,32767, 376,32767,32767,32767,32767,32767,32767,32767,32767,32767, 32767,32767,32767,32767, 153, 153, 3, 3, 356, 153, 153, 153, 356, 356, 153, 356, 356, 356, 153, 153, 153, 153, 153, 153, 153, 283, 186, 265, 268, 250, 250, 153, 368, 153, 402, 402, 411 ); protected array $goto = array( 201, 169, 201, 201, 201, 1069, 598, 719, 448, 684, 644, 681, 443, 345, 341, 342, 344, 615, 447, 346, 449, 661, 481, 728, 570, 570, 570, 570, 1245, 626, 172, 172, 172, 172, 225, 202, 198, 198, 182, 184, 220, 198, 198, 198, 198, 198, 1195, 199, 199, 199, 199, 199, 1195, 192, 193, 194, 195, 196, 197, 222, 220, 223, 557, 558, 438, 559, 562, 563, 564, 565, 566, 567, 568, 569, 173, 174, 175, 200, 176, 177, 178, 170, 179, 180, 181, 183, 219, 221, 224, 242, 247, 248, 259, 260, 262, 263, 264, 265, 266, 267, 268, 272, 273, 274, 275, 282, 285, 297, 298, 324, 325, 444, 445, 446, 620, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 193, 194, 195, 196, 197, 222, 203, 204, 205, 206, 243, 185, 186, 207, 187, 208, 204, 188, 244, 203, 168, 209, 210, 189, 211, 212, 213, 190, 214, 215, 171, 216, 217, 218, 191, 287, 284, 287, 287, 883, 255, 255, 255, 255, 255, 1125, 605, 487, 487, 622, 758, 660, 662, 1103, 359, 682, 487, 1075, 1074, 706, 709, 1041, 717, 726, 1037, 733, 922, 879, 922, 922, 253, 253, 253, 253, 250, 256, 646, 646, 1078, 1079, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 1332, 880, 351, 938, 933, 934, 947, 889, 935, 886, 936, 937, 887, 890, 476, 941, 894, 476, 1044, 1044, 893, 364, 364, 364, 364, 352, 351, 532, 1131, 1127, 1128, 1351, 1351, 331, 315, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1351, 1069, 1301, 1072, 1072, 704, 983, 1301, 1301, 1064, 1080, 1081, 1069, 942, 1301, 943, 458, 1069, 881, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 1069, 897, 855, 1069, 1069, 1069, 1069, 677, 678, 1301, 695, 696, 697, 1006, 1301, 1301, 1301, 1301, 450, 909, 1301, 436, 896, 1301, 1301, 1382, 1382, 1382, 1382, 915, 581, 574, 499, 612, 450, 367, 971, 971, 955, 501, 1076, 1076, 956, 1400, 1400, 367, 367, 688, 1087, 1083, 1084, 572, 411, 414, 623, 627, 572, 572, 367, 367, 1400, 357, 367, 572, 1417, 1377, 1378, 317, 574, 581, 607, 608, 318, 618, 624, 1390, 640, 641, 1027, 576, 1403, 1403, 367, 367, 28, 474, 520, 442, 521, 635, 1000, 1000, 1000, 1000, 527, 409, 474, 1348, 1348, 994, 1001, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 1348, 633, 647, 650, 651, 652, 653, 674, 675, 676, 730, 732, 561, 561, 258, 258, 561, 561, 561, 561, 561, 561, 561, 561, 561, 561, 610, 1362, 467, 683, 467, 876, 616, 638, 876, 467, 467, 1191, 861, 1373, 360, 361, 1093, 456, 1373, 1373, 560, 560, 705, 432, 560, 1373, 560, 560, 560, 560, 560, 560, 560, 560, 1277, 975, 575, 602, 575, 1278, 1281, 976, 575, 1282, 602, 689, 412, 480, 1384, 1384, 1384, 1384, 347, 873, 716, 576, 861, 876, 861, 490, 619, 491, 492, 639, 8, 857, 9, 902, 907, 989, 716, 1408, 1409, 716, 1369, 418, 1296, 278, 899, 330, 1174, 424, 425, 1292, 330, 330, 693, 1049, 694, 1114, 429, 430, 431, 761, 707, 1060, 905, 433, 1102, 1104, 1107, 355, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 467, 419, 339, 467, 911, 467, 467, 1294, 628, 629, 1116, 497, 960, 1181, 621, 1144, 1371, 1371, 1116, 1118, 1297, 1298, 1011, 1284, 1046, 1151, 1179, 1152, 731, 871, 528, 722, 901, 1142, 687, 1025, 1284, 496, 1375, 1376, 895, 910, 898, 1113, 1117, 998, 427, 727, 1165, 1299, 1359, 1360, 1291, 1030, 386, 1009, 1002, 0, 757, 0, 0, 573, 1039, 1034, 654, 656, 658, 0, 0, 0, 0, 0, 0, 0, 0, 876, 0, 0, 999, 0, 766, 766, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1163, 914 ); protected array $gotoCheck = array( 42, 42, 42, 42, 42, 73, 127, 73, 66, 66, 56, 56, 66, 66, 66, 66, 66, 66, 66, 66, 66, 66, 159, 9, 107, 107, 107, 107, 159, 107, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 23, 23, 23, 23, 15, 5, 5, 5, 5, 5, 15, 48, 157, 157, 134, 48, 48, 48, 131, 97, 48, 157, 119, 119, 48, 48, 48, 48, 48, 48, 48, 25, 25, 25, 25, 5, 5, 5, 5, 5, 5, 108, 108, 120, 120, 108, 108, 108, 108, 108, 108, 108, 108, 108, 108, 26, 177, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 83, 15, 15, 83, 107, 107, 15, 24, 24, 24, 24, 177, 177, 76, 15, 15, 15, 179, 179, 178, 178, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 73, 73, 89, 89, 89, 89, 73, 73, 89, 89, 89, 73, 65, 73, 65, 83, 73, 27, 73, 73, 73, 73, 73, 73, 73, 73, 73, 35, 6, 73, 73, 73, 73, 86, 86, 73, 86, 86, 86, 49, 73, 73, 73, 73, 118, 35, 73, 43, 35, 73, 73, 9, 9, 9, 9, 45, 76, 76, 84, 181, 118, 14, 9, 9, 73, 84, 118, 118, 73, 191, 191, 14, 14, 118, 118, 118, 118, 19, 59, 59, 59, 59, 19, 19, 14, 14, 191, 188, 14, 19, 14, 187, 187, 76, 76, 76, 76, 76, 76, 76, 76, 190, 76, 76, 103, 14, 191, 191, 14, 14, 76, 19, 163, 13, 163, 13, 19, 19, 19, 19, 163, 62, 19, 180, 180, 19, 19, 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 81, 182, 182, 5, 5, 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 104, 14, 23, 64, 23, 22, 2, 2, 22, 23, 23, 158, 12, 134, 97, 97, 115, 113, 134, 134, 165, 165, 117, 14, 165, 134, 165, 165, 165, 165, 165, 165, 165, 165, 79, 79, 9, 9, 9, 79, 79, 79, 9, 79, 9, 121, 9, 9, 134, 134, 134, 134, 29, 18, 7, 14, 12, 22, 12, 9, 9, 9, 9, 80, 46, 7, 46, 39, 9, 92, 7, 9, 9, 7, 134, 28, 20, 24, 37, 24, 156, 82, 82, 169, 24, 24, 82, 110, 82, 133, 82, 82, 82, 99, 82, 114, 9, 82, 130, 130, 130, 82, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 31, 9, 23, 41, 23, 23, 14, 17, 17, 134, 160, 17, 17, 8, 8, 134, 134, 134, 136, 20, 20, 96, 20, 17, 149, 149, 149, 8, 20, 8, 8, 17, 8, 17, 17, 20, 185, 185, 185, 17, 16, 16, 16, 16, 93, 93, 93, 152, 20, 20, 20, 17, 50, 141, 16, 50, -1, 50, -1, -1, 50, 50, 50, 85, 85, 85, -1, -1, -1, -1, -1, -1, -1, -1, 22, -1, -1, 16, -1, 24, 24, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 16, 16 ); protected array $gotoBase = array( 0, 0, -303, 0, 0, 170, 280, 471, 543, 10, 0, 0, 136, 31, 22, -186, 111, 66, 164, 71, 95, 0, 148, 160, 235, 191, 214, 275, 155, 176, 0, 86, 0, 0, 0, -92, 0, 156, 0, 165, 0, 85, -1, 286, 0, 291, -270, 0, -558, 284, 579, 0, 0, 0, 0, 0, -33, 0, 0, 294, 0, 0, 341, 0, 184, 261, -237, 0, 0, 0, 0, 0, 0, -5, 0, 0, -32, 0, 0, 37, 172, 32, -3, -50, -167, 105, -444, 0, 0, -21, 0, 0, 161, 274, 0, 0, 101, -318, 0, 97, 0, 0, 0, 331, 381, 0, 0, -7, -38, 0, 131, 0, 0, 158, 90, 162, 0, 159, 39, -100, -83, 173, 0, 0, 0, 0, 0, 4, 0, 0, 522, 182, 0, 127, 169, 0, 99, 0, 0, 0, 0, -171, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 126, 0, 0, 0, 144, 141, 188, -255, 93, 0, 0, -138, 0, 202, 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, 0, -82, -74, 6, 143, 292, 168, 0, 0, 270, 0, -31, 319, 0, 332, 20, 0, 0 ); protected array $gotoDefault = array( -32768, 533, 768, 7, 769, 964, 844, 853, 597, 551, 729, 356, 648, 439, 1367, 940, 1180, 617, 872, 1310, 1316, 475, 875, 336, 755, 952, 923, 924, 415, 402, 888, 413, 672, 649, 514, 908, 471, 900, 506, 903, 470, 912, 167, 435, 530, 916, 6, 919, 579, 950, 1004, 403, 927, 404, 700, 929, 601, 931, 932, 410, 416, 417, 1185, 609, 645, 944, 261, 603, 945, 401, 946, 954, 406, 408, 710, 486, 525, 519, 428, 1146, 604, 632, 669, 464, 493, 643, 655, 642, 500, 451, 434, 335, 988, 996, 507, 484, 1010, 358, 1018, 763, 1193, 663, 509, 1026, 664, 1033, 1036, 552, 553, 498, 1048, 270, 1051, 510, 1061, 26, 690, 1066, 1067, 691, 665, 1089, 666, 692, 667, 1091, 483, 599, 1194, 482, 1106, 1112, 472, 1115, 1356, 473, 1119, 269, 1122, 286, 362, 385, 452, 1129, 1130, 12, 1136, 720, 721, 25, 280, 529, 1164, 711, 1170, 279, 1173, 469, 1192, 468, 1265, 1267, 580, 511, 1285, 321, 1288, 703, 526, 1293, 465, 1358, 466, 554, 494, 343, 555, 1401, 314, 365, 340, 571, 322, 366, 556, 495, 1364, 1372, 337, 34, 1391, 1402, 614, 637 ); protected array $ruleToNonTerminal = array( 0, 1, 3, 3, 2, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8, 9, 10, 11, 11, 11, 12, 12, 13, 13, 14, 15, 15, 16, 16, 17, 17, 18, 18, 21, 21, 22, 23, 23, 24, 24, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 29, 29, 30, 30, 32, 34, 34, 28, 36, 36, 33, 38, 38, 35, 35, 37, 37, 39, 39, 31, 40, 40, 41, 43, 44, 44, 45, 45, 46, 46, 48, 47, 47, 47, 47, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 49, 25, 25, 50, 69, 69, 72, 72, 71, 70, 70, 63, 75, 75, 76, 76, 77, 77, 78, 78, 79, 79, 80, 80, 80, 80, 26, 26, 27, 27, 27, 27, 27, 88, 88, 90, 90, 83, 83, 91, 91, 92, 92, 92, 84, 84, 87, 87, 85, 85, 93, 94, 94, 57, 57, 65, 65, 68, 68, 68, 67, 95, 95, 96, 58, 58, 58, 58, 97, 97, 98, 98, 99, 99, 100, 101, 101, 102, 102, 103, 103, 55, 55, 51, 51, 105, 53, 53, 106, 52, 52, 54, 54, 64, 64, 64, 64, 81, 81, 109, 109, 111, 111, 112, 112, 112, 112, 112, 112, 112, 112, 110, 110, 110, 115, 115, 115, 115, 89, 89, 118, 118, 118, 119, 119, 116, 116, 120, 120, 122, 122, 123, 123, 117, 124, 124, 121, 125, 125, 125, 125, 113, 113, 82, 82, 82, 20, 20, 20, 128, 128, 128, 128, 129, 129, 129, 127, 126, 126, 131, 131, 131, 130, 130, 60, 132, 132, 133, 61, 135, 135, 136, 136, 137, 137, 86, 138, 138, 138, 138, 138, 138, 138, 138, 144, 144, 145, 145, 146, 146, 146, 146, 146, 147, 148, 148, 143, 143, 139, 139, 142, 142, 150, 150, 149, 149, 149, 149, 149, 149, 149, 149, 149, 149, 140, 151, 151, 153, 152, 152, 141, 141, 114, 114, 154, 154, 156, 156, 156, 155, 155, 62, 104, 157, 157, 56, 56, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 164, 165, 165, 166, 158, 158, 163, 163, 167, 168, 168, 169, 170, 171, 171, 171, 171, 19, 19, 73, 73, 73, 73, 159, 159, 159, 159, 173, 173, 162, 162, 162, 160, 160, 179, 179, 179, 179, 179, 179, 179, 179, 179, 179, 180, 180, 180, 108, 182, 182, 182, 182, 161, 161, 161, 161, 161, 161, 161, 161, 59, 59, 176, 176, 176, 176, 176, 183, 183, 172, 172, 172, 172, 184, 184, 184, 184, 184, 74, 74, 66, 66, 66, 66, 134, 134, 134, 134, 187, 186, 175, 175, 175, 175, 175, 175, 174, 174, 174, 185, 185, 185, 185, 107, 181, 189, 189, 188, 188, 190, 190, 190, 190, 190, 190, 190, 190, 178, 178, 178, 178, 177, 192, 191, 191, 191, 191, 191, 191, 191, 191, 193, 193, 193, 193 ); protected array $ruleToLength = array( 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 2, 1, 3, 4, 1, 2, 0, 1, 1, 1, 1, 4, 3, 5, 4, 3, 4, 1, 3, 4, 1, 1, 8, 7, 2, 3, 1, 2, 3, 1, 2, 3, 1, 1, 3, 1, 3, 1, 2, 2, 3, 1, 3, 2, 3, 1, 3, 3, 2, 0, 1, 1, 1, 1, 1, 3, 7, 10, 5, 7, 9, 5, 3, 3, 3, 3, 3, 3, 1, 2, 5, 7, 9, 6, 5, 6, 3, 2, 1, 1, 1, 1, 0, 2, 1, 3, 8, 0, 4, 2, 1, 3, 0, 1, 0, 1, 0, 1, 3, 1, 1, 1, 1, 1, 8, 9, 7, 8, 7, 6, 8, 0, 2, 0, 2, 1, 2, 1, 2, 1, 1, 1, 0, 2, 0, 2, 0, 2, 2, 1, 3, 1, 4, 1, 4, 1, 1, 4, 2, 1, 3, 3, 3, 4, 4, 5, 0, 2, 4, 3, 1, 1, 7, 0, 2, 1, 3, 3, 4, 1, 4, 0, 2, 5, 0, 2, 6, 0, 2, 0, 3, 1, 2, 1, 1, 2, 0, 1, 3, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 7, 9, 6, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 3, 3, 3, 3, 3, 1, 3, 3, 1, 1, 2, 1, 1, 0, 1, 0, 2, 2, 2, 4, 3, 2, 4, 4, 3, 3, 1, 3, 1, 1, 3, 2, 2, 3, 1, 1, 2, 3, 1, 1, 2, 3, 1, 1, 3, 2, 0, 1, 5, 7, 5, 6, 10, 3, 5, 1, 1, 3, 0, 2, 4, 5, 4, 4, 4, 3, 1, 1, 1, 1, 1, 1, 0, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 1, 1, 3, 0, 2, 0, 3, 5, 8, 1, 3, 3, 0, 2, 2, 2, 3, 1, 0, 1, 1, 3, 3, 3, 4, 4, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 3, 4, 4, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 3, 2, 1, 2, 4, 2, 2, 8, 9, 8, 9, 9, 10, 9, 10, 8, 3, 2, 2, 1, 1, 0, 4, 2, 1, 3, 2, 1, 2, 2, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 5, 3, 3, 4, 1, 1, 3, 1, 1, 1, 1, 1, 3, 2, 3, 0, 1, 1, 3, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 4, 1, 4, 4, 0, 1, 1, 1, 3, 3, 1, 4, 2, 2, 1, 3, 1, 4, 3, 3, 3, 3, 1, 3, 1, 1, 3, 1, 1, 4, 1, 1, 1, 3, 1, 1, 2, 1, 3, 4, 3, 2, 0, 2, 2, 1, 2, 1, 1, 1, 4, 3, 3, 3, 3, 6, 3, 1, 1, 2, 1 ); protected function initReduceCallbacks(): void { $this->reduceCallbacks = [ 0 => null, 1 => static function ($self, $stackPos) { $self->semValue = $self->handleNamespaces($self->semStack[$stackPos-(1-1)]); }, 2 => static function ($self, $stackPos) { if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; }, 3 => static function ($self, $stackPos) { $self->semValue = array(); }, 4 => static function ($self, $stackPos) { $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 5 => null, 6 => null, 7 => null, 8 => null, 9 => null, 10 => null, 11 => null, 12 => null, 13 => null, 14 => null, 15 => null, 16 => null, 17 => null, 18 => null, 19 => null, 20 => null, 21 => null, 22 => null, 23 => null, 24 => null, 25 => null, 26 => null, 27 => null, 28 => null, 29 => null, 30 => null, 31 => null, 32 => null, 33 => null, 34 => null, 35 => null, 36 => null, 37 => null, 38 => null, 39 => null, 40 => null, 41 => null, 42 => null, 43 => null, 44 => null, 45 => null, 46 => null, 47 => null, 48 => null, 49 => null, 50 => null, 51 => null, 52 => null, 53 => null, 54 => null, 55 => null, 56 => null, 57 => null, 58 => null, 59 => null, 60 => null, 61 => null, 62 => null, 63 => null, 64 => null, 65 => null, 66 => null, 67 => null, 68 => null, 69 => null, 70 => null, 71 => null, 72 => null, 73 => null, 74 => null, 75 => null, 76 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; if ($self->semValue === "emitError(new Error('Cannot use "getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); }, 77 => null, 78 => null, 79 => null, 80 => null, 81 => null, 82 => null, 83 => null, 84 => null, 85 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 86 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 87 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 88 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 89 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 90 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 91 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 92 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 93 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 94 => null, 95 => static function ($self, $stackPos) { $self->semValue = new Name(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 96 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 97 => static function ($self, $stackPos) { /* nothing */ }, 98 => static function ($self, $stackPos) { /* nothing */ }, 99 => static function ($self, $stackPos) { /* nothing */ }, 100 => static function ($self, $stackPos) { $self->emitError(new Error('A trailing comma is not allowed here', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]))); }, 101 => null, 102 => null, 103 => static function ($self, $stackPos) { $self->semValue = new Node\Attribute($self->semStack[$stackPos-(1-1)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 104 => static function ($self, $stackPos) { $self->semValue = new Node\Attribute($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 105 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 106 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 107 => static function ($self, $stackPos) { $self->semValue = new Node\AttributeGroup($self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 108 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 109 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 110 => static function ($self, $stackPos) { $self->semValue = []; }, 111 => null, 112 => null, 113 => null, 114 => null, 115 => static function ($self, $stackPos) { $self->semValue = new Stmt\HaltCompiler($self->handleHaltCompiler(), $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 116 => static function ($self, $stackPos) { $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(3-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_SEMICOLON); $self->checkNamespace($self->semValue); }, 117 => static function ($self, $stackPos) { $self->semValue = new Stmt\Namespace_($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $self->checkNamespace($self->semValue); }, 118 => static function ($self, $stackPos) { $self->semValue = new Stmt\Namespace_(null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Stmt\Namespace_::KIND_BRACED); $self->checkNamespace($self->semValue); }, 119 => static function ($self, $stackPos) { $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(3-2)], Stmt\Use_::TYPE_NORMAL, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 120 => static function ($self, $stackPos) { $self->semValue = new Stmt\Use_($self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 121 => null, 122 => static function ($self, $stackPos) { $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), []); }, 123 => static function ($self, $stackPos) { $self->semValue = new Stmt\Const_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(4-1)]); $self->checkConstantAttributes($self->semValue); }, 124 => static function ($self, $stackPos) { $self->semValue = Stmt\Use_::TYPE_FUNCTION; }, 125 => static function ($self, $stackPos) { $self->semValue = Stmt\Use_::TYPE_CONSTANT; }, 126 => static function ($self, $stackPos) { $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-6)], $self->semStack[$stackPos-(8-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); }, 127 => static function ($self, $stackPos) { $self->semValue = new Stmt\GroupUse($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-5)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); }, 128 => null, 129 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 130 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 131 => null, 132 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 133 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 134 => null, 135 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 136 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 137 => static function ($self, $stackPos) { $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); }, 138 => static function ($self, $stackPos) { $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); }, 139 => static function ($self, $stackPos) { $self->semValue = new Node\UseItem($self->semStack[$stackPos-(1-1)], null, Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(1-1)); }, 140 => static function ($self, $stackPos) { $self->semValue = new Node\UseItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], Stmt\Use_::TYPE_UNKNOWN, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkUseUse($self->semValue, $stackPos-(3-3)); }, 141 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->semValue->type = Stmt\Use_::TYPE_NORMAL; }, 142 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; $self->semValue->type = $self->semStack[$stackPos-(2-1)]; }, 143 => null, 144 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 145 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 146 => static function ($self, $stackPos) { $self->semValue = new Node\Const_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 147 => null, 148 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 149 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 150 => static function ($self, $stackPos) { $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 151 => static function ($self, $stackPos) { $self->semValue = new Node\Const_(new Node\Identifier($self->semStack[$stackPos-(3-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 152 => static function ($self, $stackPos) { if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; } $self->semValue = $self->semStack[$stackPos-(2-1)];; }, 153 => static function ($self, $stackPos) { $self->semValue = array(); }, 154 => static function ($self, $stackPos) { $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 155 => null, 156 => null, 157 => null, 158 => static function ($self, $stackPos) { throw new Error('__HALT_COMPILER() can only be used from the outermost scope', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 159 => static function ($self, $stackPos) { $self->semValue = new Stmt\Block($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 160 => static function ($self, $stackPos) { $self->semValue = new Stmt\If_($self->semStack[$stackPos-(7-3)], ['stmts' => $self->semStack[$stackPos-(7-5)], 'elseifs' => $self->semStack[$stackPos-(7-6)], 'else' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); }, 161 => static function ($self, $stackPos) { $self->semValue = new Stmt\If_($self->semStack[$stackPos-(10-3)], ['stmts' => $self->semStack[$stackPos-(10-6)], 'elseifs' => $self->semStack[$stackPos-(10-7)], 'else' => $self->semStack[$stackPos-(10-8)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); }, 162 => static function ($self, $stackPos) { $self->semValue = new Stmt\While_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 163 => static function ($self, $stackPos) { $self->semValue = new Stmt\Do_($self->semStack[$stackPos-(7-5)], $self->semStack[$stackPos-(7-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); }, 164 => static function ($self, $stackPos) { $self->semValue = new Stmt\For_(['init' => $self->semStack[$stackPos-(9-3)], 'cond' => $self->semStack[$stackPos-(9-5)], 'loop' => $self->semStack[$stackPos-(9-7)], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 165 => static function ($self, $stackPos) { $self->semValue = new Stmt\Switch_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 166 => static function ($self, $stackPos) { $self->semValue = new Stmt\Break_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 167 => static function ($self, $stackPos) { $self->semValue = new Stmt\Continue_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 168 => static function ($self, $stackPos) { $self->semValue = new Stmt\Return_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 169 => static function ($self, $stackPos) { $self->semValue = new Stmt\Global_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 170 => static function ($self, $stackPos) { $self->semValue = new Stmt\Static_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 171 => static function ($self, $stackPos) { $self->semValue = new Stmt\Echo_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 172 => static function ($self, $stackPos) { $self->semValue = new Stmt\InlineHTML($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('hasLeadingNewline', $self->inlineHtmlHasLeadingNewline($stackPos-(1-1))); }, 173 => static function ($self, $stackPos) { $self->semValue = new Stmt\Expression($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 174 => static function ($self, $stackPos) { $self->semValue = new Stmt\Unset_($self->semStack[$stackPos-(5-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 175 => static function ($self, $stackPos) { $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-5)][0], ['keyVar' => null, 'byRef' => $self->semStack[$stackPos-(7-5)][1], 'stmts' => $self->semStack[$stackPos-(7-7)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); }, 176 => static function ($self, $stackPos) { $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-7)][0], ['keyVar' => $self->semStack[$stackPos-(9-5)], 'byRef' => $self->semStack[$stackPos-(9-7)][1], 'stmts' => $self->semStack[$stackPos-(9-9)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 177 => static function ($self, $stackPos) { $self->semValue = new Stmt\Foreach_($self->semStack[$stackPos-(6-3)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-4)], $self->tokenEndStack[$stackPos-(6-4)])), ['stmts' => $self->semStack[$stackPos-(6-6)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); }, 178 => static function ($self, $stackPos) { $self->semValue = new Stmt\Declare_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 179 => static function ($self, $stackPos) { $self->semValue = new Stmt\TryCatch($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->checkTryCatch($self->semValue); }, 180 => static function ($self, $stackPos) { $self->semValue = new Stmt\Goto_($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 181 => static function ($self, $stackPos) { $self->semValue = new Stmt\Label($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 182 => static function ($self, $stackPos) { $self->semValue = null; /* means: no statement */ }, 183 => null, 184 => static function ($self, $stackPos) { $self->semValue = $self->maybeCreateNop($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); }, 185 => static function ($self, $stackPos) { if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; }, 186 => static function ($self, $stackPos) { $self->semValue = array(); }, 187 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 188 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 189 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 190 => static function ($self, $stackPos) { $self->semValue = new Stmt\Catch_($self->semStack[$stackPos-(8-3)], $self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-7)], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); }, 191 => static function ($self, $stackPos) { $self->semValue = null; }, 192 => static function ($self, $stackPos) { $self->semValue = new Stmt\Finally_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 193 => null, 194 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 195 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 196 => static function ($self, $stackPos) { $self->semValue = false; }, 197 => static function ($self, $stackPos) { $self->semValue = true; }, 198 => static function ($self, $stackPos) { $self->semValue = false; }, 199 => static function ($self, $stackPos) { $self->semValue = true; }, 200 => static function ($self, $stackPos) { $self->semValue = false; }, 201 => static function ($self, $stackPos) { $self->semValue = true; }, 202 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 203 => static function ($self, $stackPos) { $self->semValue = []; }, 204 => null, 205 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 206 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 207 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 208 => static function ($self, $stackPos) { $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(8-3)], ['byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-5)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); }, 209 => static function ($self, $stackPos) { $self->semValue = new Stmt\Function_($self->semStack[$stackPos-(9-4)], ['byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-6)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 210 => static function ($self, $stackPos) { $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(7-2)], ['type' => $self->semStack[$stackPos-(7-1)], 'extends' => $self->semStack[$stackPos-(7-3)], 'implements' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); $self->checkClass($self->semValue, $stackPos-(7-2)); }, 211 => static function ($self, $stackPos) { $self->semValue = new Stmt\Class_($self->semStack[$stackPos-(8-3)], ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); $self->checkClass($self->semValue, $stackPos-(8-3)); }, 212 => static function ($self, $stackPos) { $self->semValue = new Stmt\Interface_($self->semStack[$stackPos-(7-3)], ['extends' => $self->semStack[$stackPos-(7-4)], 'stmts' => $self->semStack[$stackPos-(7-6)], 'attrGroups' => $self->semStack[$stackPos-(7-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); $self->checkInterface($self->semValue, $stackPos-(7-3)); }, 213 => static function ($self, $stackPos) { $self->semValue = new Stmt\Trait_($self->semStack[$stackPos-(6-3)], ['stmts' => $self->semStack[$stackPos-(6-5)], 'attrGroups' => $self->semStack[$stackPos-(6-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); }, 214 => static function ($self, $stackPos) { $self->semValue = new Stmt\Enum_($self->semStack[$stackPos-(8-3)], ['scalarType' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); $self->checkEnum($self->semValue, $stackPos-(8-3)); }, 215 => static function ($self, $stackPos) { $self->semValue = null; }, 216 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 217 => static function ($self, $stackPos) { $self->semValue = null; }, 218 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 219 => static function ($self, $stackPos) { $self->semValue = 0; }, 220 => null, 221 => null, 222 => static function ($self, $stackPos) { $self->checkClassModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; }, 223 => static function ($self, $stackPos) { $self->semValue = Modifiers::ABSTRACT; }, 224 => static function ($self, $stackPos) { $self->semValue = Modifiers::FINAL; }, 225 => static function ($self, $stackPos) { $self->semValue = Modifiers::READONLY; }, 226 => static function ($self, $stackPos) { $self->semValue = null; }, 227 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 228 => static function ($self, $stackPos) { $self->semValue = array(); }, 229 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 230 => static function ($self, $stackPos) { $self->semValue = array(); }, 231 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 232 => null, 233 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 234 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 235 => null, 236 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 237 => null, 238 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 239 => static function ($self, $stackPos) { if ($self->semStack[$stackPos-(1-1)] instanceof Stmt\Block) { $self->semValue = $self->semStack[$stackPos-(1-1)]->stmts; } else if ($self->semStack[$stackPos-(1-1)] === null) { $self->semValue = []; } else { $self->semValue = [$self->semStack[$stackPos-(1-1)]]; }; }, 240 => static function ($self, $stackPos) { $self->semValue = null; }, 241 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 242 => null, 243 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 244 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 245 => static function ($self, $stackPos) { $self->semValue = new Node\DeclareItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 246 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 247 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-3)]; }, 248 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 249 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(5-3)]; }, 250 => static function ($self, $stackPos) { $self->semValue = array(); }, 251 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 252 => static function ($self, $stackPos) { $self->semValue = new Stmt\Case_($self->semStack[$stackPos-(4-2)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 253 => static function ($self, $stackPos) { $self->semValue = new Stmt\Case_(null, $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 254 => null, 255 => null, 256 => static function ($self, $stackPos) { $self->semValue = new Expr\Match_($self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos])); }, 257 => static function ($self, $stackPos) { $self->semValue = []; }, 258 => null, 259 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 260 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 261 => static function ($self, $stackPos) { $self->semValue = new Node\MatchArm($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 262 => static function ($self, $stackPos) { $self->semValue = new Node\MatchArm(null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 263 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 264 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 265 => static function ($self, $stackPos) { $self->semValue = array(); }, 266 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 267 => static function ($self, $stackPos) { $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 268 => static function ($self, $stackPos) { $self->semValue = array(); }, 269 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 270 => static function ($self, $stackPos) { $self->semValue = new Stmt\ElseIf_($self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-6)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); }, 271 => static function ($self, $stackPos) { $self->semValue = null; }, 272 => static function ($self, $stackPos) { $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 273 => static function ($self, $stackPos) { $self->semValue = null; }, 274 => static function ($self, $stackPos) { $self->semValue = new Stmt\Else_($self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->fixupAlternativeElse($self->semValue); }, 275 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)], false); }, 276 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(2-2)], true); }, 277 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)], false); }, 278 => static function ($self, $stackPos) { $self->semValue = array($self->fixupArrayDestructuring($self->semStack[$stackPos-(1-1)]), false); }, 279 => null, 280 => static function ($self, $stackPos) { $self->semValue = array(); }, 281 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 282 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 283 => static function ($self, $stackPos) { $self->semValue = 0; }, 284 => static function ($self, $stackPos) { $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; }, 285 => static function ($self, $stackPos) { $self->semValue = Modifiers::PUBLIC; }, 286 => static function ($self, $stackPos) { $self->semValue = Modifiers::PROTECTED; }, 287 => static function ($self, $stackPos) { $self->semValue = Modifiers::PRIVATE; }, 288 => static function ($self, $stackPos) { $self->semValue = Modifiers::PUBLIC_SET; }, 289 => static function ($self, $stackPos) { $self->semValue = Modifiers::PROTECTED_SET; }, 290 => static function ($self, $stackPos) { $self->semValue = Modifiers::PRIVATE_SET; }, 291 => static function ($self, $stackPos) { $self->semValue = Modifiers::READONLY; }, 292 => static function ($self, $stackPos) { $self->semValue = Modifiers::FINAL; }, 293 => static function ($self, $stackPos) { $self->semValue = new Node\Param($self->semStack[$stackPos-(7-6)], null, $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-4)], $self->semStack[$stackPos-(7-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-7)]); $self->checkParam($self->semValue); $self->addPropertyNameToHooks($self->semValue); }, 294 => static function ($self, $stackPos) { $self->semValue = new Node\Param($self->semStack[$stackPos-(9-6)], $self->semStack[$stackPos-(9-8)], $self->semStack[$stackPos-(9-3)], $self->semStack[$stackPos-(9-4)], $self->semStack[$stackPos-(9-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(9-2)], $self->semStack[$stackPos-(9-1)], $self->semStack[$stackPos-(9-9)]); $self->checkParam($self->semValue); $self->addPropertyNameToHooks($self->semValue); }, 295 => static function ($self, $stackPos) { $self->semValue = new Node\Param(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])), null, $self->semStack[$stackPos-(6-3)], $self->semStack[$stackPos-(6-4)], $self->semStack[$stackPos-(6-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-1)]); }, 296 => null, 297 => static function ($self, $stackPos) { $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 298 => static function ($self, $stackPos) { $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 299 => null, 300 => null, 301 => static function ($self, $stackPos) { $self->semValue = new Node\Name('static', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 302 => static function ($self, $stackPos) { $self->semValue = $self->handleBuiltinTypes($self->semStack[$stackPos-(1-1)]); }, 303 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier('array', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 304 => static function ($self, $stackPos) { $self->semValue = new Node\Identifier('callable', $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 305 => null, 306 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 307 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); }, 308 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 309 => null, 310 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 311 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); }, 312 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 313 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); }, 314 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 315 => static function ($self, $stackPos) { $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 316 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); }, 317 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 318 => static function ($self, $stackPos) { $self->semValue = new Node\IntersectionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 319 => null, 320 => static function ($self, $stackPos) { $self->semValue = new Node\NullableType($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 321 => static function ($self, $stackPos) { $self->semValue = new Node\UnionType($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 322 => null, 323 => static function ($self, $stackPos) { $self->semValue = null; }, 324 => null, 325 => static function ($self, $stackPos) { $self->semValue = null; }, 326 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(2-2)]; }, 327 => static function ($self, $stackPos) { $self->semValue = null; }, 328 => static function ($self, $stackPos) { $self->semValue = array(); }, 329 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 330 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-2)]); }, 331 => static function ($self, $stackPos) { $self->semValue = array(); }, 332 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-2)]; }, 333 => static function ($self, $stackPos) { $self->semValue = array(new Node\Arg($self->semStack[$stackPos-(4-2)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]))); }, 334 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-2)]); }, 335 => static function ($self, $stackPos) { $self->semValue = array(new Node\Arg($self->semStack[$stackPos-(3-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos-(3-1)])), $self->semStack[$stackPos-(3-3)]); }, 336 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 337 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 338 => static function ($self, $stackPos) { $self->semValue = new Node\VariadicPlaceholder($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 339 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 340 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 341 => static function ($self, $stackPos) { $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], true, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 342 => static function ($self, $stackPos) { $self->semValue = new Node\Arg($self->semStack[$stackPos-(2-2)], false, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 343 => static function ($self, $stackPos) { $self->semValue = new Node\Arg($self->semStack[$stackPos-(3-3)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(3-1)]); }, 344 => static function ($self, $stackPos) { $self->semValue = new Node\Arg($self->semStack[$stackPos-(1-1)], false, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 345 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 346 => null, 347 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 348 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 349 => null, 350 => null, 351 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 352 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 353 => static function ($self, $stackPos) { $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 354 => static function ($self, $stackPos) { $self->semValue = new Node\StaticVar($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 355 => static function ($self, $stackPos) { if ($self->semStack[$stackPos-(2-2)] !== null) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; } else { $self->semValue = $self->semStack[$stackPos-(2-1)]; } }, 356 => static function ($self, $stackPos) { $self->semValue = array(); }, 357 => static function ($self, $stackPos) { $nop = $self->maybeCreateZeroLengthNop($self->tokenPos);; if ($nop !== null) { $self->semStack[$stackPos-(1-1)][] = $nop; } $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 358 => static function ($self, $stackPos) { $self->semValue = new Stmt\Property($self->semStack[$stackPos-(5-2)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-1)]); }, 359 => static function ($self, $stackPos) { $self->semValue = new Stmt\Property($self->semStack[$stackPos-(7-2)], $self->semStack[$stackPos-(7-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(7-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(7-3)], $self->semStack[$stackPos-(7-1)], $self->semStack[$stackPos-(7-6)]); $self->checkPropertyHooksForMultiProperty($self->semValue, $stackPos-(7-5)); $self->checkEmptyPropertyHookList($self->semStack[$stackPos-(7-6)], $stackPos-(7-5)); $self->addPropertyNameToHooks($self->semValue); }, 360 => static function ($self, $stackPos) { $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(5-1)]); $self->checkClassConst($self->semValue, $stackPos-(5-2)); }, 361 => static function ($self, $stackPos) { $self->semValue = new Stmt\ClassConst($self->semStack[$stackPos-(6-5)], $self->semStack[$stackPos-(6-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos]), $self->semStack[$stackPos-(6-1)], $self->semStack[$stackPos-(6-4)]); $self->checkClassConst($self->semValue, $stackPos-(6-2)); }, 362 => static function ($self, $stackPos) { $self->semValue = new Stmt\ClassMethod($self->semStack[$stackPos-(10-5)], ['type' => $self->semStack[$stackPos-(10-2)], 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-7)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); $self->checkClassMethod($self->semValue, $stackPos-(10-2)); }, 363 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUse($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 364 => static function ($self, $stackPos) { $self->semValue = new Stmt\EnumCase($self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 365 => static function ($self, $stackPos) { $self->semValue = null; /* will be skipped */ }, 366 => static function ($self, $stackPos) { $self->semValue = array(); }, 367 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 368 => static function ($self, $stackPos) { $self->semValue = array(); }, 369 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 370 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUseAdaptation\Precedence($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 371 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(5-1)][0], $self->semStack[$stackPos-(5-1)][1], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 372 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], $self->semStack[$stackPos-(4-3)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 373 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 374 => static function ($self, $stackPos) { $self->semValue = new Stmt\TraitUseAdaptation\Alias($self->semStack[$stackPos-(4-1)][0], $self->semStack[$stackPos-(4-1)][1], null, $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 375 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)]); }, 376 => null, 377 => static function ($self, $stackPos) { $self->semValue = array(null, $self->semStack[$stackPos-(1-1)]); }, 378 => static function ($self, $stackPos) { $self->semValue = null; }, 379 => null, 380 => null, 381 => static function ($self, $stackPos) { $self->semValue = 0; }, 382 => static function ($self, $stackPos) { $self->semValue = 0; }, 383 => null, 384 => null, 385 => static function ($self, $stackPos) { $self->checkModifier($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; }, 386 => static function ($self, $stackPos) { $self->semValue = Modifiers::PUBLIC; }, 387 => static function ($self, $stackPos) { $self->semValue = Modifiers::PROTECTED; }, 388 => static function ($self, $stackPos) { $self->semValue = Modifiers::PRIVATE; }, 389 => static function ($self, $stackPos) { $self->semValue = Modifiers::PUBLIC_SET; }, 390 => static function ($self, $stackPos) { $self->semValue = Modifiers::PROTECTED_SET; }, 391 => static function ($self, $stackPos) { $self->semValue = Modifiers::PRIVATE_SET; }, 392 => static function ($self, $stackPos) { $self->semValue = Modifiers::STATIC; }, 393 => static function ($self, $stackPos) { $self->semValue = Modifiers::ABSTRACT; }, 394 => static function ($self, $stackPos) { $self->semValue = Modifiers::FINAL; }, 395 => static function ($self, $stackPos) { $self->semValue = Modifiers::READONLY; }, 396 => null, 397 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 398 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 399 => static function ($self, $stackPos) { $self->semValue = new Node\VarLikeIdentifier(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 400 => static function ($self, $stackPos) { $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(1-1)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 401 => static function ($self, $stackPos) { $self->semValue = new Node\PropertyItem($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 402 => static function ($self, $stackPos) { $self->semValue = []; }, 403 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 404 => static function ($self, $stackPos) { $self->semValue = []; }, 405 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; $self->checkEmptyPropertyHookList($self->semStack[$stackPos-(3-2)], $stackPos-(3-1)); }, 406 => static function ($self, $stackPos) { $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(5-4)], $self->semStack[$stackPos-(5-5)], ['flags' => $self->semStack[$stackPos-(5-2)], 'byRef' => $self->semStack[$stackPos-(5-3)], 'params' => [], 'attrGroups' => $self->semStack[$stackPos-(5-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); $self->checkPropertyHook($self->semValue, null); }, 407 => static function ($self, $stackPos) { $self->semValue = new Node\PropertyHook($self->semStack[$stackPos-(8-4)], $self->semStack[$stackPos-(8-8)], ['flags' => $self->semStack[$stackPos-(8-2)], 'byRef' => $self->semStack[$stackPos-(8-3)], 'params' => $self->semStack[$stackPos-(8-6)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); $self->checkPropertyHook($self->semValue, $stackPos-(8-5)); }, 408 => static function ($self, $stackPos) { $self->semValue = null; }, 409 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 410 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 411 => static function ($self, $stackPos) { $self->semValue = 0; }, 412 => static function ($self, $stackPos) { $self->checkPropertyHookModifiers($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $stackPos-(2-2)); $self->semValue = $self->semStack[$stackPos-(2-1)] | $self->semStack[$stackPos-(2-2)]; }, 413 => null, 414 => null, 415 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 416 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 417 => static function ($self, $stackPos) { $self->semValue = array(); }, 418 => null, 419 => null, 420 => static function ($self, $stackPos) { $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 421 => static function ($self, $stackPos) { $self->semValue = new Expr\Assign($self->fixupArrayDestructuring($self->semStack[$stackPos-(3-1)]), $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 422 => static function ($self, $stackPos) { $self->semValue = new Expr\Assign($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 423 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 424 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignRef($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); if (!$self->phpVersion->allowsAssignNewByReference()) { $self->emitError(new Error('Cannot assign new by reference', $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]))); } }, 425 => null, 426 => null, 427 => static function ($self, $stackPos) { $self->semValue = new Expr\FuncCall(new Node\Name($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos-(2-1)])), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 428 => static function ($self, $stackPos) { $self->semValue = new Expr\Clone_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 429 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 430 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 431 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 432 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 433 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 434 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 435 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 436 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 437 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 438 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 439 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 440 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 441 => static function ($self, $stackPos) { $self->semValue = new Expr\AssignOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 442 => static function ($self, $stackPos) { $self->semValue = new Expr\PostInc($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 443 => static function ($self, $stackPos) { $self->semValue = new Expr\PreInc($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 444 => static function ($self, $stackPos) { $self->semValue = new Expr\PostDec($self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 445 => static function ($self, $stackPos) { $self->semValue = new Expr\PreDec($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 446 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BooleanOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 447 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BooleanAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 448 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\LogicalOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 449 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\LogicalAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 450 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\LogicalXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 451 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BitwiseOr($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 452 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 453 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BitwiseAnd($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 454 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\BitwiseXor($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 455 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Concat($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 456 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Plus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 457 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Minus($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 458 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Mul($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 459 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Div($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 460 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Mod($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 461 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\ShiftLeft($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 462 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\ShiftRight($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 463 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Pow($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 464 => static function ($self, $stackPos) { $self->semValue = new Expr\UnaryPlus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 465 => static function ($self, $stackPos) { $self->semValue = new Expr\UnaryMinus($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 466 => static function ($self, $stackPos) { $self->semValue = new Expr\BooleanNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 467 => static function ($self, $stackPos) { $self->semValue = new Expr\BitwiseNot($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 468 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Identical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 469 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\NotIdentical($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 470 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Equal($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 471 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\NotEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 472 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Spaceship($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 473 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Smaller($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 474 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\SmallerOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 475 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Greater($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 476 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\GreaterOrEqual($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 477 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Pipe($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->checkPipeOperatorParentheses($self->semStack[$stackPos-(3-3)]); }, 478 => static function ($self, $stackPos) { $self->semValue = new Expr\Instanceof_($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 479 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; if ($self->semValue instanceof Expr\ArrowFunction) { $self->parenthesizedArrowFunctions->offsetSet($self->semValue); } }, 480 => static function ($self, $stackPos) { $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-3)], $self->semStack[$stackPos-(5-5)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 481 => static function ($self, $stackPos) { $self->semValue = new Expr\Ternary($self->semStack[$stackPos-(4-1)], null, $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 482 => static function ($self, $stackPos) { $self->semValue = new Expr\BinaryOp\Coalesce($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 483 => static function ($self, $stackPos) { $self->semValue = new Expr\Isset_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 484 => static function ($self, $stackPos) { $self->semValue = new Expr\Empty_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 485 => static function ($self, $stackPos) { $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 486 => static function ($self, $stackPos) { $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_INCLUDE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 487 => static function ($self, $stackPos) { $self->semValue = new Expr\Eval_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 488 => static function ($self, $stackPos) { $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 489 => static function ($self, $stackPos) { $self->semValue = new Expr\Include_($self->semStack[$stackPos-(2-2)], Expr\Include_::TYPE_REQUIRE_ONCE, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 490 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = $self->getIntCastKind($self->semStack[$stackPos-(2-1)]); $self->semValue = new Expr\Cast\Int_($self->semStack[$stackPos-(2-2)], $attrs); }, 491 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = $self->getFloatCastKind($self->semStack[$stackPos-(2-1)]); $self->semValue = new Expr\Cast\Double($self->semStack[$stackPos-(2-2)], $attrs); }, 492 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = $self->getStringCastKind($self->semStack[$stackPos-(2-1)]); $self->semValue = new Expr\Cast\String_($self->semStack[$stackPos-(2-2)], $attrs); }, 493 => static function ($self, $stackPos) { $self->semValue = new Expr\Cast\Array_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 494 => static function ($self, $stackPos) { $self->semValue = new Expr\Cast\Object_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 495 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = $self->getBoolCastKind($self->semStack[$stackPos-(2-1)]); $self->semValue = new Expr\Cast\Bool_($self->semStack[$stackPos-(2-2)], $attrs); }, 496 => static function ($self, $stackPos) { $self->semValue = new Expr\Cast\Unset_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 497 => static function ($self, $stackPos) { $self->semValue = new Expr\Cast\Void_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 498 => static function ($self, $stackPos) { $self->semValue = $self->createExitExpr($self->semStack[$stackPos-(2-1)], $stackPos-(2-1), $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 499 => static function ($self, $stackPos) { $self->semValue = new Expr\ErrorSuppress($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 500 => null, 501 => static function ($self, $stackPos) { $self->semValue = new Expr\ShellExec($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 502 => static function ($self, $stackPos) { $self->semValue = new Expr\Print_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 503 => static function ($self, $stackPos) { $self->semValue = new Expr\Yield_(null, null, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 504 => static function ($self, $stackPos) { $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(2-2)], null, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 505 => static function ($self, $stackPos) { $self->semValue = new Expr\Yield_($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 506 => static function ($self, $stackPos) { $self->semValue = new Expr\YieldFrom($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 507 => static function ($self, $stackPos) { $self->semValue = new Expr\Throw_($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 508 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'returnType' => $self->semStack[$stackPos-(8-6)], 'expr' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); }, 509 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 510 => static function ($self, $stackPos) { $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(8-2)], 'params' => $self->semStack[$stackPos-(8-4)], 'uses' => $self->semStack[$stackPos-(8-6)], 'returnType' => $self->semStack[$stackPos-(8-7)], 'stmts' => $self->semStack[$stackPos-(8-8)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])); }, 511 => static function ($self, $stackPos) { $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => []], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 512 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrowFunction(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'returnType' => $self->semStack[$stackPos-(9-7)], 'expr' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 513 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrowFunction(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'returnType' => $self->semStack[$stackPos-(10-8)], 'expr' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); }, 514 => static function ($self, $stackPos) { $self->semValue = new Expr\Closure(['static' => false, 'byRef' => $self->semStack[$stackPos-(9-3)], 'params' => $self->semStack[$stackPos-(9-5)], 'uses' => $self->semStack[$stackPos-(9-7)], 'returnType' => $self->semStack[$stackPos-(9-8)], 'stmts' => $self->semStack[$stackPos-(9-9)], 'attrGroups' => $self->semStack[$stackPos-(9-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(9-1)], $self->tokenEndStack[$stackPos])); }, 515 => static function ($self, $stackPos) { $self->semValue = new Expr\Closure(['static' => true, 'byRef' => $self->semStack[$stackPos-(10-4)], 'params' => $self->semStack[$stackPos-(10-6)], 'uses' => $self->semStack[$stackPos-(10-8)], 'returnType' => $self->semStack[$stackPos-(10-9)], 'stmts' => $self->semStack[$stackPos-(10-10)], 'attrGroups' => $self->semStack[$stackPos-(10-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(10-1)], $self->tokenEndStack[$stackPos])); }, 516 => static function ($self, $stackPos) { $self->semValue = array(new Stmt\Class_(null, ['type' => $self->semStack[$stackPos-(8-2)], 'extends' => $self->semStack[$stackPos-(8-4)], 'implements' => $self->semStack[$stackPos-(8-5)], 'stmts' => $self->semStack[$stackPos-(8-7)], 'attrGroups' => $self->semStack[$stackPos-(8-1)]], $self->getAttributes($self->tokenStartStack[$stackPos-(8-1)], $self->tokenEndStack[$stackPos])), $self->semStack[$stackPos-(8-3)]); $self->checkClass($self->semValue[0], -1); }, 517 => static function ($self, $stackPos) { $self->semValue = new Expr\New_($self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 518 => static function ($self, $stackPos) { list($class, $ctorArgs) = $self->semStack[$stackPos-(2-2)]; $self->semValue = new Expr\New_($class, $ctorArgs, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 519 => static function ($self, $stackPos) { $self->semValue = new Expr\New_($self->semStack[$stackPos-(2-2)], [], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 520 => null, 521 => null, 522 => static function ($self, $stackPos) { $self->semValue = array(); }, 523 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(4-3)]; }, 524 => null, 525 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 526 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 527 => static function ($self, $stackPos) { $self->semValue = new Node\ClosureUse($self->semStack[$stackPos-(2-2)], $self->semStack[$stackPos-(2-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 528 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 529 => static function ($self, $stackPos) { $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 530 => static function ($self, $stackPos) { $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 531 => static function ($self, $stackPos) { $self->semValue = new Expr\FuncCall($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 532 => static function ($self, $stackPos) { $self->semValue = new Expr\StaticCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 533 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 534 => null, 535 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 536 => static function ($self, $stackPos) { $self->semValue = new Name($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 537 => static function ($self, $stackPos) { $self->semValue = new Name\FullyQualified(substr($self->semStack[$stackPos-(1-1)], 1), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 538 => static function ($self, $stackPos) { $self->semValue = new Name\Relative(substr($self->semStack[$stackPos-(1-1)], 10), $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 539 => null, 540 => null, 541 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 542 => static function ($self, $stackPos) { $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; }, 543 => null, 544 => null, 545 => static function ($self, $stackPos) { $self->semValue = array(); }, 546 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); foreach ($self->semValue as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; }, 547 => static function ($self, $stackPos) { foreach ($self->semStack[$stackPos-(1-1)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '`', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = $self->semStack[$stackPos-(1-1)]; }, 548 => static function ($self, $stackPos) { $self->semValue = array(); }, 549 => null, 550 => static function ($self, $stackPos) { $self->semValue = new Expr\ConstFetch($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 551 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Line($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 552 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\File($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 553 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Dir($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 554 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Class_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 555 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Trait_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 556 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Method($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 557 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Function_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 558 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Namespace_($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 559 => static function ($self, $stackPos) { $self->semValue = new Scalar\MagicConst\Property($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 560 => static function ($self, $stackPos) { $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 561 => static function ($self, $stackPos) { $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(5-1)], $self->semStack[$stackPos-(5-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(5-1)], $self->tokenEndStack[$stackPos])); }, 562 => static function ($self, $stackPos) { $self->semValue = new Expr\ClassConstFetch($self->semStack[$stackPos-(3-1)], new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)])), $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; }, 563 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_SHORT; $self->semValue = new Expr\Array_($self->semStack[$stackPos-(3-2)], $attrs); }, 564 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Expr\Array_::KIND_LONG; $self->semValue = new Expr\Array_($self->semStack[$stackPos-(4-3)], $attrs); $self->createdArrays->offsetSet($self->semValue); }, 565 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; $self->createdArrays->offsetSet($self->semValue); }, 566 => static function ($self, $stackPos) { $self->semValue = Scalar\String_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->supportsUnicodeEscapes()); }, 567 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]); $attrs['kind'] = Scalar\String_::KIND_DOUBLE_QUOTED; foreach ($self->semStack[$stackPos-(3-2)] as $s) { if ($s instanceof Node\InterpolatedStringPart) { $s->value = Node\Scalar\String_::parseEscapeSequences($s->value, '"', $self->phpVersion->supportsUnicodeEscapes()); } }; $self->semValue = new Scalar\InterpolatedString($self->semStack[$stackPos-(3-2)], $attrs); }, 568 => static function ($self, $stackPos) { $self->semValue = $self->parseLNumber($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]), $self->phpVersion->allowsInvalidOctals()); }, 569 => static function ($self, $stackPos) { $self->semValue = Scalar\Float_::fromString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 570 => null, 571 => null, 572 => null, 573 => static function ($self, $stackPos) { $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); }, 574 => static function ($self, $stackPos) { $self->semValue = $self->parseDocString($self->semStack[$stackPos-(2-1)], '', $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(2-2)], $self->tokenEndStack[$stackPos-(2-2)]), true); }, 575 => static function ($self, $stackPos) { $self->semValue = $self->parseDocString($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-2)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos]), $self->getAttributes($self->tokenStartStack[$stackPos-(3-3)], $self->tokenEndStack[$stackPos-(3-3)]), true); }, 576 => static function ($self, $stackPos) { $self->semValue = null; }, 577 => null, 578 => null, 579 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 580 => null, 581 => null, 582 => null, 583 => null, 584 => null, 585 => null, 586 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 587 => null, 588 => null, 589 => null, 590 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 591 => null, 592 => static function ($self, $stackPos) { $self->semValue = new Expr\MethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 593 => static function ($self, $stackPos) { $self->semValue = new Expr\NullsafeMethodCall($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->semStack[$stackPos-(4-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 594 => static function ($self, $stackPos) { $self->semValue = null; }, 595 => null, 596 => null, 597 => null, 598 => static function ($self, $stackPos) { $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 599 => static function ($self, $stackPos) { $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 600 => null, 601 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 602 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable($self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 603 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable(new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])), $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; }, 604 => static function ($self, $stackPos) { $var = $self->semStack[$stackPos-(1-1)]->name; $self->semValue = \is_string($var) ? new Node\VarLikeIdentifier($var, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])) : $var; }, 605 => static function ($self, $stackPos) { $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 606 => null, 607 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 608 => static function ($self, $stackPos) { $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 609 => static function ($self, $stackPos) { $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 610 => static function ($self, $stackPos) { $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 611 => static function ($self, $stackPos) { $self->semValue = new Expr\StaticPropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 612 => null, 613 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 614 => null, 615 => null, 616 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 617 => null, 618 => static function ($self, $stackPos) { $self->semValue = new Expr\Error($self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); $self->errorState = 2; }, 619 => static function ($self, $stackPos) { $self->semValue = new Expr\List_($self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); $self->semValue->setAttribute('kind', Expr\List_::KIND_LIST); $self->postprocessList($self->semValue); }, 620 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(1-1)]; $end = count($self->semValue)-1; if ($self->semValue[$end]->value instanceof Expr\Error) array_pop($self->semValue); }, 621 => null, 622 => static function ($self, $stackPos) { /* do nothing -- prevent default action of $$=$self->semStack[$1]. See $551. */ }, 623 => static function ($self, $stackPos) { $self->semStack[$stackPos-(3-1)][] = $self->semStack[$stackPos-(3-3)]; $self->semValue = $self->semStack[$stackPos-(3-1)]; }, 624 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 625 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 626 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, true, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 627 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(1-1)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 628 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 629 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(4-4)], $self->semStack[$stackPos-(4-1)], true, $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 630 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(3-3)], $self->semStack[$stackPos-(3-1)], false, $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 631 => static function ($self, $stackPos) { $self->semValue = new Node\ArrayItem($self->semStack[$stackPos-(2-2)], null, false, $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos]), true); }, 632 => static function ($self, $stackPos) { /* Create an Error node now to remember the position. We'll later either report an error, or convert this into a null element, depending on whether this is a creation or destructuring context. */ $attrs = $self->createEmptyElemAttributes($self->tokenPos); $self->semValue = new Node\ArrayItem(new Expr\Error($attrs), null, false, $attrs); }, 633 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 634 => static function ($self, $stackPos) { $self->semStack[$stackPos-(2-1)][] = $self->semStack[$stackPos-(2-2)]; $self->semValue = $self->semStack[$stackPos-(2-1)]; }, 635 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(1-1)]); }, 636 => static function ($self, $stackPos) { $self->semValue = array($self->semStack[$stackPos-(2-1)], $self->semStack[$stackPos-(2-2)]); }, 637 => static function ($self, $stackPos) { $attrs = $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos]); $attrs['rawValue'] = $self->semStack[$stackPos-(1-1)]; $self->semValue = new Node\InterpolatedStringPart($self->semStack[$stackPos-(1-1)], $attrs); }, 638 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 639 => null, 640 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(4-1)], $self->semStack[$stackPos-(4-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(4-1)], $self->tokenEndStack[$stackPos])); }, 641 => static function ($self, $stackPos) { $self->semValue = new Expr\PropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 642 => static function ($self, $stackPos) { $self->semValue = new Expr\NullsafePropertyFetch($self->semStack[$stackPos-(3-1)], $self->semStack[$stackPos-(3-3)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 643 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 644 => static function ($self, $stackPos) { $self->semValue = new Expr\Variable($self->semStack[$stackPos-(3-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(3-1)], $self->tokenEndStack[$stackPos])); }, 645 => static function ($self, $stackPos) { $self->semValue = new Expr\ArrayDimFetch($self->semStack[$stackPos-(6-2)], $self->semStack[$stackPos-(6-4)], $self->getAttributes($self->tokenStartStack[$stackPos-(6-1)], $self->tokenEndStack[$stackPos])); }, 646 => static function ($self, $stackPos) { $self->semValue = $self->semStack[$stackPos-(3-2)]; }, 647 => static function ($self, $stackPos) { $self->semValue = new Scalar\String_($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 648 => static function ($self, $stackPos) { $self->semValue = $self->parseNumString($self->semStack[$stackPos-(1-1)], $self->getAttributes($self->tokenStartStack[$stackPos-(1-1)], $self->tokenEndStack[$stackPos])); }, 649 => static function ($self, $stackPos) { $self->semValue = $self->parseNumString('-' . $self->semStack[$stackPos-(2-2)], $self->getAttributes($self->tokenStartStack[$stackPos-(2-1)], $self->tokenEndStack[$stackPos])); }, 650 => null, ]; } } PK! ^n n php-parser/PATCHES.txtnu[This file was automatically generated by Composer Patches (https://github.com/cweagans/composer-patches) Patches applied to this directory: 0 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-expr-closure-php.patch 1 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-finally-php.patch 2 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-function-php.patch 3 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-do-php.patch 4 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-catch-php.patch 5 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-trycatch-php.patch 6 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-for-php.patch 7 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-classmethod-php.patch 8 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-else-php.patch 9 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-while-php.patch 10 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-foreach-php.patch 11 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-if-php.patch 12 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-case-php.patch 13 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-elseif-php.patch 14 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-node-stmt-namespace-php.patch 15 Source: https://raw.githubusercontent.com/rectorphp/vendor-patches/main/patches/nikic-php-parser-lib-phpparser-nodetraverser-php.patch PK!N } } Jphp-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpnu[\h*)\2(?![a-zA-Z0-9_\x80-\xff])(?(?:;?[\r\n])?)/x REGEX; public function getPhpVersion() : string { return Emulative::PHP_7_3; } public function isEmulationNeeded(string $code) : bool { return \strpos($code, '<<<') !== \false; } public function emulate(string $code, array $tokens) : array { // Handled by preprocessing + fixup. return $tokens; } public function reverseEmulate(string $code, array $tokens) : array { // Not supported. return $tokens; } public function preprocessCode(string $code, array &$patches) : string { if (!\preg_match_all(self::FLEXIBLE_DOC_STRING_REGEX, $code, $matches, \PREG_SET_ORDER | \PREG_OFFSET_CAPTURE)) { // No heredoc/nowdoc found return $code; } // Keep track of how much we need to adjust string offsets due to the modifications we // already made $posDelta = 0; foreach ($matches as $match) { $indentation = $match['indentation'][0]; $indentationStart = $match['indentation'][1]; $separator = $match['separator'][0]; $separatorStart = $match['separator'][1]; if ($indentation === '' && $separator !== '') { // Ordinary heredoc/nowdoc continue; } if ($indentation !== '') { // Remove indentation $indentationLen = \strlen($indentation); $code = \substr_replace($code, '', $indentationStart + $posDelta, $indentationLen); $patches[] = [$indentationStart + $posDelta, 'add', $indentation]; $posDelta -= $indentationLen; } if ($separator === '') { // Insert newline as separator $code = \substr_replace($code, "\n", $separatorStart + $posDelta, 0); $patches[] = [$separatorStart + $posDelta, 'remove', "\n"]; $posDelta += 1; } } return $code; } } PK!_**"php-parser/grammar/tokens.templatenu[PK!eՉ|php-parser/grammar/README.mdnu[PK!eo %Qphp-parser/grammar/rebuildParsers.phpnu[PK!-ɚQ  ";(php-parser/grammar/parser.templatenu[PK! %1php-parser/grammar/php7.ynu[PK!B  php-parser/grammar/tokens.ynu[PK!84__Kphp-parser/grammar/php5.ynu[PK!=5php-parser/README.mdnu[PK!*php-parser/LICENSEnu[PK!H%..'php-parser/composer.jsonnu[PK!yphp-parser/bin/php-parsenuȯPK!ephp-parser/.gitattributesnu[PK!T.  3uphp-parser/lib/PhpParser/Node/VarLikeIdentifier.phpnu[PK!<(php-parser/lib/PhpParser/Node/Const_.phpnu[PK!{.0php-parser/lib/PhpParser/Node/NullableType.phpnu[PK!uQss(}php-parser/lib/PhpParser/Node/Scalar.phpnu[PK!Et1&Hphp-parser/lib/PhpParser/Node/Stmt.phpnu[PK!+#php-parser/lib/PhpParser/Node/UnionType.phpnu[PK![99%= php-parser/lib/PhpParser/Node/Arg.phpnu[PK!m{,php-parser/lib/PhpParser/Node/Identifier.phpnu[PK!,O.php-parser/lib/PhpParser/Node/FunctionLike.phpnu[PK!1i i 0Ophp-parser/lib/PhpParser/Node/Scalar/LNumber.phpnu[PK!28YY0$php-parser/lib/PhpParser/Node/Scalar/String_.phpnu[PK!՝;5php-parser/lib/PhpParser/Node/Scalar/EncapsedStringPart.phpnu[PK!^T09php-parser/lib/PhpParser/Node/Scalar/DNumber.phpnu[PK!&Q&@@8Aphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Line.phpnu[PK!3FF:8Cphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Method.phpnu[PK!g@@8Dphp-parser/lib/PhpParser/Node/Scalar/MagicConst/File.phpnu[PK!)G==7Fphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Dir.phpnu[PK!CDD:4Hphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Trait_.phpnu[PK!tPP>Iphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Namespace_.phpnu[PK!+0 DD:Kphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Class_.phpnu[PK!fAMM=NMphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Function_.phpnu[PK!ixSS3Ophp-parser/lib/PhpParser/Node/Scalar/MagicConst.phpnu[PK!d1Qphp-parser/lib/PhpParser/Node/Scalar/Encapsed.phpnu[PK!!5Tphp-parser/lib/PhpParser/Node/Name/FullyQualified.phpnu[PK!ħJ/Yphp-parser/lib/PhpParser/Node/Name/Relative.phpnu[PK!:&_php-parser/lib/PhpParser/Node/Expr.phpnu[PK!J}._php-parser/lib/PhpParser/Node/Stmt/Static_.phpnu[PK!F=eL-bphp-parser/lib/PhpParser/Node/Stmt/Const_.phpnu[PK!/ /fphp-parser/lib/PhpParser/Node/Stmt/Property.phpnu[PK!+[1 qphp-parser/lib/PhpParser/Node/Stmt/Expression.phpnu[PK!ץ15=tphp-parser/lib/PhpParser/Node/Stmt/DeclareDeclare.phpnu[PK!,\\+(xphp-parser/lib/PhpParser/Node/Stmt/Use_.phpnu[PK!:.}php-parser/lib/PhpParser/Node/Stmt/Return_.phpnu[PK!,mm+php-parser/lib/PhpParser/Node/Stmt/For_.phpnu[PK!xR1php-parser/lib/PhpParser/Node/Stmt/Interface_.phpnu[PK!Uxx.php-parser/lib/PhpParser/Node/Stmt/ElseIf_.phpnu[PK!/,Ώphp-parser/lib/PhpParser/Node/Stmt/Case_.phpnu[PK!ci,œphp-parser/lib/PhpParser/Node/Stmt/Goto_.phpnu[PK!cL 00*php-parser/lib/PhpParser/Node/Stmt/Nop.phpnu[PK!=,php-parser/lib/PhpParser/Node/Stmt/Else_.phpnu[PK! )3՛php-parser/lib/PhpParser/Node/Stmt/HaltCompiler.phpnu[PK!!<  9/php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation.phpnu[PK!yh,php-parser/lib/PhpParser/Node/Stmt/Label.phpnu[PK!c%-Уphp-parser/lib/PhpParser/Node/Stmt/Unset_.phpnu[PK!tqq*ͦphp-parser/lib/PhpParser/Node/Stmt/Do_.phpnu[PK!Ҏj-php-parser/lib/PhpParser/Node/Stmt/Catch_.phpnu[PK!GU 1php-parser/lib/PhpParser/Node/Stmt/ClassConst.phpnu[PK!%1/php-parser/lib/PhpParser/Node/Stmt/TryCatch.phpnu[PK!p/-Ǿphp-parser/lib/PhpParser/Node/Stmt/Trait_.phpnu[PK!i1,php-parser/lib/PhpParser/Node/Stmt/InlineHTML.phpnu[PK! ,ww/php-parser/lib/PhpParser/Node/Stmt/Declare_.phpnu[PK!¨.php-parser/lib/PhpParser/Node/Stmt/Global_.phpnu[PK!>7  0php-parser/lib/PhpParser/Node/Stmt/ClassLike.phpnu[PK!߾tt-vphp-parser/lib/PhpParser/Node/Stmt/While_.phpnu[PK!-Gphp-parser/lib/PhpParser/Node/Stmt/Throw_.phpnu[PK!ɭX2Bphp-parser/lib/PhpParser/Node/Stmt/ClassMethod.phpnu[PK!yž/iphp-parser/lib/PhpParser/Node/Stmt/Foreach_.phpnu[PK!95aa-fphp-parser/lib/PhpParser/Node/Stmt/UseUse.phpnu[PK!ʺ]ii*$php-parser/lib/PhpParser/Node/Stmt/If_.phpnu[PK!U0php-parser/lib/PhpParser/Node/Stmt/Continue_.phpnu[PK!$Uq0 php-parser/lib/PhpParser/Node/Stmt/StaticVar.phpnu[PK!+, php-parser/lib/PhpParser/Node/Stmt/Echo_.phpnu[PK!ߩ'%%.php-parser/lib/PhpParser/Node/Stmt/Switch_.phpnu[PK!n7dphp-parser/lib/PhpParser/Node/Stmt/PropertyProperty.phpnu[PK! -php-parser/lib/PhpParser/Node/Stmt/Break_.phpnu[PK!Q911?php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Alias.phpnu[PK!:`JJDQ!php-parser/lib/PhpParser/Node/Stmt/TraitUseAdaptation/Precedence.phpnu[PK!QM/&php-parser/lib/PhpParser/Node/Stmt/TraitUse.phpnu[PK!/)php-parser/lib/PhpParser/Node/Stmt/Finally_.phpnu[PK!}/ώ12-php-parser/lib/PhpParser/Node/Stmt/Namespace_.phpnu[PK!Šrr-1php-parser/lib/PhpParser/Node/Stmt/Class_.phpnu[PK!!/iCphp-parser/lib/PhpParser/Node/Stmt/GroupUse.phpnu[PK!,=a a 0Gphp-parser/lib/PhpParser/Node/Stmt/Function_.phpnu[PK!V5&Rphp-parser/lib/PhpParser/Node/Name.phpnu[PK!bNss'qphp-parser/lib/PhpParser/Node/Param.phpnu[PK!J~~.zphp-parser/lib/PhpParser/Node/Expr/PostDec.phpnu[PK!?w .}php-parser/lib/PhpParser/Node/Expr/Closure.phpnu[PK!Ly0{{-̈php-parser/lib/PhpParser/Node/Expr/PreDec.phpnu[PK!JJ1php-parser/lib/PhpParser/Node/Expr/StaticCall.phpnu[PK!,Ophp-parser/lib/PhpParser/Node/Expr/Exit_.phpnu[PK!OJ/php-parser/lib/PhpParser/Node/Expr/Include_.phpnu[PK!g0php-parser/lib/PhpParser/Node/Expr/ShellExec.phpnu[PK!4A__/php-parser/lib/PhpParser/Node/Expr/BinaryOp.phpnu[PK!,fS00/_php-parser/lib/PhpParser/Node/Expr/FuncCall.phpnu[PK!i$0php-parser/lib/PhpParser/Node/Expr/YieldFrom.phpnu[PK!ix-php-parser/lib/PhpParser/Node/Expr/Isset_.phpnu[PK!~{{,ªphp-parser/lib/PhpParser/Node/Expr/Eval_.phpnu[PK!Ll^h h 4php-parser/lib/PhpParser/Node/Expr/ArrowFunction.phpnu[PK!93'((-ephp-parser/lib/PhpParser/Node/Expr/Array_.phpnu[PK!'(0php-parser/lib/PhpParser/Node/Expr/UnaryPlus.phpnu[PK!4Q~~.޽php-parser/lib/PhpParser/Node/Expr/PostInc.phpnu[PK!@/php-parser/lib/PhpParser/Node/Expr/AssignOp.phpnu[PK!+281php-parser/lib/PhpParser/Node/Expr/BitwiseNot.phpnu[PK!2,php-parser/lib/PhpParser/Node/Expr/Error.phpnu[PK!>lII2%php-parser/lib/PhpParser/Node/Expr/Instanceof_.phpnu[PK!{{-php-parser/lib/PhpParser/Node/Expr/PreInc.phpnu[PK!DG4php-parser/lib/PhpParser/Node/Expr/PropertyFetch.phpnu[PK!"ɼ886php-parser/lib/PhpParser/Node/Expr/BinaryOp/Concat.phpnu[PK!KII>iphp-parser/lib/PhpParser/Node/Expr/BinaryOp/GreaterOrEqual.phpnu[PK!э??9 php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftLeft.phpnu[PK!rL0AA:php-parser/lib/PhpParser/Node/Expr/BinaryOp/ShiftRight.phpnu[PK!ia223sphp-parser/lib/PhpParser/Node/Expr/BinaryOp/Mul.phpnu[PK!:==8php-parser/lib/PhpParser/Node/Expr/BinaryOp/Coalesce.phpnu[PK!GpBB:php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalXor.phpnu[PK!::7Yphp-parser/lib/PhpParser/Node/Expr/BinaryOp/Greater.phpnu[PK!K::7php-parser/lib/PhpParser/Node/Expr/BinaryOp/Smaller.phpnu[PK!5p6==8php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotEqual.phpnu[PK!߉665@php-parser/lib/PhpParser/Node/Expr/BinaryOp/Minus.phpnu[PK!d;x??9php-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalOr.phpnu[PK!Η0>>9php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseOr.phpnu[PK!(AA:*php-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanAnd.phpnu[PK!@@9php-parser/lib/PhpParser/Node/Expr/BinaryOp/Spaceship.phpnu[PK!9V333~php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pow.phpnu[PK!.?@@9php-parser/lib/PhpParser/Node/Expr/BinaryOp/Identical.phpnu[PK!1FF<php-parser/lib/PhpParser/Node/Expr/BinaryOp/NotIdentical.phpnu[PK!اBB:ophp-parser/lib/PhpParser/Node/Expr/BinaryOp/LogicalAnd.phpnu[PK!ݞ@@:php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseXor.phpnu[PK!1223php-parser/lib/PhpParser/Node/Expr/BinaryOp/Mod.phpnu[PK! 72??9Zphp-parser/lib/PhpParser/Node/Expr/BinaryOp/BooleanOr.phpnu[PK!#tII>php-parser/lib/PhpParser/Node/Expr/BinaryOp/SmallerOrEqual.phpnu[PK!LK @@:php-parser/lib/PhpParser/Node/Expr/BinaryOp/BitwiseAnd.phpnu[PK!̒_223cphp-parser/lib/PhpParser/Node/Expr/BinaryOp/Div.phpnu[PK!~i1444php-parser/lib/PhpParser/Node/Expr/BinaryOp/Plus.phpnu[PK!(775php-parser/lib/PhpParser/Node/Expr/BinaryOp/Equal.phpnu[PK!?(~~-,php-parser/lib/PhpParser/Node/Expr/Print_.phpnu[PK!H.php-parser/lib/PhpParser/Node/Expr/Ternary.phpnu[PK!pww1Cphp-parser/lib/PhpParser/Node/Expr/ClosureUse.phpnu[PK!*I, php-parser/lib/PhpParser/Node/Expr/List_.phpnu[PK!91Mphp-parser/lib/PhpParser/Node/Expr/UnaryMinus.phpnu[PK! =-8php-parser/lib/PhpParser/Node/Expr/Assign.phpnu[PK!%6`/php-parser/lib/PhpParser/Node/Expr/Variable.phpnu[PK!)880php-parser/lib/PhpParser/Node/Expr/AssignRef.phpnu[PK!$1php-parser/lib/PhpParser/Node/Expr/BooleanNot.phpnu[PK!oPNN-php-parser/lib/PhpParser/Node/Expr/Yield_.phpnu[PK!8<<1"php-parser/lib/PhpParser/Node/Expr/MethodCall.phpnu[PK!Pxx+X(php-parser/lib/PhpParser/Node/Expr/New_.phpnu[PK! l 1+-php-parser/lib/PhpParser/Node/Expr/ConstFetch.phpnu[PK!۵~~-50php-parser/lib/PhpParser/Node/Expr/Empty_.phpnu[PK!8)J]23php-parser/lib/PhpParser/Node/Expr/Cast/Array_.phpnu[PK!m33I4php-parser/lib/PhpParser/Node/Expr/Cast/String_.phpnu[PK!@25php-parser/lib/PhpParser/Node/Expr/Cast/Unset_.phpnu[PK!`36php-parser/lib/PhpParser/Node/Expr/Cast/Object_.phpnu[PK!o=07php-parser/lib/PhpParser/Node/Expr/Cast/Int_.phpnu[PK!d1-9php-parser/lib/PhpParser/Node/Expr/Cast/Bool_.phpnu[PK!kO#͋2c:php-parser/lib/PhpParser/Node/Expr/Cast/Double.phpnu[PK!nTii0P<php-parser/lib/PhpParser/Node/Expr/ArrayItem.phpnu[PK!k11+Aphp-parser/lib/PhpParser/Node/Expr/Cast.phpnu[PK!j774Cphp-parser/lib/PhpParser/Node/Expr/ErrorSuppress.phpnu[PK!M :Fphp-parser/lib/PhpParser/Node/Expr/StaticPropertyFetch.phpnu[PK!Y{{- Kphp-parser/lib/PhpParser/Node/Expr/Clone_.phpnu[PK!A6Mphp-parser/lib/PhpParser/Node/Expr/ClassConstFetch.phpnu[PK!0>>43Rphp-parser/lib/PhpParser/Node/Expr/ArrayDimFetch.phpnu[PK!6Uphp-parser/lib/PhpParser/Node/Expr/AssignOp/Concat.phpnu[PK!wú9#Wphp-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftLeft.phpnu[PK!7F:zXphp-parser/lib/PhpParser/Node/Expr/AssignOp/ShiftRight.phpnu[PK!U#`3Yphp-parser/lib/PhpParser/Node/Expr/AssignOp/Mul.phpnu[PK!Q8[php-parser/lib/PhpParser/Node/Expr/AssignOp/Coalesce.phpnu[PK!U5m\php-parser/lib/PhpParser/Node/Expr/AssignOp/Minus.phpnu[PK!.9]php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseOr.phpnu[PK!|3_php-parser/lib/PhpParser/Node/Expr/AssignOp/Pow.phpnu[PK!( f:T`php-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseXor.phpnu[PK!ǒ߿3aphp-parser/lib/PhpParser/Node/Expr/AssignOp/Mod.phpnu[PK!x:bphp-parser/lib/PhpParser/Node/Expr/AssignOp/BitwiseAnd.phpnu[PK!c3Mdphp-parser/lib/PhpParser/Node/Expr/AssignOp/Div.phpnu[PK! B4ephp-parser/lib/PhpParser/Node/Expr/AssignOp/Plus.phpnu[PK!{%%+fphp-parser/lib/PhpParser/BuilderHelpers.phpnu[PK!Y(php-parser/lib/PhpParser/NodeVisitor.phpnu[PK! 26php-parser/lib/PhpParser/PrettyPrinterAbstract.phpnu[PK!eȊԃ!~php-parser/lib/PhpParser/Node.phpnu[PK!Pĸ++(|php-parser/lib/PhpParser/Parser/Php5.phpnu[PK!FR,php-parser/lib/PhpParser/Parser/Multiple.phpnu[PK!y\*ophp-parser/lib/PhpParser/Parser/Tokens.phpnu[PK!HTT(php-parser/lib/PhpParser/Parser/Php7.phpnu[PK!%b&" ' php-parser/lib/PhpParser/Error.phpnu[PK! +; php-parser/lib/PhpParser/ParserAbstract.phpnu[PK! "WW9S php-parser/lib/PhpParser/ConstExprEvaluationException.phpnu[PK!|m%%( php-parser/lib/PhpParser/NameContext.phpnu[PK!ZZ"\ php-parser/lib/PhpParser/Lexer.phpnu[PK!NeVeeP\ php-parser/lib/PhpParser/Lexer/TokenEmulator/NumericLiteralSeparatorEmulator.phpnu[PK!V&zJkk php-parser/lib/PhpParser/Lexer/TokenEmulator/CoaleseEqualTokenEmulator.phpnu[PK! o22Gp php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulatorInterface.phpnu[PK!K@r php-parser/lib/PhpParser/Lexer/TokenEmulator/FnTokenEmulator.phpnu[PK!LQc"",t php-parser/lib/PhpParser/Lexer/Emulative.phpnu[PK!yhh( php-parser/lib/PhpParser/Comment/Doc.phpnu[PK!$ɘ php-parser/lib/PhpParser/Builder.phpnu[PK!J3 php-parser/lib/PhpParser/NodeTraverserInterface.phpnu[PK!O,,+ php-parser/lib/PhpParser/BuilderFactory.phpnu[PK!L22)% php-parser/lib/PhpParser/ErrorHandler.phpnu[PK!v ' php-parser/lib/PhpParser/NodeFinder.phpnu[PK!L<<- php-parser/lib/PhpParser/Builder/Property.phpnu[PK!ixL)U php-parser/lib/PhpParser/Builder/Use_.phpnu[PK!a,;#{{+e php-parser/lib/PhpParser/Builder/Method.phpnu[PK!w /; php-parser/lib/PhpParser/Builder/Interface_.phpnu[PK!abb7E php-parser/lib/PhpParser/Builder/TraitUseAdaptation.phpnu[PK!1 php-parser/lib/PhpParser/Builder/FunctionLike.phpnu[PK!6+S php-parser/lib/PhpParser/Builder/Trait_.phpnu[PK!?{0o# php-parser/lib/PhpParser/Builder/Declaration.phpnu[PK!G//-' php-parser/lib/PhpParser/Builder/TraitUse.phpnu[PK!%%/ . php-parser/lib/PhpParser/Builder/Namespace_.phpnu[PK!\P5[[*2 php-parser/lib/PhpParser/Builder/Param.phpnu[PK!+YC php-parser/lib/PhpParser/Builder/Class_.phpnu[PK!(jL11.>R php-parser/lib/PhpParser/Builder/Function_.phpnu[PK!6&&5X php-parser/lib/PhpParser/NodeVisitor/NameResolver.phpnu[PK!!F7 php-parser/lib/PhpParser/NodeVisitor/CloningVisitor.phpnu[PK!=*ll7? php-parser/lib/PhpParser/NodeVisitor/FindingVisitor.phpnu[PK!+< php-parser/lib/PhpParser/NodeVisitor/FirstFindingVisitor.phpnu[PK!80Z php-parser/lib/PhpParser/NodeVisitorAbstract.phpnu[PK!N;((* php-parser/lib/PhpParser/NodeTraverser.phpnu[PK!C2Ӂ# php-parser/lib/PhpParser/Parser.phpnu[PK!*tY ##1ź php-parser/lib/PhpParser/Internal/TokenStream.phpnu[PK!56Zzz? php-parser/lib/PhpParser/Internal/PrintableNewAnonClassNode.phpnu[PK!'>;, php-parser/lib/PhpParser/Internal/Differ.phpnu[PK!//.a php-parser/lib/PhpParser/Internal/DiffElem.phpnu[PK!wӤӤ3 php-parser/lib/PhpParser/PrettyPrinter/Standard.phpnu[PK!i$$ php-parser/lib/PhpParser/Comment.phpnu[PK!VV'/ php-parser/lib/PhpParser/NodeDumper.phpnu[PK!v%v%/ php-parser/lib/PhpParser/ConstExprEvaluator.phpnu[PK![W{~~)php-parser/lib/PhpParser/NodeAbstract.phpnu[PK!||4php-parser/lib/PhpParser/ErrorHandler/Collecting.phpnu[PK!ZAMnn2hphp-parser/lib/PhpParser/ErrorHandler/Throwing.phpnu[PK!SD D *8php-parser/lib/PhpParser/ParserFactory.phpnu[PK!CDD D ('php-parser/lib/PhpParser/JsonDecoder.phpnu[PK!Ca)7r5php-parser/312955067da3aaf5cf995776e252824323450273.zipnuIwPK!U\ܸܸ7)php-parser/0863dec1a401ffbf1e6adffc231e02bcd54f0450.zipnuIwPK!NW[1'"php-parser/lib/PhpParser/PhpVersion.phpnu[PK!&U%%3bphp-parser/lib/PhpParser/Internal/TokenPolyfill.phpnu[PK!4ϫ 1ephp-parser/lib/PhpParser/compatibility_tokens.phpnu[PK!f+&php-parser/lib/PhpParser/Node/ArrayItem.phpnu[PK!ߓ,,4+php-parser/lib/PhpParser/Node/Expr/BinaryOp/Pipe.phpnu[PK!I1@-php-parser/lib/PhpParser/Node/Expr/Cast/Void_.phpnu[PK!<q.php-parser/lib/PhpParser/Node/Expr/NullsafePropertyFetch.phpnu[PK!p /2php-parser/lib/PhpParser/Node/Expr/CallLike.phpnu[PK!ճŘ-7php-parser/lib/PhpParser/Node/Expr/Throw_.phpnu[PK!3SS9:php-parser/lib/PhpParser/Node/Expr/NullsafeMethodCall.phpnu[PK!x ,-?php-parser/lib/PhpParser/Node/Expr/Match_.phpnu[PK!;77,Bphp-parser/lib/PhpParser/Node/Stmt/Block.phpnu[PK!_:ǜ/Ephp-parser/lib/PhpParser/Node/Stmt/EnumCase.phpnu[PK!~BB,Jphp-parser/lib/PhpParser/Node/Stmt/Enum_.phpnu[PK!X-6Qphp-parser/lib/PhpParser/Node/DeclareItem.phpnu[PK!j,q*sUphp-parser/lib/PhpParser/Node/MatchArm.phpnu[PK!00.cXphp-parser/lib/PhpParser/Node/PropertyItem.phpnu[PK!`@@+\php-parser/lib/PhpParser/Node/Attribute.phpnu[PK!hg g .`php-parser/lib/PhpParser/Node/PropertyHook.phpnu[PK!YCY55/Qnphp-parser/lib/PhpParser/Node/Scalar/Float_.phpnu[PK!ǢP;vphp-parser/lib/PhpParser/Node/Scalar/InterpolatedString.phpnu[PK!PCC<zphp-parser/lib/PhpParser/Node/Scalar/MagicConst/Property.phpnu[PK!{mf= -|php-parser/lib/PhpParser/Node/Scalar/Int_.phpnu[PK! yCC-цphp-parser/lib/PhpParser/Node/ComplexType.phpnu[PK!`a$+qphp-parser/lib/PhpParser/Node/StaticVar.phpnu[PK!l,php-parser/lib/PhpParser/Node/ClosureUse.phpnu[PK!E 5ܐphp-parser/lib/PhpParser/Node/VariadicPlaceholder.phpnu[PK!UPR0˓php-parser/lib/PhpParser/Node/AttributeGroup.phpnu[PK!3RR8php-parser/lib/PhpParser/Node/InterpolatedStringPart.phpnu[PK!aD2vphp-parser/lib/PhpParser/Node/IntersectionType.phpnu[PK!Q+͍)php-parser/lib/PhpParser/Node/UseItem.phpnu[PK!pXNphp-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyFunctionTokenEmulator.phpnu[PK!$php-parser/lib/PhpParser/Lexer/TokenEmulator/TokenEmulator.phpnu[PK!Ym ݵFphp-parser/lib/PhpParser/Lexer/TokenEmulator/PropertyTokenEmulator.phpnu[PK!pL@*php-parser/lib/PhpParser/Lexer/TokenEmulator/ReverseEmulator.phpnu[PK!I@php-parser/lib/PhpParser/Lexer/TokenEmulator/KeywordEmulator.phpnu[PK! /,  Rphp-parser/lib/PhpParser/Lexer/TokenEmulator/AsymmetricVisibilityTokenEmulator.phpnu[PK!*3Bphp-parser/lib/PhpParser/Lexer/TokenEmulator/AttributeEmulator.phpnu[PK!i$ $ A php-parser/lib/PhpParser/Lexer/TokenEmulator/VoidCastEmulator.phpnu[PK!x,Fphp-parser/lib/PhpParser/Lexer/TokenEmulator/NullsafeTokenEmulator.phpnu[PK!L+NEphp-parser/lib/PhpParser/Lexer/TokenEmulator/PipeOperatorEmulator.phpnu[PK!_'[[Fphp-parser/lib/PhpParser/Lexer/TokenEmulator/ReadonlyTokenEmulator.phpnu[PK!6~%Cphp-parser/lib/PhpParser/Lexer/TokenEmulator/MatchTokenEmulator.phpnu[PK!%dBphp-parser/lib/PhpParser/Lexer/TokenEmulator/EnumTokenEmulator.phpnu[PK!ktt>Gphp-parser/lib/PhpParser/NodeVisitor/NodeConnectingVisitor.phpnu[PK! A)php-parser/lib/PhpParser/NodeVisitor/CommentAnnotatingVisitor.phpnu[PK! ]]@s php-parser/lib/PhpParser/NodeVisitor/ParentConnectingVisitor.phpnu[PK!(..-@ php-parser/lib/PhpParser/Builder/EnumCase.phpnu[PK! kog g *php-parser/lib/PhpParser/Builder/Enum_.phpnu[PK!ż0/ php-parser/lib/PhpParser/Builder/ClassConst.phpnu[PK! "/php-parser/lib/PhpParser/Token.phpnu[PK!Y7D &1php-parser/lib/PhpParser/Modifiers.phpnu[PK! E* =php-parser/lib/PhpParser/PrettyPrinter.phpnu[PK!*(Dphp-parser/lib/PhpParser/Parser/Php8.phpnu[PK! ^n n 29php-parser/PATCHES.txtnu[PK!N } } JBphp-parser/lib/PhpParser/Lexer/TokenEmulator/FlexibleDocStringEmulator.phpnu[PK%%3L