From 302cf3550514b174b51b8c24d6e16cb47dc61755 Mon Sep 17 00:00:00 2001 From: Pablo Galindo Salgado Date: Sat, 31 Jul 2021 13:04:37 +0100 Subject: Divide the grammar into sections to improve readability (GH-27502) --- Grammar/python.gram | 681 +- Parser/parser.c | 21032 +++++++++++++++++++++++++------------------------- 2 files changed, 10968 insertions(+), 10745 deletions(-) diff --git a/Grammar/python.gram b/Grammar/python.gram index 8219add..278ddfb 100644 --- a/Grammar/python.gram +++ b/Grammar/python.gram @@ -25,43 +25,89 @@ _PyPegen_parse(Parser *p) return result; } - -// The end ''' + +# ========================= START OF THE GRAMMAR ========================= + +# General grammatical elements and rules: +# +# * Strings with double quotes (") denote SOFT KEYWORDS +# * Strings with single quotes (') denote KEYWORDS +# * Upper case names (NAME) denote tokens in the Grammar/Tokens file +# * Rule names starting with "invalid_" are used for specialized syntax errors +# - These rules are NOT used in the first pass of the parser. +# - Only if the first pass fails to parse, a second pass including the invalid +# rules will be executed. +# - If the parser fails in the second phase with a generic syntax error, the +# location of the generic failure of the first pass will be used (this avoids +# reporting incorrect locations due to the invalid rules). +# - The order of the alternatives involving invalid rules matter +# (like any rule in PEG). +# +# Grammar Syntax (see PEP 617 for more information): +# +# rule_name: expression +# Optionally, a type can be included right after the rule name, which +# specifies the return type of the C or Python function corresponding to the +# rule: +# rule_name[return_type]: expression +# If the return type is omitted, then a void * is returned in C and an Any in +# Python. +# e1 e2 +# Match e1, then match e2. +# e1 | e2 +# Match e1 or e2. +# The first alternative can also appear on the line after the rule name for +# formatting purposes. In that case, a | must be used before the first +# alternative, like so: +# rule_name[return_type]: +# | first_alt +# | second_alt +# ( e ) +# Match e (allows also to use other operators in the group like '(e)*') +# [ e ] or e? +# Optionally match e. +# e* +# Match zero or more occurrences of e. +# e+ +# Match one or more occurrences of e. +# s.e+ +# Match one or more occurrences of e, separated by s. The generated parse tree +# does not include the separator. This is otherwise identical to (e (s e)*). +# &e +# Succeed if e can be parsed, without consuming any input. +# !e +# Fail if e can be parsed, without consuming any input. +# ~ +# Commit to the current alternative, even if it fails to parse. +# + +# STARTING RULES +# ============== + file[mod_ty]: a=[statements] ENDMARKER { _PyPegen_make_module(p, a) } interactive[mod_ty]: a=statement_newline { _PyAST_Interactive(a, p->arena) } eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { _PyAST_Expression(a, p->arena) } func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { _PyAST_FunctionType(a, b, p->arena) } fstring[expr_ty]: star_expressions -# type_expressions allow */** but ignore them -type_expressions[asdl_expr_seq*]: - | a=','.expression+ ',' '*' b=expression ',' '**' c=expression { - (asdl_expr_seq*)_PyPegen_seq_append_to_end( - p, - CHECK(asdl_seq*, _PyPegen_seq_append_to_end(p, a, b)), - c) } - | a=','.expression+ ',' '*' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) } - | a=','.expression+ ',' '**' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) } - | '*' a=expression ',' '**' b=expression { - (asdl_expr_seq*)_PyPegen_seq_append_to_end( - p, - CHECK(asdl_seq*, _PyPegen_singleton_seq(p, a)), - b) } - | '*' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) } - | '**' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) } - | a[asdl_expr_seq*]=','.expression+ {a} +# GENERAL STATEMENTS +# ================== statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) } + statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | a[asdl_stmt_seq*]=simple_stmts { a } + statement_newline[asdl_stmt_seq*]: | a=compound_stmt NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | simple_stmts | NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _PyAST_Pass(EXTRA))) } | ENDMARKER { _PyPegen_interactive_exit(p) } + simple_stmts[asdl_stmt_seq*]: | a=simple_stmt !';' NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } # Not needed, there for speedup | a[asdl_stmt_seq*]=';'.simple_stmt+ [';'] NEWLINE { a } + # NOTE: assignment MUST precede expression, else parsing a simple assignment # will throw a SyntaxError. simple_stmt[stmt_ty] (memo): @@ -78,6 +124,7 @@ simple_stmt[stmt_ty] (memo): | 'continue' { _PyAST_Continue(EXTRA) } | &'global' global_stmt | &'nonlocal' nonlocal_stmt + compound_stmt[stmt_ty]: | &('def' | '@' | ASYNC) function_def | &'if' if_stmt @@ -88,6 +135,9 @@ compound_stmt[stmt_ty]: | &'while' while_stmt | match_stmt +# SIMPLE STATEMENTS +# ================= + # NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield' assignment[stmt_ty]: | a=NAME ':' b=expression c=['=' d=annotated_rhs { d }] { @@ -106,6 +156,8 @@ assignment[stmt_ty]: _PyAST_AugAssign(a, b->kind, c, EXTRA) } | invalid_assignment +annotated_rhs[expr_ty]: yield_expr | star_expressions + augassign[AugOperator*]: | '+=' { _PyPegen_augoperator(p, Add) } | '-=' { _PyPegen_augoperator(p, Sub) } @@ -121,20 +173,32 @@ augassign[AugOperator*]: | '**=' { _PyPegen_augoperator(p, Pow) } | '//=' { _PyPegen_augoperator(p, FloorDiv) } +return_stmt[stmt_ty]: + | 'return' a=[star_expressions] { _PyAST_Return(a, EXTRA) } + +raise_stmt[stmt_ty]: + | 'raise' a=expression b=['from' z=expression { z }] { _PyAST_Raise(a, b, EXTRA) } + | 'raise' { _PyAST_Raise(NULL, NULL, EXTRA) } + global_stmt[stmt_ty]: 'global' a[asdl_expr_seq*]=','.NAME+ { _PyAST_Global(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } + nonlocal_stmt[stmt_ty]: 'nonlocal' a[asdl_expr_seq*]=','.NAME+ { _PyAST_Nonlocal(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) } -yield_stmt[stmt_ty]: y=yield_expr { _PyAST_Expr(y, EXTRA) } - -assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _PyAST_Assert(a, b, EXTRA) } - del_stmt[stmt_ty]: | 'del' a=del_targets &(';' | NEWLINE) { _PyAST_Delete(a, EXTRA) } | invalid_del_stmt +yield_stmt[stmt_ty]: y=yield_expr { _PyAST_Expr(y, EXTRA) } + +assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _PyAST_Assert(a, b, EXTRA) } + import_stmt[stmt_ty]: import_name | import_from + +# Import statements +# ----------------- + import_name[stmt_ty]: 'import' a=dotted_as_names { _PyAST_Import(a, EXTRA) } # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS import_from[stmt_ty]: @@ -163,6 +227,123 @@ dotted_name[expr_ty]: | a=dotted_name '.' b=NAME { _PyPegen_join_names_with_dot(p, a, b) } | NAME +# COMPOUND STATEMENTS +# =================== + +# Common elements +# --------------- + +block[asdl_stmt_seq*] (memo): + | NEWLINE INDENT a=statements DEDENT { a } + | simple_stmts + | invalid_block + +decorators[asdl_expr_seq*]: a[asdl_expr_seq*]=('@' f=named_expression NEWLINE { f })+ { a } + +# Class definitions +# ----------------- + +class_def[stmt_ty]: + | a=decorators b=class_def_raw { _PyPegen_class_def_decorators(p, a, b) } + | class_def_raw + +class_def_raw[stmt_ty]: + | invalid_class_def_raw + | 'class' a=NAME b=['(' z=[arguments] ')' { z }] &&':' c=block { + _PyAST_ClassDef(a->v.Name.id, + (b) ? ((expr_ty) b)->v.Call.args : NULL, + (b) ? ((expr_ty) b)->v.Call.keywords : NULL, + c, NULL, EXTRA) } + +# Function definitions +# -------------------- + +function_def[stmt_ty]: + | d=decorators f=function_def_raw { _PyPegen_function_def_decorators(p, d, f) } + | function_def_raw + +function_def_raw[stmt_ty]: + | invalid_def_raw + | 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { + _PyAST_FunctionDef(n->v.Name.id, + (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), + b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) } + | ASYNC 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { + CHECK_VERSION( + stmt_ty, + 5, + "Async functions are", + _PyAST_AsyncFunctionDef(n->v.Name.id, + (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), + b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) + ) } + +# Function parameters +# ------------------- + +params[arguments_ty]: + | invalid_parameters + | parameters + +parameters[arguments_ty]: + | a=slash_no_default b[asdl_arg_seq*]=param_no_default* c=param_with_default* d=[star_etc] { + _PyPegen_make_arguments(p, a, NULL, b, c, d) } + | a=slash_with_default b=param_with_default* c=[star_etc] { + _PyPegen_make_arguments(p, NULL, a, NULL, b, c) } + | a[asdl_arg_seq*]=param_no_default+ b=param_with_default* c=[star_etc] { + _PyPegen_make_arguments(p, NULL, NULL, a, b, c) } + | a=param_with_default+ b=[star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)} + | a=star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) } + +# Some duplication here because we can't write (',' | &')'), +# which is because we don't support empty alternatives (yet). + +slash_no_default[asdl_arg_seq*]: + | a[asdl_arg_seq*]=param_no_default+ '/' ',' { a } + | a[asdl_arg_seq*]=param_no_default+ '/' &')' { a } +slash_with_default[SlashWithDefault*]: + | a=param_no_default* b=param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } + | a=param_no_default* b=param_with_default+ '/' &')' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } + +star_etc[StarEtc*]: + | '*' a=param_no_default b=param_maybe_default* c=[kwds] { + _PyPegen_star_etc(p, a, b, c) } + | '*' ',' b=param_maybe_default+ c=[kwds] { + _PyPegen_star_etc(p, NULL, b, c) } + | a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) } + | invalid_star_etc + +kwds[arg_ty]: '**' a=param_no_default { a } + +# One parameter. This *includes* a following comma and type comment. +# +# There are three styles: +# - No default +# - With default +# - Maybe with default +# +# There are two alternative forms of each, to deal with type comments: +# - Ends in a comma followed by an optional type comment +# - No comma, optional type comment, must be followed by close paren +# The latter form is for a final parameter without trailing comma. +# + +param_no_default[arg_ty]: + | a=param ',' tc=TYPE_COMMENT? { _PyPegen_add_type_comment_to_arg(p, a, tc) } + | a=param tc=TYPE_COMMENT? &')' { _PyPegen_add_type_comment_to_arg(p, a, tc) } +param_with_default[NameDefaultPair*]: + | a=param c=default ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) } + | a=param c=default tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) } +param_maybe_default[NameDefaultPair*]: + | a=param c=default? ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) } + | a=param c=default? tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) } +param[arg_ty]: a=NAME b=annotation? { _PyAST_arg(a->v.Name.id, b, NULL, EXTRA) } +annotation[expr_ty]: ':' a=expression { a } +default[expr_ty]: '=' a=expression { a } + +# If statement +# ------------ + if_stmt[stmt_ty]: | invalid_if_stmt | 'if' a=named_expression ':' b=block c=elif_stmt { @@ -177,10 +358,16 @@ else_block[asdl_stmt_seq*]: | invalid_else_stmt | 'else' &&':' b=block { b } +# While statement +# --------------- + while_stmt[stmt_ty]: | invalid_while_stmt | 'while' a=named_expression ':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) } +# For statement +# ------------- + for_stmt[stmt_ty]: | invalid_for_stmt | 'for' t=star_targets 'in' ~ ex=star_expressions &&':' tc=[TYPE_COMMENT] b=block el=[else_block] { @@ -189,6 +376,9 @@ for_stmt[stmt_ty]: CHECK_VERSION(stmt_ty, 5, "Async for loops are", _PyAST_AsyncFor(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA)) } | invalid_for_target +# With statement +# -------------- + with_stmt[stmt_ty]: | invalid_with_stmt_indent | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block { @@ -206,10 +396,17 @@ with_item[withitem_ty]: | invalid_with_item | e=expression { _PyAST_withitem(e, NULL, p->arena) } +# Try statement +# ------------- + try_stmt[stmt_ty]: | invalid_try_stmt | 'try' &&':' b=block f=finally_block { _PyAST_Try(b, NULL, NULL, f, EXTRA) } | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_block+ el=[else_block] f=[finally_block] { _PyAST_Try(b, ex, el, f, EXTRA) } + +# Except statement +# ---------------- + except_block[excepthandler_ty]: | invalid_except_stmt_indent | 'except' e=expression t=['as' z=NAME { z }] ':' b=block { @@ -220,34 +417,44 @@ finally_block[asdl_stmt_seq*]: | invalid_finally_stmt | 'finally' &&':' a=block { a } +# Match statement +# --------------- + match_stmt[stmt_ty]: | "match" subject=subject_expr ':' NEWLINE INDENT cases[asdl_match_case_seq*]=case_block+ DEDENT { CHECK_VERSION(stmt_ty, 10, "Pattern matching is", _PyAST_Match(subject, cases, EXTRA)) } | invalid_match_stmt + subject_expr[expr_ty]: | value=star_named_expression ',' values=star_named_expressions? { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, value, values)), Load, EXTRA) } | named_expression + case_block[match_case_ty]: | invalid_case_block | "case" pattern=patterns guard=guard? ':' body=block { _PyAST_match_case(pattern, guard, body, p->arena) } + guard[expr_ty]: 'if' guard=named_expression { guard } patterns[pattern_ty]: | patterns[asdl_pattern_seq*]=open_sequence_pattern { _PyAST_MatchSequence(patterns, EXTRA) } | pattern + pattern[pattern_ty]: | as_pattern | or_pattern + as_pattern[pattern_ty]: | pattern=or_pattern 'as' target=pattern_capture_target { _PyAST_MatchAs(pattern, target->v.Name.id, EXTRA) } | invalid_as_pattern + or_pattern[pattern_ty]: | patterns[asdl_pattern_seq*]='|'.closed_pattern+ { asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _PyAST_MatchOr(patterns, EXTRA) } + closed_pattern[pattern_ty]: | literal_pattern | capture_pattern @@ -308,9 +515,11 @@ wildcard_pattern[pattern_ty]: value_pattern[pattern_ty]: | attr=attr !('.' | '(' | '=') { _PyAST_MatchValue(attr, EXTRA) } + attr[expr_ty]: | value=name_or_attr '.' attr=NAME { _PyAST_Attribute(value, attr->v.Name.id, Load, EXTRA) } + name_or_attr[expr_ty]: | attr | NAME @@ -321,14 +530,18 @@ group_pattern[pattern_ty]: sequence_pattern[pattern_ty]: | '[' patterns=maybe_sequence_pattern? ']' { _PyAST_MatchSequence(patterns, EXTRA) } | '(' patterns=open_sequence_pattern? ')' { _PyAST_MatchSequence(patterns, EXTRA) } + open_sequence_pattern[asdl_seq*]: | pattern=maybe_star_pattern ',' patterns=maybe_sequence_pattern? { _PyPegen_seq_insert_in_front(p, pattern, patterns) } + maybe_sequence_pattern[asdl_seq*]: | patterns=','.maybe_star_pattern+ ','? { patterns } + maybe_star_pattern[pattern_ty]: | star_pattern | pattern + star_pattern[pattern_ty]: | '*' target=pattern_capture_target { _PyAST_MatchStar(target->v.Name.id, EXTRA) } @@ -352,11 +565,14 @@ mapping_pattern[pattern_ty]: CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, items)), NULL, EXTRA) } + items_pattern[asdl_seq*]: | ','.key_value_pattern+ + key_value_pattern[KeyPatternPair*]: | key=(literal_expr | attr) ':' pattern=pattern { _PyPegen_key_pattern_pair(p, key, pattern) } + double_star_pattern[expr_ty]: | '**' target=pattern_capture_target { target } @@ -381,137 +597,51 @@ class_pattern[pattern_ty]: CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)), EXTRA) } | invalid_class_pattern + positional_patterns[asdl_pattern_seq*]: | args[asdl_pattern_seq*]=','.pattern+ { args } + keyword_patterns[asdl_seq*]: | ','.keyword_pattern+ + keyword_pattern[KeyPatternPair*]: | arg=NAME '=' value=pattern { _PyPegen_key_pattern_pair(p, arg, value) } -return_stmt[stmt_ty]: - | 'return' a=[star_expressions] { _PyAST_Return(a, EXTRA) } +# EXPRESSIONS +# ----------- -raise_stmt[stmt_ty]: - | 'raise' a=expression b=['from' z=expression { z }] { _PyAST_Raise(a, b, EXTRA) } - | 'raise' { _PyAST_Raise(NULL, NULL, EXTRA) } +expressions[expr_ty]: + | a=expression b=(',' c=expression { c })+ [','] { + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } + | a=expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } + | expression -function_def[stmt_ty]: - | d=decorators f=function_def_raw { _PyPegen_function_def_decorators(p, d, f) } - | function_def_raw +expression[expr_ty] (memo): + | invalid_expression + | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) } + | disjunction + | lambdef -function_def_raw[stmt_ty]: - | invalid_def_raw - | 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { - _PyAST_FunctionDef(n->v.Name.id, - (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), - b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) } - | ASYNC 'def' n=NAME '(' params=[params] ')' a=['->' z=expression { z }] &&':' tc=[func_type_comment] b=block { - CHECK_VERSION( - stmt_ty, - 5, - "Async functions are", - _PyAST_AsyncFunctionDef(n->v.Name.id, - (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), - b, NULL, a, NEW_TYPE_COMMENT(p, tc), EXTRA) - ) } -func_type_comment[Token*]: - | NEWLINE t=TYPE_COMMENT &(NEWLINE INDENT) { t } # Must be followed by indented block - | invalid_double_type_comments - | TYPE_COMMENT +yield_expr[expr_ty]: + | 'yield' 'from' a=expression { _PyAST_YieldFrom(a, EXTRA) } + | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) } -params[arguments_ty]: - | invalid_parameters - | parameters +star_expressions[expr_ty]: + | a=star_expression b=(',' c=star_expression { c })+ [','] { + _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } + | a=star_expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } + | star_expression -parameters[arguments_ty]: - | a=slash_no_default b[asdl_arg_seq*]=param_no_default* c=param_with_default* d=[star_etc] { - _PyPegen_make_arguments(p, a, NULL, b, c, d) } - | a=slash_with_default b=param_with_default* c=[star_etc] { - _PyPegen_make_arguments(p, NULL, a, NULL, b, c) } - | a[asdl_arg_seq*]=param_no_default+ b=param_with_default* c=[star_etc] { - _PyPegen_make_arguments(p, NULL, NULL, a, b, c) } - | a=param_with_default+ b=[star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)} - | a=star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) } +star_expression[expr_ty] (memo): + | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } + | expression -# Some duplication here because we can't write (',' | &')'), -# which is because we don't support empty alternatives (yet). -# -slash_no_default[asdl_arg_seq*]: - | a[asdl_arg_seq*]=param_no_default+ '/' ',' { a } - | a[asdl_arg_seq*]=param_no_default+ '/' &')' { a } -slash_with_default[SlashWithDefault*]: - | a=param_no_default* b=param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } - | a=param_no_default* b=param_with_default+ '/' &')' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } +star_named_expressions[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_named_expression+ [','] { a } -star_etc[StarEtc*]: - | '*' a=param_no_default b=param_maybe_default* c=[kwds] { - _PyPegen_star_etc(p, a, b, c) } - | '*' ',' b=param_maybe_default+ c=[kwds] { - _PyPegen_star_etc(p, NULL, b, c) } - | a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) } - | invalid_star_etc - -kwds[arg_ty]: '**' a=param_no_default { a } - -# One parameter. This *includes* a following comma and type comment. -# -# There are three styles: -# - No default -# - With default -# - Maybe with default -# -# There are two alternative forms of each, to deal with type comments: -# - Ends in a comma followed by an optional type comment -# - No comma, optional type comment, must be followed by close paren -# The latter form is for a final parameter without trailing comma. -# -param_no_default[arg_ty]: - | a=param ',' tc=TYPE_COMMENT? { _PyPegen_add_type_comment_to_arg(p, a, tc) } - | a=param tc=TYPE_COMMENT? &')' { _PyPegen_add_type_comment_to_arg(p, a, tc) } -param_with_default[NameDefaultPair*]: - | a=param c=default ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) } - | a=param c=default tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) } -param_maybe_default[NameDefaultPair*]: - | a=param c=default? ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) } - | a=param c=default? tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) } -param[arg_ty]: a=NAME b=annotation? { _PyAST_arg(a->v.Name.id, b, NULL, EXTRA) } - -annotation[expr_ty]: ':' a=expression { a } -default[expr_ty]: '=' a=expression { a } - -decorators[asdl_expr_seq*]: a[asdl_expr_seq*]=('@' f=named_expression NEWLINE { f })+ { a } - -class_def[stmt_ty]: - | a=decorators b=class_def_raw { _PyPegen_class_def_decorators(p, a, b) } - | class_def_raw -class_def_raw[stmt_ty]: - | invalid_class_def_raw - | 'class' a=NAME b=['(' z=[arguments] ')' { z }] &&':' c=block { - _PyAST_ClassDef(a->v.Name.id, - (b) ? ((expr_ty) b)->v.Call.args : NULL, - (b) ? ((expr_ty) b)->v.Call.keywords : NULL, - c, NULL, EXTRA) } - -block[asdl_stmt_seq*] (memo): - | NEWLINE INDENT a=statements DEDENT { a } - | simple_stmts - | invalid_block - -star_expressions[expr_ty]: - | a=star_expression b=(',' c=star_expression { c })+ [','] { - _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } - | a=star_expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } - | star_expression -star_expression[expr_ty] (memo): - | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } - | expression - -star_named_expressions[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_named_expression+ [','] { a } star_named_expression[expr_ty]: | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) } | named_expression - assigment_expression[expr_ty]: | a=NAME ':=' ~ b=expression { _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA) } @@ -520,84 +650,27 @@ named_expression[expr_ty]: | invalid_named_expression | expression !':=' -annotated_rhs[expr_ty]: yield_expr | star_expressions - -expressions[expr_ty]: - | a=expression b=(',' c=expression { c })+ [','] { - _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) } - | a=expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) } - | expression -expression[expr_ty] (memo): - | invalid_expression - | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) } - | disjunction - | lambdef - -lambdef[expr_ty]: - | 'lambda' a=[lambda_params] ':' b=expression { - _PyAST_Lambda((a) ? a : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, EXTRA) } - -lambda_params[arguments_ty]: - | invalid_lambda_parameters - | lambda_parameters - -# lambda_parameters etc. duplicates parameters but without annotations -# or type comments, and if there's no comma after a parameter, we expect -# a colon, not a close parenthesis. (For more, see parameters above.) -# -lambda_parameters[arguments_ty]: - | a=lambda_slash_no_default b[asdl_arg_seq*]=lambda_param_no_default* c=lambda_param_with_default* d=[lambda_star_etc] { - _PyPegen_make_arguments(p, a, NULL, b, c, d) } - | a=lambda_slash_with_default b=lambda_param_with_default* c=[lambda_star_etc] { - _PyPegen_make_arguments(p, NULL, a, NULL, b, c) } - | a[asdl_arg_seq*]=lambda_param_no_default+ b=lambda_param_with_default* c=[lambda_star_etc] { - _PyPegen_make_arguments(p, NULL, NULL, a, b, c) } - | a=lambda_param_with_default+ b=[lambda_star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)} - | a=lambda_star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) } - -lambda_slash_no_default[asdl_arg_seq*]: - | a[asdl_arg_seq*]=lambda_param_no_default+ '/' ',' { a } - | a[asdl_arg_seq*]=lambda_param_no_default+ '/' &':' { a } -lambda_slash_with_default[SlashWithDefault*]: - | a=lambda_param_no_default* b=lambda_param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } - | a=lambda_param_no_default* b=lambda_param_with_default+ '/' &':' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } - -lambda_star_etc[StarEtc*]: - | '*' a=lambda_param_no_default b=lambda_param_maybe_default* c=[lambda_kwds] { - _PyPegen_star_etc(p, a, b, c) } - | '*' ',' b=lambda_param_maybe_default+ c=[lambda_kwds] { - _PyPegen_star_etc(p, NULL, b, c) } - | a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) } - | invalid_lambda_star_etc - -lambda_kwds[arg_ty]: '**' a=lambda_param_no_default { a } - -lambda_param_no_default[arg_ty]: - | a=lambda_param ',' { a } - | a=lambda_param &':' { a } -lambda_param_with_default[NameDefaultPair*]: - | a=lambda_param c=default ',' { _PyPegen_name_default_pair(p, a, c, NULL) } - | a=lambda_param c=default &':' { _PyPegen_name_default_pair(p, a, c, NULL) } -lambda_param_maybe_default[NameDefaultPair*]: - | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) } - | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) } -lambda_param[arg_ty]: a=NAME { _PyAST_arg(a->v.Name.id, NULL, NULL, EXTRA) } - disjunction[expr_ty] (memo): | a=conjunction b=('or' c=conjunction { c })+ { _PyAST_BoolOp( Or, CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) } | conjunction + conjunction[expr_ty] (memo): | a=inversion b=('and' c=inversion { c })+ { _PyAST_BoolOp( And, CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), EXTRA) } | inversion + inversion[expr_ty] (memo): | 'not' a=inversion { _PyAST_UnaryOp(Not, a, EXTRA) } | comparison + +# Comparisons operators +# --------------------- + comparison[expr_ty]: | a=bitwise_or b=compare_op_bitwise_or_pair+ { _PyAST_Compare( @@ -606,6 +679,7 @@ comparison[expr_ty]: CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)), EXTRA) } | bitwise_or + compare_op_bitwise_or_pair[CmpopExprPair*]: | eq_bitwise_or | noteq_bitwise_or @@ -617,6 +691,7 @@ compare_op_bitwise_or_pair[CmpopExprPair*]: | in_bitwise_or | isnot_bitwise_or | is_bitwise_or + eq_bitwise_or[CmpopExprPair*]: '==' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Eq, a) } noteq_bitwise_or[CmpopExprPair*]: | (tok='!=' { _PyPegen_check_barry_as_flufl(p, tok) ? NULL : tok}) a=bitwise_or {_PyPegen_cmpop_expr_pair(p, NotEq, a) } @@ -629,24 +704,34 @@ in_bitwise_or[CmpopExprPair*]: 'in' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, I isnot_bitwise_or[CmpopExprPair*]: 'is' 'not' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, IsNot, a) } is_bitwise_or[CmpopExprPair*]: 'is' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Is, a) } +# Logical operators +# ----------------- + bitwise_or[expr_ty]: | a=bitwise_or '|' b=bitwise_xor { _PyAST_BinOp(a, BitOr, b, EXTRA) } | bitwise_xor + bitwise_xor[expr_ty]: | a=bitwise_xor '^' b=bitwise_and { _PyAST_BinOp(a, BitXor, b, EXTRA) } | bitwise_and + bitwise_and[expr_ty]: | a=bitwise_and '&' b=shift_expr { _PyAST_BinOp(a, BitAnd, b, EXTRA) } | shift_expr + shift_expr[expr_ty]: | a=shift_expr '<<' b=sum { _PyAST_BinOp(a, LShift, b, EXTRA) } | a=shift_expr '>>' b=sum { _PyAST_BinOp(a, RShift, b, EXTRA) } | sum +# Arithmetic operators +# -------------------- + sum[expr_ty]: | a=sum '+' b=term { _PyAST_BinOp(a, Add, b, EXTRA) } | a=sum '-' b=term { _PyAST_BinOp(a, Sub, b, EXTRA) } | term + term[expr_ty]: | a=term '*' b=factor { _PyAST_BinOp(a, Mult, b, EXTRA) } | a=term '/' b=factor { _PyAST_BinOp(a, Div, b, EXTRA) } @@ -654,17 +739,26 @@ term[expr_ty]: | a=term '%' b=factor { _PyAST_BinOp(a, Mod, b, EXTRA) } | a=term '@' b=factor { CHECK_VERSION(expr_ty, 5, "The '@' operator is", _PyAST_BinOp(a, MatMult, b, EXTRA)) } | factor + factor[expr_ty] (memo): | '+' a=factor { _PyAST_UnaryOp(UAdd, a, EXTRA) } | '-' a=factor { _PyAST_UnaryOp(USub, a, EXTRA) } | '~' a=factor { _PyAST_UnaryOp(Invert, a, EXTRA) } | power + power[expr_ty]: | a=await_primary '**' b=factor { _PyAST_BinOp(a, Pow, b, EXTRA) } | await_primary + +# Primary elements +# ---------------- + +# Primary elements are things like "obj.something.something", "obj[something]", "obj(something)", "obj" ... + await_primary[expr_ty] (memo): | AWAIT a=primary { CHECK_VERSION(expr_ty, 5, "Await expressions are", _PyAST_Await(a, EXTRA)) } | primary + primary[expr_ty]: | a=primary '.' b=NAME { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) } | a=primary b=genexp { _PyAST_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) } @@ -679,9 +773,11 @@ primary[expr_ty]: slices[expr_ty]: | a=slice !',' { a } | a[asdl_expr_seq*]=','.slice+ [','] { _PyAST_Tuple(a, Load, EXTRA) } + slice[expr_ty]: | a=[expression] ':' b=[expression] c=[':' d=[expression] { d }] { _PyAST_Slice(a, b, c, EXTRA) } | a=named_expression { a } + atom[expr_ty]: | NAME | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) } @@ -694,25 +790,81 @@ atom[expr_ty]: | &'{' (dict | set | dictcomp | setcomp) | '...' { _PyAST_Constant(Py_Ellipsis, NULL, EXTRA) } +group[expr_ty]: + | '(' a=(yield_expr | named_expression) ')' { a } + | invalid_group + +# Lambda functions +# ---------------- + +lambdef[expr_ty]: + | 'lambda' a=[lambda_params] ':' b=expression { + _PyAST_Lambda((a) ? a : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, EXTRA) } + +lambda_params[arguments_ty]: + | invalid_lambda_parameters + | lambda_parameters + +# lambda_parameters etc. duplicates parameters but without annotations +# or type comments, and if there's no comma after a parameter, we expect +# a colon, not a close parenthesis. (For more, see parameters above.) +# +lambda_parameters[arguments_ty]: + | a=lambda_slash_no_default b[asdl_arg_seq*]=lambda_param_no_default* c=lambda_param_with_default* d=[lambda_star_etc] { + _PyPegen_make_arguments(p, a, NULL, b, c, d) } + | a=lambda_slash_with_default b=lambda_param_with_default* c=[lambda_star_etc] { + _PyPegen_make_arguments(p, NULL, a, NULL, b, c) } + | a[asdl_arg_seq*]=lambda_param_no_default+ b=lambda_param_with_default* c=[lambda_star_etc] { + _PyPegen_make_arguments(p, NULL, NULL, a, b, c) } + | a=lambda_param_with_default+ b=[lambda_star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)} + | a=lambda_star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) } + +lambda_slash_no_default[asdl_arg_seq*]: + | a[asdl_arg_seq*]=lambda_param_no_default+ '/' ',' { a } + | a[asdl_arg_seq*]=lambda_param_no_default+ '/' &':' { a } + +lambda_slash_with_default[SlashWithDefault*]: + | a=lambda_param_no_default* b=lambda_param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } + | a=lambda_param_no_default* b=lambda_param_with_default+ '/' &':' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) } + +lambda_star_etc[StarEtc*]: + | '*' a=lambda_param_no_default b=lambda_param_maybe_default* c=[lambda_kwds] { + _PyPegen_star_etc(p, a, b, c) } + | '*' ',' b=lambda_param_maybe_default+ c=[lambda_kwds] { + _PyPegen_star_etc(p, NULL, b, c) } + | a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) } + | invalid_lambda_star_etc + +lambda_kwds[arg_ty]: '**' a=lambda_param_no_default { a } + +lambda_param_no_default[arg_ty]: + | a=lambda_param ',' { a } + | a=lambda_param &':' { a } +lambda_param_with_default[NameDefaultPair*]: + | a=lambda_param c=default ',' { _PyPegen_name_default_pair(p, a, c, NULL) } + | a=lambda_param c=default &':' { _PyPegen_name_default_pair(p, a, c, NULL) } +lambda_param_maybe_default[NameDefaultPair*]: + | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) } + | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) } +lambda_param[arg_ty]: a=NAME { _PyAST_arg(a->v.Name.id, NULL, NULL, EXTRA) } + +# LITERALS +# ======== + strings[expr_ty] (memo): a=STRING+ { _PyPegen_concatenate_strings(p, a) } + list[expr_ty]: | '[' a=[star_named_expressions] ']' { _PyAST_List(a, Load, EXTRA) } -listcomp[expr_ty]: - | '[' a=named_expression b=for_if_clauses ']' { _PyAST_ListComp(a, b, EXTRA) } - | invalid_comprehension + tuple[expr_ty]: | '(' a=[y=star_named_expression ',' z=[star_named_expressions] { _PyPegen_seq_insert_in_front(p, y, z) } ] ')' { _PyAST_Tuple(a, Load, EXTRA) } -group[expr_ty]: - | '(' a=(yield_expr | named_expression) ')' { a } - | invalid_group -genexp[expr_ty]: - | '(' a=( assigment_expression | expression !':=') b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) } - | invalid_comprehension + set[expr_ty]: '{' a=star_named_expressions '}' { _PyAST_Set(a, EXTRA) } -setcomp[expr_ty]: - | '{' a=named_expression b=for_if_clauses '}' { _PyAST_SetComp(a, b, EXTRA) } - | invalid_comprehension + +# Dicts +# ----- + dict[expr_ty]: | '{' a=[double_starred_kvpairs] '}' { _PyAST_Dict( @@ -721,16 +873,20 @@ dict[expr_ty]: EXTRA) } | '{' invalid_double_starred_kvpairs '}' -dictcomp[expr_ty]: - | '{' a=kvpair b=for_if_clauses '}' { _PyAST_DictComp(a->key, a->value, b, EXTRA) } - | invalid_dict_comprehension double_starred_kvpairs[asdl_seq*]: a=','.double_starred_kvpair+ [','] { a } + double_starred_kvpair[KeyValuePair*]: | '**' a=bitwise_or { _PyPegen_key_value_pair(p, NULL, a) } | kvpair + kvpair[KeyValuePair*]: a=expression ':' b=expression { _PyPegen_key_value_pair(p, a, b) } + +# Comprehensions & Generators +# --------------------------- + for_if_clauses[asdl_comprehension_seq*]: | a[asdl_comprehension_seq*]=for_if_clause+ { a } + for_if_clause[comprehension_ty]: | ASYNC 'for' a=star_targets 'in' ~ b=disjunction c[asdl_expr_seq*]=('if' z=disjunction { z })* { CHECK_VERSION(comprehension_ty, 6, "Async comprehensions are", _PyAST_comprehension(a, b, c, 1, p->arena)) } @@ -738,13 +894,29 @@ for_if_clause[comprehension_ty]: _PyAST_comprehension(a, b, c, 0, p->arena) } | invalid_for_target -yield_expr[expr_ty]: - | 'yield' 'from' a=expression { _PyAST_YieldFrom(a, EXTRA) } - | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) } +listcomp[expr_ty]: + | '[' a=named_expression b=for_if_clauses ']' { _PyAST_ListComp(a, b, EXTRA) } + | invalid_comprehension + +setcomp[expr_ty]: + | '{' a=named_expression b=for_if_clauses '}' { _PyAST_SetComp(a, b, EXTRA) } + | invalid_comprehension + +genexp[expr_ty]: + | '(' a=( assigment_expression | expression !':=') b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) } + | invalid_comprehension + +dictcomp[expr_ty]: + | '{' a=kvpair b=for_if_clauses '}' { _PyAST_DictComp(a->key, a->value, b, EXTRA) } + | invalid_dict_comprehension + +# FUNCTION CALL ARGUMENTS +# ======================= arguments[expr_ty] (memo): | a=args [','] &')' { a } | invalid_arguments + args[expr_ty]: | a[asdl_expr_seq*]=','.(starred_expression | ( assigment_expression | expression !':=') !'=')+ b=[',' k=kwargs {k}] { _PyPegen_collect_call_seqs(p, a, b, EXTRA) } @@ -757,36 +929,50 @@ kwargs[asdl_seq*]: | a=','.kwarg_or_starred+ ',' b=','.kwarg_or_double_starred+ { _PyPegen_join_sequences(p, a, b) } | ','.kwarg_or_starred+ | ','.kwarg_or_double_starred+ + starred_expression[expr_ty]: | '*' a=expression { _PyAST_Starred(a, Load, EXTRA) } + kwarg_or_starred[KeywordOrStarred*]: | invalid_kwarg | a=NAME '=' b=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) } | a=starred_expression { _PyPegen_keyword_or_starred(p, a, 0) } + kwarg_or_double_starred[KeywordOrStarred*]: | invalid_kwarg | a=NAME '=' b=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) } | '**' a=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(NULL, a, EXTRA)), 1) } +# ASSIGNMENT TARGETS +# ================== + +# Generic targets +# --------------- + # NOTE: star_targets may contain *bitwise_or, targets may not. star_targets[expr_ty]: | a=star_target !',' { a } | a=star_target b=(',' c=star_target { c })* [','] { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Store, EXTRA) } + star_targets_list_seq[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_target+ [','] { a } + star_targets_tuple_seq[asdl_expr_seq*]: | a=star_target b=(',' c=star_target { c })+ [','] { (asdl_expr_seq*) _PyPegen_seq_insert_in_front(p, a, b) } | a=star_target ',' { (asdl_expr_seq*) _PyPegen_singleton_seq(p, a) } + star_target[expr_ty] (memo): | '*' a=(!'*' star_target) { _PyAST_Starred(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), Store, EXTRA) } | target_with_star_atom + target_with_star_atom[expr_ty] (memo): | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) } | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) } | star_atom + star_atom[expr_ty]: | a=NAME { _PyPegen_set_expr_context(p, a, Store) } | '(' a=target_with_star_atom ')' { _PyPegen_set_expr_context(p, a, Store) } @@ -797,21 +983,11 @@ single_target[expr_ty]: | single_subscript_attribute_target | a=NAME { _PyPegen_set_expr_context(p, a, Store) } | '(' a=single_target ')' { a } + single_subscript_attribute_target[expr_ty]: | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) } | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) } -del_targets[asdl_expr_seq*]: a[asdl_expr_seq*]=','.del_target+ [','] { a } -del_target[expr_ty] (memo): - | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Del, EXTRA) } - | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Del, EXTRA) } - | del_t_atom -del_t_atom[expr_ty]: - | a=NAME { _PyPegen_set_expr_context(p, a, Del) } - | '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) } - | '(' a=[del_targets] ')' { _PyAST_Tuple(a, Del, EXTRA) } - | '[' a=[del_targets] ']' { _PyAST_List(a, Del, EXTRA) } - t_primary[expr_ty]: | a=t_primary '.' b=NAME &t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) } | a=t_primary '[' b=slices ']' &t_lookahead { _PyAST_Subscript(a, b, Load, EXTRA) } @@ -823,8 +999,57 @@ t_primary[expr_ty]: (b) ? ((expr_ty) b)->v.Call.keywords : NULL, EXTRA) } | a=atom &t_lookahead { a } + t_lookahead: '(' | '[' | '.' +# Targets for del statements +# -------------------------- + +del_targets[asdl_expr_seq*]: a[asdl_expr_seq*]=','.del_target+ [','] { a } + +del_target[expr_ty] (memo): + | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Del, EXTRA) } + | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Del, EXTRA) } + | del_t_atom + +del_t_atom[expr_ty]: + | a=NAME { _PyPegen_set_expr_context(p, a, Del) } + | '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) } + | '(' a=[del_targets] ')' { _PyAST_Tuple(a, Del, EXTRA) } + | '[' a=[del_targets] ']' { _PyAST_List(a, Del, EXTRA) } + +# TYPING ELEMENTS +# --------------- + +# type_expressions allow */** but ignore them +type_expressions[asdl_expr_seq*]: + | a=','.expression+ ',' '*' b=expression ',' '**' c=expression { + (asdl_expr_seq*)_PyPegen_seq_append_to_end( + p, + CHECK(asdl_seq*, _PyPegen_seq_append_to_end(p, a, b)), + c) } + | a=','.expression+ ',' '*' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) } + | a=','.expression+ ',' '**' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) } + | '*' a=expression ',' '**' b=expression { + (asdl_expr_seq*)_PyPegen_seq_append_to_end( + p, + CHECK(asdl_seq*, _PyPegen_singleton_seq(p, a)), + b) } + | '*' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) } + | '**' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) } + | a[asdl_expr_seq*]=','.expression+ {a} + +func_type_comment[Token*]: + | NEWLINE t=TYPE_COMMENT &(NEWLINE INDENT) { t } # Must be followed by indented block + | invalid_double_type_comments + | TYPE_COMMENT + +# ========================= END OF THE GRAMMAR =========================== + + + +# ========================= START OF INVALID RULES ======================= + # From here on, there are rules for invalid syntax with specialised error messages invalid_arguments: | a=args ',' '*' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "iterable argument unpacking follows keyword argument unpacking") } diff --git a/Parser/parser.c b/Parser/parser.c index d01d2b8..c05fc31 100644 --- a/Parser/parser.c +++ b/Parser/parser.c @@ -12,29 +12,29 @@ static KeywordToken *reserved_keywords[] = { (KeywordToken[]) {{NULL, -1}}, (KeywordToken[]) { {"if", 510}, - {"in", 518}, - {"as", 520}, - {"is", 530}, + {"in", 520}, + {"as", 522}, + {"is", 529}, {"or", 531}, {NULL, -1}, }, (KeywordToken[]) { {"del", 503}, {"try", 511}, - {"for", 517}, - {"def", 526}, - {"not", 529}, + {"def", 516}, + {"for", 519}, + {"not", 528}, {"and", 532}, {NULL, -1}, }, (KeywordToken[]) { {"pass", 502}, {"from", 514}, - {"elif", 515}, - {"else", 516}, - {"with", 519}, - {"None", 523}, - {"True", 524}, + {"elif", 517}, + {"else", 518}, + {"with", 521}, + {"None", 525}, + {"True", 526}, {NULL, -1}, }, (KeywordToken[]) { @@ -42,8 +42,8 @@ static KeywordToken *reserved_keywords[] = { {"yield", 504}, {"break", 506}, {"while", 512}, - {"False", 525}, - {"class", 527}, + {"class", 515}, + {"False", 527}, {NULL, -1}, }, (KeywordToken[]) { @@ -51,12 +51,12 @@ static KeywordToken *reserved_keywords[] = { {"assert", 505}, {"global", 508}, {"import", 513}, - {"except", 521}, - {"lambda", 528}, + {"except", 523}, + {"lambda", 530}, {NULL, -1}, }, (KeywordToken[]) { - {"finally", 522}, + {"finally", 524}, {NULL, -1}, }, (KeywordToken[]) { @@ -76,179 +76,179 @@ static char *soft_keywords[] = { #define eval_type 1002 #define func_type_type 1003 #define fstring_type 1004 -#define type_expressions_type 1005 -#define statements_type 1006 -#define statement_type 1007 -#define statement_newline_type 1008 -#define simple_stmts_type 1009 -#define simple_stmt_type 1010 -#define compound_stmt_type 1011 -#define assignment_type 1012 +#define statements_type 1005 +#define statement_type 1006 +#define statement_newline_type 1007 +#define simple_stmts_type 1008 +#define simple_stmt_type 1009 +#define compound_stmt_type 1010 +#define assignment_type 1011 +#define annotated_rhs_type 1012 #define augassign_type 1013 -#define global_stmt_type 1014 -#define nonlocal_stmt_type 1015 -#define yield_stmt_type 1016 -#define assert_stmt_type 1017 +#define return_stmt_type 1014 +#define raise_stmt_type 1015 +#define global_stmt_type 1016 +#define nonlocal_stmt_type 1017 #define del_stmt_type 1018 -#define import_stmt_type 1019 -#define import_name_type 1020 -#define import_from_type 1021 -#define import_from_targets_type 1022 -#define import_from_as_names_type 1023 -#define import_from_as_name_type 1024 -#define dotted_as_names_type 1025 -#define dotted_as_name_type 1026 -#define dotted_name_type 1027 // Left-recursive -#define if_stmt_type 1028 -#define elif_stmt_type 1029 -#define else_block_type 1030 -#define while_stmt_type 1031 -#define for_stmt_type 1032 -#define with_stmt_type 1033 -#define with_item_type 1034 -#define try_stmt_type 1035 -#define except_block_type 1036 -#define finally_block_type 1037 -#define match_stmt_type 1038 -#define subject_expr_type 1039 -#define case_block_type 1040 -#define guard_type 1041 -#define patterns_type 1042 -#define pattern_type 1043 -#define as_pattern_type 1044 -#define or_pattern_type 1045 -#define closed_pattern_type 1046 -#define literal_pattern_type 1047 -#define literal_expr_type 1048 -#define complex_number_type 1049 -#define signed_number_type 1050 -#define signed_real_number_type 1051 -#define real_number_type 1052 -#define imaginary_number_type 1053 -#define capture_pattern_type 1054 -#define pattern_capture_target_type 1055 -#define wildcard_pattern_type 1056 -#define value_pattern_type 1057 -#define attr_type 1058 // Left-recursive -#define name_or_attr_type 1059 // Left-recursive -#define group_pattern_type 1060 -#define sequence_pattern_type 1061 -#define open_sequence_pattern_type 1062 -#define maybe_sequence_pattern_type 1063 -#define maybe_star_pattern_type 1064 -#define star_pattern_type 1065 -#define mapping_pattern_type 1066 -#define items_pattern_type 1067 -#define key_value_pattern_type 1068 -#define double_star_pattern_type 1069 -#define class_pattern_type 1070 -#define positional_patterns_type 1071 -#define keyword_patterns_type 1072 -#define keyword_pattern_type 1073 -#define return_stmt_type 1074 -#define raise_stmt_type 1075 -#define function_def_type 1076 -#define function_def_raw_type 1077 -#define func_type_comment_type 1078 -#define params_type 1079 -#define parameters_type 1080 -#define slash_no_default_type 1081 -#define slash_with_default_type 1082 -#define star_etc_type 1083 -#define kwds_type 1084 -#define param_no_default_type 1085 -#define param_with_default_type 1086 -#define param_maybe_default_type 1087 -#define param_type 1088 -#define annotation_type 1089 -#define default_type 1090 -#define decorators_type 1091 -#define class_def_type 1092 -#define class_def_raw_type 1093 -#define block_type 1094 -#define star_expressions_type 1095 -#define star_expression_type 1096 -#define star_named_expressions_type 1097 -#define star_named_expression_type 1098 -#define assigment_expression_type 1099 -#define named_expression_type 1100 -#define annotated_rhs_type 1101 -#define expressions_type 1102 -#define expression_type 1103 -#define lambdef_type 1104 -#define lambda_params_type 1105 -#define lambda_parameters_type 1106 -#define lambda_slash_no_default_type 1107 -#define lambda_slash_with_default_type 1108 -#define lambda_star_etc_type 1109 -#define lambda_kwds_type 1110 -#define lambda_param_no_default_type 1111 -#define lambda_param_with_default_type 1112 -#define lambda_param_maybe_default_type 1113 -#define lambda_param_type 1114 -#define disjunction_type 1115 -#define conjunction_type 1116 -#define inversion_type 1117 -#define comparison_type 1118 -#define compare_op_bitwise_or_pair_type 1119 -#define eq_bitwise_or_type 1120 -#define noteq_bitwise_or_type 1121 -#define lte_bitwise_or_type 1122 -#define lt_bitwise_or_type 1123 -#define gte_bitwise_or_type 1124 -#define gt_bitwise_or_type 1125 -#define notin_bitwise_or_type 1126 -#define in_bitwise_or_type 1127 -#define isnot_bitwise_or_type 1128 -#define is_bitwise_or_type 1129 -#define bitwise_or_type 1130 // Left-recursive -#define bitwise_xor_type 1131 // Left-recursive -#define bitwise_and_type 1132 // Left-recursive -#define shift_expr_type 1133 // Left-recursive -#define sum_type 1134 // Left-recursive -#define term_type 1135 // Left-recursive -#define factor_type 1136 -#define power_type 1137 -#define await_primary_type 1138 -#define primary_type 1139 // Left-recursive -#define slices_type 1140 -#define slice_type 1141 -#define atom_type 1142 +#define yield_stmt_type 1019 +#define assert_stmt_type 1020 +#define import_stmt_type 1021 +#define import_name_type 1022 +#define import_from_type 1023 +#define import_from_targets_type 1024 +#define import_from_as_names_type 1025 +#define import_from_as_name_type 1026 +#define dotted_as_names_type 1027 +#define dotted_as_name_type 1028 +#define dotted_name_type 1029 // Left-recursive +#define block_type 1030 +#define decorators_type 1031 +#define class_def_type 1032 +#define class_def_raw_type 1033 +#define function_def_type 1034 +#define function_def_raw_type 1035 +#define params_type 1036 +#define parameters_type 1037 +#define slash_no_default_type 1038 +#define slash_with_default_type 1039 +#define star_etc_type 1040 +#define kwds_type 1041 +#define param_no_default_type 1042 +#define param_with_default_type 1043 +#define param_maybe_default_type 1044 +#define param_type 1045 +#define annotation_type 1046 +#define default_type 1047 +#define if_stmt_type 1048 +#define elif_stmt_type 1049 +#define else_block_type 1050 +#define while_stmt_type 1051 +#define for_stmt_type 1052 +#define with_stmt_type 1053 +#define with_item_type 1054 +#define try_stmt_type 1055 +#define except_block_type 1056 +#define finally_block_type 1057 +#define match_stmt_type 1058 +#define subject_expr_type 1059 +#define case_block_type 1060 +#define guard_type 1061 +#define patterns_type 1062 +#define pattern_type 1063 +#define as_pattern_type 1064 +#define or_pattern_type 1065 +#define closed_pattern_type 1066 +#define literal_pattern_type 1067 +#define literal_expr_type 1068 +#define complex_number_type 1069 +#define signed_number_type 1070 +#define signed_real_number_type 1071 +#define real_number_type 1072 +#define imaginary_number_type 1073 +#define capture_pattern_type 1074 +#define pattern_capture_target_type 1075 +#define wildcard_pattern_type 1076 +#define value_pattern_type 1077 +#define attr_type 1078 // Left-recursive +#define name_or_attr_type 1079 // Left-recursive +#define group_pattern_type 1080 +#define sequence_pattern_type 1081 +#define open_sequence_pattern_type 1082 +#define maybe_sequence_pattern_type 1083 +#define maybe_star_pattern_type 1084 +#define star_pattern_type 1085 +#define mapping_pattern_type 1086 +#define items_pattern_type 1087 +#define key_value_pattern_type 1088 +#define double_star_pattern_type 1089 +#define class_pattern_type 1090 +#define positional_patterns_type 1091 +#define keyword_patterns_type 1092 +#define keyword_pattern_type 1093 +#define expressions_type 1094 +#define expression_type 1095 +#define yield_expr_type 1096 +#define star_expressions_type 1097 +#define star_expression_type 1098 +#define star_named_expressions_type 1099 +#define star_named_expression_type 1100 +#define assigment_expression_type 1101 +#define named_expression_type 1102 +#define disjunction_type 1103 +#define conjunction_type 1104 +#define inversion_type 1105 +#define comparison_type 1106 +#define compare_op_bitwise_or_pair_type 1107 +#define eq_bitwise_or_type 1108 +#define noteq_bitwise_or_type 1109 +#define lte_bitwise_or_type 1110 +#define lt_bitwise_or_type 1111 +#define gte_bitwise_or_type 1112 +#define gt_bitwise_or_type 1113 +#define notin_bitwise_or_type 1114 +#define in_bitwise_or_type 1115 +#define isnot_bitwise_or_type 1116 +#define is_bitwise_or_type 1117 +#define bitwise_or_type 1118 // Left-recursive +#define bitwise_xor_type 1119 // Left-recursive +#define bitwise_and_type 1120 // Left-recursive +#define shift_expr_type 1121 // Left-recursive +#define sum_type 1122 // Left-recursive +#define term_type 1123 // Left-recursive +#define factor_type 1124 +#define power_type 1125 +#define await_primary_type 1126 +#define primary_type 1127 // Left-recursive +#define slices_type 1128 +#define slice_type 1129 +#define atom_type 1130 +#define group_type 1131 +#define lambdef_type 1132 +#define lambda_params_type 1133 +#define lambda_parameters_type 1134 +#define lambda_slash_no_default_type 1135 +#define lambda_slash_with_default_type 1136 +#define lambda_star_etc_type 1137 +#define lambda_kwds_type 1138 +#define lambda_param_no_default_type 1139 +#define lambda_param_with_default_type 1140 +#define lambda_param_maybe_default_type 1141 +#define lambda_param_type 1142 #define strings_type 1143 #define list_type 1144 -#define listcomp_type 1145 -#define tuple_type 1146 -#define group_type 1147 -#define genexp_type 1148 -#define set_type 1149 -#define setcomp_type 1150 -#define dict_type 1151 -#define dictcomp_type 1152 -#define double_starred_kvpairs_type 1153 -#define double_starred_kvpair_type 1154 -#define kvpair_type 1155 -#define for_if_clauses_type 1156 -#define for_if_clause_type 1157 -#define yield_expr_type 1158 -#define arguments_type 1159 -#define args_type 1160 -#define kwargs_type 1161 -#define starred_expression_type 1162 -#define kwarg_or_starred_type 1163 -#define kwarg_or_double_starred_type 1164 -#define star_targets_type 1165 -#define star_targets_list_seq_type 1166 -#define star_targets_tuple_seq_type 1167 -#define star_target_type 1168 -#define target_with_star_atom_type 1169 -#define star_atom_type 1170 -#define single_target_type 1171 -#define single_subscript_attribute_target_type 1172 +#define tuple_type 1145 +#define set_type 1146 +#define dict_type 1147 +#define double_starred_kvpairs_type 1148 +#define double_starred_kvpair_type 1149 +#define kvpair_type 1150 +#define for_if_clauses_type 1151 +#define for_if_clause_type 1152 +#define listcomp_type 1153 +#define setcomp_type 1154 +#define genexp_type 1155 +#define dictcomp_type 1156 +#define arguments_type 1157 +#define args_type 1158 +#define kwargs_type 1159 +#define starred_expression_type 1160 +#define kwarg_or_starred_type 1161 +#define kwarg_or_double_starred_type 1162 +#define star_targets_type 1163 +#define star_targets_list_seq_type 1164 +#define star_targets_tuple_seq_type 1165 +#define star_target_type 1166 +#define target_with_star_atom_type 1167 +#define star_atom_type 1168 +#define single_target_type 1169 +#define single_subscript_attribute_target_type 1170 +#define t_primary_type 1171 // Left-recursive +#define t_lookahead_type 1172 #define del_targets_type 1173 #define del_target_type 1174 #define del_t_atom_type 1175 -#define t_primary_type 1176 // Left-recursive -#define t_lookahead_type 1177 +#define type_expressions_type 1176 +#define func_type_comment_type 1177 #define invalid_arguments_type 1178 #define invalid_kwarg_type 1179 #define expression_without_invalid_type 1180 @@ -294,144 +294,144 @@ static char *soft_keywords[] = { #define invalid_kvpair_type 1220 #define _loop0_1_type 1221 #define _loop0_2_type 1222 -#define _loop0_4_type 1223 -#define _gather_3_type 1224 -#define _loop0_6_type 1225 -#define _gather_5_type 1226 -#define _loop0_8_type 1227 -#define _gather_7_type 1228 -#define _loop0_10_type 1229 -#define _gather_9_type 1230 -#define _loop1_11_type 1231 -#define _loop0_13_type 1232 -#define _gather_12_type 1233 -#define _tmp_14_type 1234 +#define _loop1_3_type 1223 +#define _loop0_5_type 1224 +#define _gather_4_type 1225 +#define _tmp_6_type 1226 +#define _tmp_7_type 1227 +#define _tmp_8_type 1228 +#define _tmp_9_type 1229 +#define _tmp_10_type 1230 +#define _tmp_11_type 1231 +#define _tmp_12_type 1232 +#define _tmp_13_type 1233 +#define _loop1_14_type 1234 #define _tmp_15_type 1235 #define _tmp_16_type 1236 #define _tmp_17_type 1237 -#define _tmp_18_type 1238 -#define _tmp_19_type 1239 -#define _tmp_20_type 1240 -#define _tmp_21_type 1241 -#define _loop1_22_type 1242 +#define _loop0_19_type 1238 +#define _gather_18_type 1239 +#define _loop0_21_type 1240 +#define _gather_20_type 1241 +#define _tmp_22_type 1242 #define _tmp_23_type 1243 -#define _tmp_24_type 1244 -#define _loop0_26_type 1245 -#define _gather_25_type 1246 -#define _loop0_28_type 1247 -#define _gather_27_type 1248 -#define _tmp_29_type 1249 -#define _tmp_30_type 1250 -#define _loop0_31_type 1251 +#define _loop0_24_type 1244 +#define _loop1_25_type 1245 +#define _loop0_27_type 1246 +#define _gather_26_type 1247 +#define _tmp_28_type 1248 +#define _loop0_30_type 1249 +#define _gather_29_type 1250 +#define _tmp_31_type 1251 #define _loop1_32_type 1252 -#define _loop0_34_type 1253 -#define _gather_33_type 1254 +#define _tmp_33_type 1253 +#define _tmp_34_type 1254 #define _tmp_35_type 1255 -#define _loop0_37_type 1256 -#define _gather_36_type 1257 -#define _tmp_38_type 1258 -#define _loop0_40_type 1259 -#define _gather_39_type 1260 -#define _loop0_42_type 1261 -#define _gather_41_type 1262 -#define _loop0_44_type 1263 -#define _gather_43_type 1264 -#define _loop0_46_type 1265 -#define _gather_45_type 1266 -#define _tmp_47_type 1267 -#define _loop1_48_type 1268 -#define _tmp_49_type 1269 -#define _loop1_50_type 1270 -#define _loop0_52_type 1271 -#define _gather_51_type 1272 -#define _tmp_53_type 1273 -#define _tmp_54_type 1274 -#define _tmp_55_type 1275 -#define _tmp_56_type 1276 -#define _loop0_58_type 1277 -#define _gather_57_type 1278 -#define _loop0_60_type 1279 -#define _gather_59_type 1280 -#define _tmp_61_type 1281 +#define _loop0_36_type 1256 +#define _loop0_37_type 1257 +#define _loop0_38_type 1258 +#define _loop1_39_type 1259 +#define _loop0_40_type 1260 +#define _loop1_41_type 1261 +#define _loop1_42_type 1262 +#define _loop1_43_type 1263 +#define _loop0_44_type 1264 +#define _loop1_45_type 1265 +#define _loop0_46_type 1266 +#define _loop1_47_type 1267 +#define _loop0_48_type 1268 +#define _loop1_49_type 1269 +#define _loop0_51_type 1270 +#define _gather_50_type 1271 +#define _loop0_53_type 1272 +#define _gather_52_type 1273 +#define _loop0_55_type 1274 +#define _gather_54_type 1275 +#define _loop0_57_type 1276 +#define _gather_56_type 1277 +#define _tmp_58_type 1278 +#define _loop1_59_type 1279 +#define _tmp_60_type 1280 +#define _loop1_61_type 1281 #define _loop0_63_type 1282 #define _gather_62_type 1283 -#define _loop0_65_type 1284 -#define _gather_64_type 1285 +#define _tmp_64_type 1284 +#define _tmp_65_type 1285 #define _tmp_66_type 1286 #define _tmp_67_type 1287 -#define _tmp_68_type 1288 -#define _tmp_69_type 1289 -#define _loop0_70_type 1290 -#define _loop0_71_type 1291 -#define _loop0_72_type 1292 -#define _loop1_73_type 1293 -#define _loop0_74_type 1294 -#define _loop1_75_type 1295 -#define _loop1_76_type 1296 +#define _loop0_69_type 1288 +#define _gather_68_type 1289 +#define _loop0_71_type 1290 +#define _gather_70_type 1291 +#define _tmp_72_type 1292 +#define _loop0_74_type 1293 +#define _gather_73_type 1294 +#define _loop0_76_type 1295 +#define _gather_75_type 1296 #define _loop1_77_type 1297 -#define _loop0_78_type 1298 -#define _loop1_79_type 1299 -#define _loop0_80_type 1300 +#define _loop1_78_type 1298 +#define _loop0_80_type 1299 +#define _gather_79_type 1300 #define _loop1_81_type 1301 -#define _loop0_82_type 1302 +#define _loop1_82_type 1302 #define _loop1_83_type 1303 -#define _loop1_84_type 1304 -#define _tmp_85_type 1305 -#define _loop1_86_type 1306 -#define _loop0_88_type 1307 -#define _gather_87_type 1308 -#define _loop1_89_type 1309 -#define _loop0_90_type 1310 -#define _loop0_91_type 1311 +#define _tmp_84_type 1304 +#define _loop0_86_type 1305 +#define _gather_85_type 1306 +#define _tmp_87_type 1307 +#define _tmp_88_type 1308 +#define _tmp_89_type 1309 +#define _tmp_90_type 1310 +#define _tmp_91_type 1311 #define _loop0_92_type 1312 -#define _loop1_93_type 1313 +#define _loop0_93_type 1313 #define _loop0_94_type 1314 #define _loop1_95_type 1315 -#define _loop1_96_type 1316 +#define _loop0_96_type 1316 #define _loop1_97_type 1317 -#define _loop0_98_type 1318 +#define _loop1_98_type 1318 #define _loop1_99_type 1319 #define _loop0_100_type 1320 #define _loop1_101_type 1321 #define _loop0_102_type 1322 #define _loop1_103_type 1323 -#define _loop1_104_type 1324 +#define _loop0_104_type 1324 #define _loop1_105_type 1325 #define _loop1_106_type 1326 #define _tmp_107_type 1327 #define _loop0_109_type 1328 #define _gather_108_type 1329 -#define _tmp_110_type 1330 -#define _tmp_111_type 1331 -#define _tmp_112_type 1332 +#define _loop1_110_type 1330 +#define _loop0_111_type 1331 +#define _loop0_112_type 1332 #define _tmp_113_type 1333 -#define _loop1_114_type 1334 -#define _tmp_115_type 1335 +#define _loop0_115_type 1334 +#define _gather_114_type 1335 #define _tmp_116_type 1336 -#define _tmp_117_type 1337 -#define _loop0_119_type 1338 -#define _gather_118_type 1339 -#define _loop1_120_type 1340 -#define _loop0_121_type 1341 -#define _loop0_122_type 1342 +#define _loop0_118_type 1337 +#define _gather_117_type 1338 +#define _loop0_120_type 1339 +#define _gather_119_type 1340 +#define _loop0_122_type 1341 +#define _gather_121_type 1342 #define _loop0_124_type 1343 #define _gather_123_type 1344 -#define _tmp_125_type 1345 +#define _loop0_125_type 1345 #define _loop0_127_type 1346 #define _gather_126_type 1347 -#define _loop0_129_type 1348 -#define _gather_128_type 1349 +#define _loop1_128_type 1348 +#define _tmp_129_type 1349 #define _loop0_131_type 1350 #define _gather_130_type 1351 #define _loop0_133_type 1352 #define _gather_132_type 1353 -#define _loop0_134_type 1354 -#define _loop0_136_type 1355 -#define _gather_135_type 1356 -#define _loop1_137_type 1357 -#define _tmp_138_type 1358 -#define _loop0_140_type 1359 -#define _gather_139_type 1360 +#define _loop0_135_type 1354 +#define _gather_134_type 1355 +#define _loop0_137_type 1356 +#define _gather_136_type 1357 +#define _loop0_139_type 1358 +#define _gather_138_type 1359 +#define _tmp_140_type 1360 #define _tmp_141_type 1361 #define _tmp_142_type 1362 #define _tmp_143_type 1363 @@ -502,7 +502,6 @@ static mod_ty interactive_rule(Parser *p); static mod_ty eval_rule(Parser *p); static mod_ty func_type_rule(Parser *p); static expr_ty fstring_rule(Parser *p); -static asdl_expr_seq* type_expressions_rule(Parser *p); static asdl_stmt_seq* statements_rule(Parser *p); static asdl_stmt_seq* statement_rule(Parser *p); static asdl_stmt_seq* statement_newline_rule(Parser *p); @@ -510,12 +509,15 @@ static asdl_stmt_seq* simple_stmts_rule(Parser *p); static stmt_ty simple_stmt_rule(Parser *p); static stmt_ty compound_stmt_rule(Parser *p); static stmt_ty assignment_rule(Parser *p); +static expr_ty annotated_rhs_rule(Parser *p); static AugOperator* augassign_rule(Parser *p); +static stmt_ty return_stmt_rule(Parser *p); +static stmt_ty raise_stmt_rule(Parser *p); static stmt_ty global_stmt_rule(Parser *p); static stmt_ty nonlocal_stmt_rule(Parser *p); +static stmt_ty del_stmt_rule(Parser *p); static stmt_ty yield_stmt_rule(Parser *p); static stmt_ty assert_stmt_rule(Parser *p); -static stmt_ty del_stmt_rule(Parser *p); static stmt_ty import_stmt_rule(Parser *p); static stmt_ty import_name_rule(Parser *p); static stmt_ty import_from_rule(Parser *p); @@ -525,6 +527,24 @@ static alias_ty import_from_as_name_rule(Parser *p); static asdl_alias_seq* dotted_as_names_rule(Parser *p); static alias_ty dotted_as_name_rule(Parser *p); static expr_ty dotted_name_rule(Parser *p); +static asdl_stmt_seq* block_rule(Parser *p); +static asdl_expr_seq* decorators_rule(Parser *p); +static stmt_ty class_def_rule(Parser *p); +static stmt_ty class_def_raw_rule(Parser *p); +static stmt_ty function_def_rule(Parser *p); +static stmt_ty function_def_raw_rule(Parser *p); +static arguments_ty params_rule(Parser *p); +static arguments_ty parameters_rule(Parser *p); +static asdl_arg_seq* slash_no_default_rule(Parser *p); +static SlashWithDefault* slash_with_default_rule(Parser *p); +static StarEtc* star_etc_rule(Parser *p); +static arg_ty kwds_rule(Parser *p); +static arg_ty param_no_default_rule(Parser *p); +static NameDefaultPair* param_with_default_rule(Parser *p); +static NameDefaultPair* param_maybe_default_rule(Parser *p); +static arg_ty param_rule(Parser *p); +static expr_ty annotation_rule(Parser *p); +static expr_ty default_rule(Parser *p); static stmt_ty if_stmt_rule(Parser *p); static stmt_ty elif_stmt_rule(Parser *p); static asdl_stmt_seq* else_block_rule(Parser *p); @@ -571,47 +591,15 @@ static pattern_ty class_pattern_rule(Parser *p); static asdl_pattern_seq* positional_patterns_rule(Parser *p); static asdl_seq* keyword_patterns_rule(Parser *p); static KeyPatternPair* keyword_pattern_rule(Parser *p); -static stmt_ty return_stmt_rule(Parser *p); -static stmt_ty raise_stmt_rule(Parser *p); -static stmt_ty function_def_rule(Parser *p); -static stmt_ty function_def_raw_rule(Parser *p); -static Token* func_type_comment_rule(Parser *p); -static arguments_ty params_rule(Parser *p); -static arguments_ty parameters_rule(Parser *p); -static asdl_arg_seq* slash_no_default_rule(Parser *p); -static SlashWithDefault* slash_with_default_rule(Parser *p); -static StarEtc* star_etc_rule(Parser *p); -static arg_ty kwds_rule(Parser *p); -static arg_ty param_no_default_rule(Parser *p); -static NameDefaultPair* param_with_default_rule(Parser *p); -static NameDefaultPair* param_maybe_default_rule(Parser *p); -static arg_ty param_rule(Parser *p); -static expr_ty annotation_rule(Parser *p); -static expr_ty default_rule(Parser *p); -static asdl_expr_seq* decorators_rule(Parser *p); -static stmt_ty class_def_rule(Parser *p); -static stmt_ty class_def_raw_rule(Parser *p); -static asdl_stmt_seq* block_rule(Parser *p); +static expr_ty expressions_rule(Parser *p); +static expr_ty expression_rule(Parser *p); +static expr_ty yield_expr_rule(Parser *p); static expr_ty star_expressions_rule(Parser *p); static expr_ty star_expression_rule(Parser *p); static asdl_expr_seq* star_named_expressions_rule(Parser *p); static expr_ty star_named_expression_rule(Parser *p); static expr_ty assigment_expression_rule(Parser *p); static expr_ty named_expression_rule(Parser *p); -static expr_ty annotated_rhs_rule(Parser *p); -static expr_ty expressions_rule(Parser *p); -static expr_ty expression_rule(Parser *p); -static expr_ty lambdef_rule(Parser *p); -static arguments_ty lambda_params_rule(Parser *p); -static arguments_ty lambda_parameters_rule(Parser *p); -static asdl_arg_seq* lambda_slash_no_default_rule(Parser *p); -static SlashWithDefault* lambda_slash_with_default_rule(Parser *p); -static StarEtc* lambda_star_etc_rule(Parser *p); -static arg_ty lambda_kwds_rule(Parser *p); -static arg_ty lambda_param_no_default_rule(Parser *p); -static NameDefaultPair* lambda_param_with_default_rule(Parser *p); -static NameDefaultPair* lambda_param_maybe_default_rule(Parser *p); -static arg_ty lambda_param_rule(Parser *p); static expr_ty disjunction_rule(Parser *p); static expr_ty conjunction_rule(Parser *p); static expr_ty inversion_rule(Parser *p); @@ -640,22 +628,32 @@ static expr_ty primary_rule(Parser *p); static expr_ty slices_rule(Parser *p); static expr_ty slice_rule(Parser *p); static expr_ty atom_rule(Parser *p); +static expr_ty group_rule(Parser *p); +static expr_ty lambdef_rule(Parser *p); +static arguments_ty lambda_params_rule(Parser *p); +static arguments_ty lambda_parameters_rule(Parser *p); +static asdl_arg_seq* lambda_slash_no_default_rule(Parser *p); +static SlashWithDefault* lambda_slash_with_default_rule(Parser *p); +static StarEtc* lambda_star_etc_rule(Parser *p); +static arg_ty lambda_kwds_rule(Parser *p); +static arg_ty lambda_param_no_default_rule(Parser *p); +static NameDefaultPair* lambda_param_with_default_rule(Parser *p); +static NameDefaultPair* lambda_param_maybe_default_rule(Parser *p); +static arg_ty lambda_param_rule(Parser *p); static expr_ty strings_rule(Parser *p); static expr_ty list_rule(Parser *p); -static expr_ty listcomp_rule(Parser *p); static expr_ty tuple_rule(Parser *p); -static expr_ty group_rule(Parser *p); -static expr_ty genexp_rule(Parser *p); static expr_ty set_rule(Parser *p); -static expr_ty setcomp_rule(Parser *p); static expr_ty dict_rule(Parser *p); -static expr_ty dictcomp_rule(Parser *p); static asdl_seq* double_starred_kvpairs_rule(Parser *p); static KeyValuePair* double_starred_kvpair_rule(Parser *p); static KeyValuePair* kvpair_rule(Parser *p); static asdl_comprehension_seq* for_if_clauses_rule(Parser *p); static comprehension_ty for_if_clause_rule(Parser *p); -static expr_ty yield_expr_rule(Parser *p); +static expr_ty listcomp_rule(Parser *p); +static expr_ty setcomp_rule(Parser *p); +static expr_ty genexp_rule(Parser *p); +static expr_ty dictcomp_rule(Parser *p); static expr_ty arguments_rule(Parser *p); static expr_ty args_rule(Parser *p); static asdl_seq* kwargs_rule(Parser *p); @@ -670,11 +668,13 @@ static expr_ty target_with_star_atom_rule(Parser *p); static expr_ty star_atom_rule(Parser *p); static expr_ty single_target_rule(Parser *p); static expr_ty single_subscript_attribute_target_rule(Parser *p); +static expr_ty t_primary_rule(Parser *p); +static void *t_lookahead_rule(Parser *p); static asdl_expr_seq* del_targets_rule(Parser *p); static expr_ty del_target_rule(Parser *p); static expr_ty del_t_atom_rule(Parser *p); -static expr_ty t_primary_rule(Parser *p); -static void *t_lookahead_rule(Parser *p); +static asdl_expr_seq* type_expressions_rule(Parser *p); +static Token* func_type_comment_rule(Parser *p); static void *invalid_arguments_rule(Parser *p); static void *invalid_kwarg_rule(Parser *p); static expr_ty expression_without_invalid_rule(Parser *p); @@ -720,144 +720,144 @@ static void *invalid_double_starred_kvpairs_rule(Parser *p); static void *invalid_kvpair_rule(Parser *p); static asdl_seq *_loop0_1_rule(Parser *p); static asdl_seq *_loop0_2_rule(Parser *p); -static asdl_seq *_loop0_4_rule(Parser *p); -static asdl_seq *_gather_3_rule(Parser *p); -static asdl_seq *_loop0_6_rule(Parser *p); -static asdl_seq *_gather_5_rule(Parser *p); -static asdl_seq *_loop0_8_rule(Parser *p); -static asdl_seq *_gather_7_rule(Parser *p); -static asdl_seq *_loop0_10_rule(Parser *p); -static asdl_seq *_gather_9_rule(Parser *p); -static asdl_seq *_loop1_11_rule(Parser *p); -static asdl_seq *_loop0_13_rule(Parser *p); -static asdl_seq *_gather_12_rule(Parser *p); -static void *_tmp_14_rule(Parser *p); +static asdl_seq *_loop1_3_rule(Parser *p); +static asdl_seq *_loop0_5_rule(Parser *p); +static asdl_seq *_gather_4_rule(Parser *p); +static void *_tmp_6_rule(Parser *p); +static void *_tmp_7_rule(Parser *p); +static void *_tmp_8_rule(Parser *p); +static void *_tmp_9_rule(Parser *p); +static void *_tmp_10_rule(Parser *p); +static void *_tmp_11_rule(Parser *p); +static void *_tmp_12_rule(Parser *p); +static void *_tmp_13_rule(Parser *p); +static asdl_seq *_loop1_14_rule(Parser *p); static void *_tmp_15_rule(Parser *p); static void *_tmp_16_rule(Parser *p); static void *_tmp_17_rule(Parser *p); -static void *_tmp_18_rule(Parser *p); -static void *_tmp_19_rule(Parser *p); -static void *_tmp_20_rule(Parser *p); -static void *_tmp_21_rule(Parser *p); -static asdl_seq *_loop1_22_rule(Parser *p); +static asdl_seq *_loop0_19_rule(Parser *p); +static asdl_seq *_gather_18_rule(Parser *p); +static asdl_seq *_loop0_21_rule(Parser *p); +static asdl_seq *_gather_20_rule(Parser *p); +static void *_tmp_22_rule(Parser *p); static void *_tmp_23_rule(Parser *p); -static void *_tmp_24_rule(Parser *p); -static asdl_seq *_loop0_26_rule(Parser *p); -static asdl_seq *_gather_25_rule(Parser *p); -static asdl_seq *_loop0_28_rule(Parser *p); -static asdl_seq *_gather_27_rule(Parser *p); -static void *_tmp_29_rule(Parser *p); -static void *_tmp_30_rule(Parser *p); -static asdl_seq *_loop0_31_rule(Parser *p); +static asdl_seq *_loop0_24_rule(Parser *p); +static asdl_seq *_loop1_25_rule(Parser *p); +static asdl_seq *_loop0_27_rule(Parser *p); +static asdl_seq *_gather_26_rule(Parser *p); +static void *_tmp_28_rule(Parser *p); +static asdl_seq *_loop0_30_rule(Parser *p); +static asdl_seq *_gather_29_rule(Parser *p); +static void *_tmp_31_rule(Parser *p); static asdl_seq *_loop1_32_rule(Parser *p); -static asdl_seq *_loop0_34_rule(Parser *p); -static asdl_seq *_gather_33_rule(Parser *p); +static void *_tmp_33_rule(Parser *p); +static void *_tmp_34_rule(Parser *p); static void *_tmp_35_rule(Parser *p); +static asdl_seq *_loop0_36_rule(Parser *p); static asdl_seq *_loop0_37_rule(Parser *p); -static asdl_seq *_gather_36_rule(Parser *p); -static void *_tmp_38_rule(Parser *p); +static asdl_seq *_loop0_38_rule(Parser *p); +static asdl_seq *_loop1_39_rule(Parser *p); static asdl_seq *_loop0_40_rule(Parser *p); -static asdl_seq *_gather_39_rule(Parser *p); -static asdl_seq *_loop0_42_rule(Parser *p); -static asdl_seq *_gather_41_rule(Parser *p); +static asdl_seq *_loop1_41_rule(Parser *p); +static asdl_seq *_loop1_42_rule(Parser *p); +static asdl_seq *_loop1_43_rule(Parser *p); static asdl_seq *_loop0_44_rule(Parser *p); -static asdl_seq *_gather_43_rule(Parser *p); +static asdl_seq *_loop1_45_rule(Parser *p); static asdl_seq *_loop0_46_rule(Parser *p); -static asdl_seq *_gather_45_rule(Parser *p); -static void *_tmp_47_rule(Parser *p); -static asdl_seq *_loop1_48_rule(Parser *p); -static void *_tmp_49_rule(Parser *p); -static asdl_seq *_loop1_50_rule(Parser *p); -static asdl_seq *_loop0_52_rule(Parser *p); -static asdl_seq *_gather_51_rule(Parser *p); -static void *_tmp_53_rule(Parser *p); -static void *_tmp_54_rule(Parser *p); -static void *_tmp_55_rule(Parser *p); -static void *_tmp_56_rule(Parser *p); -static asdl_seq *_loop0_58_rule(Parser *p); -static asdl_seq *_gather_57_rule(Parser *p); -static asdl_seq *_loop0_60_rule(Parser *p); -static asdl_seq *_gather_59_rule(Parser *p); -static void *_tmp_61_rule(Parser *p); +static asdl_seq *_loop1_47_rule(Parser *p); +static asdl_seq *_loop0_48_rule(Parser *p); +static asdl_seq *_loop1_49_rule(Parser *p); +static asdl_seq *_loop0_51_rule(Parser *p); +static asdl_seq *_gather_50_rule(Parser *p); +static asdl_seq *_loop0_53_rule(Parser *p); +static asdl_seq *_gather_52_rule(Parser *p); +static asdl_seq *_loop0_55_rule(Parser *p); +static asdl_seq *_gather_54_rule(Parser *p); +static asdl_seq *_loop0_57_rule(Parser *p); +static asdl_seq *_gather_56_rule(Parser *p); +static void *_tmp_58_rule(Parser *p); +static asdl_seq *_loop1_59_rule(Parser *p); +static void *_tmp_60_rule(Parser *p); +static asdl_seq *_loop1_61_rule(Parser *p); static asdl_seq *_loop0_63_rule(Parser *p); static asdl_seq *_gather_62_rule(Parser *p); -static asdl_seq *_loop0_65_rule(Parser *p); -static asdl_seq *_gather_64_rule(Parser *p); +static void *_tmp_64_rule(Parser *p); +static void *_tmp_65_rule(Parser *p); static void *_tmp_66_rule(Parser *p); static void *_tmp_67_rule(Parser *p); -static void *_tmp_68_rule(Parser *p); -static void *_tmp_69_rule(Parser *p); -static asdl_seq *_loop0_70_rule(Parser *p); +static asdl_seq *_loop0_69_rule(Parser *p); +static asdl_seq *_gather_68_rule(Parser *p); static asdl_seq *_loop0_71_rule(Parser *p); -static asdl_seq *_loop0_72_rule(Parser *p); -static asdl_seq *_loop1_73_rule(Parser *p); +static asdl_seq *_gather_70_rule(Parser *p); +static void *_tmp_72_rule(Parser *p); static asdl_seq *_loop0_74_rule(Parser *p); -static asdl_seq *_loop1_75_rule(Parser *p); -static asdl_seq *_loop1_76_rule(Parser *p); +static asdl_seq *_gather_73_rule(Parser *p); +static asdl_seq *_loop0_76_rule(Parser *p); +static asdl_seq *_gather_75_rule(Parser *p); static asdl_seq *_loop1_77_rule(Parser *p); -static asdl_seq *_loop0_78_rule(Parser *p); -static asdl_seq *_loop1_79_rule(Parser *p); +static asdl_seq *_loop1_78_rule(Parser *p); static asdl_seq *_loop0_80_rule(Parser *p); +static asdl_seq *_gather_79_rule(Parser *p); static asdl_seq *_loop1_81_rule(Parser *p); -static asdl_seq *_loop0_82_rule(Parser *p); +static asdl_seq *_loop1_82_rule(Parser *p); static asdl_seq *_loop1_83_rule(Parser *p); -static asdl_seq *_loop1_84_rule(Parser *p); -static void *_tmp_85_rule(Parser *p); -static asdl_seq *_loop1_86_rule(Parser *p); -static asdl_seq *_loop0_88_rule(Parser *p); -static asdl_seq *_gather_87_rule(Parser *p); -static asdl_seq *_loop1_89_rule(Parser *p); -static asdl_seq *_loop0_90_rule(Parser *p); -static asdl_seq *_loop0_91_rule(Parser *p); +static void *_tmp_84_rule(Parser *p); +static asdl_seq *_loop0_86_rule(Parser *p); +static asdl_seq *_gather_85_rule(Parser *p); +static void *_tmp_87_rule(Parser *p); +static void *_tmp_88_rule(Parser *p); +static void *_tmp_89_rule(Parser *p); +static void *_tmp_90_rule(Parser *p); +static void *_tmp_91_rule(Parser *p); static asdl_seq *_loop0_92_rule(Parser *p); -static asdl_seq *_loop1_93_rule(Parser *p); +static asdl_seq *_loop0_93_rule(Parser *p); static asdl_seq *_loop0_94_rule(Parser *p); static asdl_seq *_loop1_95_rule(Parser *p); -static asdl_seq *_loop1_96_rule(Parser *p); +static asdl_seq *_loop0_96_rule(Parser *p); static asdl_seq *_loop1_97_rule(Parser *p); -static asdl_seq *_loop0_98_rule(Parser *p); +static asdl_seq *_loop1_98_rule(Parser *p); static asdl_seq *_loop1_99_rule(Parser *p); static asdl_seq *_loop0_100_rule(Parser *p); static asdl_seq *_loop1_101_rule(Parser *p); static asdl_seq *_loop0_102_rule(Parser *p); static asdl_seq *_loop1_103_rule(Parser *p); -static asdl_seq *_loop1_104_rule(Parser *p); +static asdl_seq *_loop0_104_rule(Parser *p); static asdl_seq *_loop1_105_rule(Parser *p); static asdl_seq *_loop1_106_rule(Parser *p); static void *_tmp_107_rule(Parser *p); static asdl_seq *_loop0_109_rule(Parser *p); static asdl_seq *_gather_108_rule(Parser *p); -static void *_tmp_110_rule(Parser *p); -static void *_tmp_111_rule(Parser *p); -static void *_tmp_112_rule(Parser *p); +static asdl_seq *_loop1_110_rule(Parser *p); +static asdl_seq *_loop0_111_rule(Parser *p); +static asdl_seq *_loop0_112_rule(Parser *p); static void *_tmp_113_rule(Parser *p); -static asdl_seq *_loop1_114_rule(Parser *p); -static void *_tmp_115_rule(Parser *p); +static asdl_seq *_loop0_115_rule(Parser *p); +static asdl_seq *_gather_114_rule(Parser *p); static void *_tmp_116_rule(Parser *p); -static void *_tmp_117_rule(Parser *p); -static asdl_seq *_loop0_119_rule(Parser *p); -static asdl_seq *_gather_118_rule(Parser *p); -static asdl_seq *_loop1_120_rule(Parser *p); -static asdl_seq *_loop0_121_rule(Parser *p); +static asdl_seq *_loop0_118_rule(Parser *p); +static asdl_seq *_gather_117_rule(Parser *p); +static asdl_seq *_loop0_120_rule(Parser *p); +static asdl_seq *_gather_119_rule(Parser *p); static asdl_seq *_loop0_122_rule(Parser *p); +static asdl_seq *_gather_121_rule(Parser *p); static asdl_seq *_loop0_124_rule(Parser *p); static asdl_seq *_gather_123_rule(Parser *p); -static void *_tmp_125_rule(Parser *p); +static asdl_seq *_loop0_125_rule(Parser *p); static asdl_seq *_loop0_127_rule(Parser *p); static asdl_seq *_gather_126_rule(Parser *p); -static asdl_seq *_loop0_129_rule(Parser *p); -static asdl_seq *_gather_128_rule(Parser *p); +static asdl_seq *_loop1_128_rule(Parser *p); +static void *_tmp_129_rule(Parser *p); static asdl_seq *_loop0_131_rule(Parser *p); static asdl_seq *_gather_130_rule(Parser *p); static asdl_seq *_loop0_133_rule(Parser *p); static asdl_seq *_gather_132_rule(Parser *p); -static asdl_seq *_loop0_134_rule(Parser *p); -static asdl_seq *_loop0_136_rule(Parser *p); -static asdl_seq *_gather_135_rule(Parser *p); -static asdl_seq *_loop1_137_rule(Parser *p); -static void *_tmp_138_rule(Parser *p); -static asdl_seq *_loop0_140_rule(Parser *p); -static asdl_seq *_gather_139_rule(Parser *p); +static asdl_seq *_loop0_135_rule(Parser *p); +static asdl_seq *_gather_134_rule(Parser *p); +static asdl_seq *_loop0_137_rule(Parser *p); +static asdl_seq *_gather_136_rule(Parser *p); +static asdl_seq *_loop0_139_rule(Parser *p); +static asdl_seq *_gather_138_rule(Parser *p); +static void *_tmp_140_rule(Parser *p); static void *_tmp_141_rule(Parser *p); static void *_tmp_142_rule(Parser *p); static void *_tmp_143_rule(Parser *p); @@ -1151,55 +1151,30 @@ fstring_rule(Parser *p) return _res; } -// type_expressions: -// | ','.expression+ ',' '*' expression ',' '**' expression -// | ','.expression+ ',' '*' expression -// | ','.expression+ ',' '**' expression -// | '*' expression ',' '**' expression -// | '*' expression -// | '**' expression -// | ','.expression+ -static asdl_expr_seq* -type_expressions_rule(Parser *p) +// statements: statement+ +static asdl_stmt_seq* +statements_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_expr_seq* _res = NULL; + asdl_stmt_seq* _res = NULL; int _mark = p->mark; - { // ','.expression+ ',' '*' expression ',' '**' expression + { // statement+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); - Token * _literal; - Token * _literal_1; - Token * _literal_2; - Token * _literal_3; + D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+")); asdl_seq * a; - expr_ty b; - expr_ty c; if ( - (a = _gather_3_rule(p)) // ','.expression+ - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (_literal_1 = _PyPegen_expect_token(p, 16)) // token='*' - && - (b = expression_rule(p)) // expression - && - (_literal_2 = _PyPegen_expect_token(p, 12)) // token=',' - && - (_literal_3 = _PyPegen_expect_token(p, 35)) // token='**' - && - (c = expression_rule(p)) // expression + (a = _loop1_3_rule(p)) // statement+ ) { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_seq_append_to_end ( p , a , b ) ) , c ); + D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+")); + _res = ( asdl_stmt_seq * ) _PyPegen_seq_flatten ( p , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1208,31 +1183,39 @@ type_expressions_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); + D(fprintf(stderr, "%*c%s statements[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement+")); } - { // ','.expression+ ',' '*' expression + _res = NULL; + done: + D(p->level--); + return _res; +} + +// statement: compound_stmt | simple_stmts +static asdl_stmt_seq* +statement_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_stmt_seq* _res = NULL; + int _mark = p->mark; + { // compound_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression")); - Token * _literal; - Token * _literal_1; - asdl_seq * a; - expr_ty b; + D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt")); + stmt_ty a; if ( - (a = _gather_5_rule(p)) // ','.expression+ - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (_literal_1 = _PyPegen_expect_token(p, 16)) // token='*' - && - (b = expression_rule(p)) // expression + (a = compound_stmt_rule(p)) // compound_stmt ) { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b ); + D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt")); + _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1241,31 +1224,22 @@ type_expressions_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression")); + D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt")); } - { // ','.expression+ ',' '**' expression + { // simple_stmts if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression")); - Token * _literal; - Token * _literal_1; - asdl_seq * a; - expr_ty b; + D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts")); + asdl_stmt_seq* a; if ( - (a = _gather_7_rule(p)) // ','.expression+ - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (_literal_1 = _PyPegen_expect_token(p, 35)) // token='**' - && - (b = expression_rule(p)) // expression + (a = (asdl_stmt_seq*)simple_stmts_rule(p)) // simple_stmts ) { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b ); + D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1274,34 +1248,51 @@ type_expressions_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '**' expression")); + D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts")); } - { // '*' expression ',' '**' expression + _res = NULL; + done: + D(p->level--); + return _res; +} + +// statement_newline: compound_stmt NEWLINE | simple_stmts | NEWLINE | $ +static asdl_stmt_seq* +statement_newline_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_stmt_seq* _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // compound_stmt NEWLINE if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression")); - Token * _literal; - Token * _literal_1; - Token * _literal_2; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE")); + stmt_ty a; + Token * newline_var; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (a = expression_rule(p)) // expression - && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' - && - (_literal_2 = _PyPegen_expect_token(p, 35)) // token='**' + (a = compound_stmt_rule(p)) // compound_stmt && - (b = expression_rule(p)) // expression + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_singleton_seq ( p , a ) ) , b ); + D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE")); + _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -1310,245 +1301,8 @@ type_expressions_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression ',' '**' expression")); - } - { // '*' expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression")); - Token * _literal; - expr_ty a; - if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (a = expression_rule(p)) // expression - ) - { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression")); - } - { // '**' expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression")); - Token * _literal; - expr_ty a; - if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (a = expression_rule(p)) // expression - ) - { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression")); - _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression")); - } - { // ','.expression+ - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+")); - asdl_expr_seq* a; - if ( - (a = (asdl_expr_seq*)_gather_9_rule(p)) // ','.expression+ - ) - { - D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// statements: statement+ -static asdl_stmt_seq* -statements_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_stmt_seq* _res = NULL; - int _mark = p->mark; - { // statement+ - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> statements[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement+")); - asdl_seq * a; - if ( - (a = _loop1_11_rule(p)) // statement+ - ) - { - D(fprintf(stderr, "%*c+ statements[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "statement+")); - _res = ( asdl_stmt_seq * ) _PyPegen_seq_flatten ( p , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s statements[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement+")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// statement: compound_stmt | simple_stmts -static asdl_stmt_seq* -statement_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_stmt_seq* _res = NULL; - int _mark = p->mark; - { // compound_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt")); - stmt_ty a; - if ( - (a = compound_stmt_rule(p)) // compound_stmt - ) - { - D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt")); - _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt")); - } - { // simple_stmts - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> statement[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts")); - asdl_stmt_seq* a; - if ( - (a = (asdl_stmt_seq*)simple_stmts_rule(p)) // simple_stmts - ) - { - D(fprintf(stderr, "%*c+ statement[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s statement[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// statement_newline: compound_stmt NEWLINE | simple_stmts | NEWLINE | $ -static asdl_stmt_seq* -statement_newline_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_stmt_seq* _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // compound_stmt NEWLINE - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> statement_newline[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE")); - stmt_ty a; - Token * newline_var; - if ( - (a = compound_stmt_rule(p)) // compound_stmt - && - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' - ) - { - D(fprintf(stderr, "%*c+ statement_newline[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "compound_stmt NEWLINE")); - _res = ( asdl_stmt_seq * ) _PyPegen_singleton_seq ( p , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt NEWLINE")); + D(fprintf(stderr, "%*c%s statement_newline[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compound_stmt NEWLINE")); } { // simple_stmts if (p->error_indicator) { @@ -1683,7 +1437,7 @@ simple_stmts_rule(Parser *p) asdl_stmt_seq* a; Token * newline_var; if ( - (a = (asdl_stmt_seq*)_gather_12_rule(p)) // ';'.simple_stmt+ + (a = (asdl_stmt_seq*)_gather_4_rule(p)) // ';'.simple_stmt+ && (_opt_var = _PyPegen_expect_token(p, 13), 1) // ';'? && @@ -1827,7 +1581,7 @@ simple_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> simple_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('import' | 'from') import_stmt")); stmt_ty import_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_14_rule, p) + _PyPegen_lookahead(1, _tmp_6_rule, p) && (import_stmt_var = import_stmt_rule(p)) // import_stmt ) @@ -2099,7 +1853,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('def' | '@' | ASYNC) function_def")); stmt_ty function_def_var; if ( - _PyPegen_lookahead(1, _tmp_15_rule, p) + _PyPegen_lookahead(1, _tmp_7_rule, p) && (function_def_var = function_def_rule(p)) // function_def ) @@ -2141,7 +1895,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('class' | '@') class_def")); stmt_ty class_def_var; if ( - _PyPegen_lookahead(1, _tmp_16_rule, p) + _PyPegen_lookahead(1, _tmp_8_rule, p) && (class_def_var = class_def_rule(p)) // class_def ) @@ -2162,7 +1916,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('with' | ASYNC) with_stmt")); stmt_ty with_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_17_rule, p) + _PyPegen_lookahead(1, _tmp_9_rule, p) && (with_stmt_var = with_stmt_rule(p)) // with_stmt ) @@ -2183,7 +1937,7 @@ compound_stmt_rule(Parser *p) D(fprintf(stderr, "%*c> compound_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&('for' | ASYNC) for_stmt")); stmt_ty for_stmt_var; if ( - _PyPegen_lookahead(1, _tmp_18_rule, p) + _PyPegen_lookahead(1, _tmp_10_rule, p) && (for_stmt_var = for_stmt_rule(p)) // for_stmt ) @@ -2305,7 +2059,7 @@ assignment_rule(Parser *p) && (b = expression_rule(p)) // expression && - (c = _tmp_19_rule(p), 1) // ['=' annotated_rhs] + (c = _tmp_11_rule(p), 1) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ':' expression ['=' annotated_rhs]")); @@ -2341,13 +2095,13 @@ assignment_rule(Parser *p) expr_ty b; void *c; if ( - (a = _tmp_20_rule(p)) // '(' single_target ')' | single_subscript_attribute_target + (a = _tmp_12_rule(p)) // '(' single_target ')' | single_subscript_attribute_target && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && (b = expression_rule(p)) // expression && - (c = _tmp_21_rule(p), 1) // ['=' annotated_rhs] + (c = _tmp_13_rule(p), 1) // ['=' annotated_rhs] ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('(' single_target ')' | single_subscript_attribute_target) ':' expression ['=' annotated_rhs]")); @@ -2382,9 +2136,9 @@ assignment_rule(Parser *p) void *b; void *tc; if ( - (a = (asdl_expr_seq*)_loop1_22_rule(p)) // ((star_targets '='))+ + (a = (asdl_expr_seq*)_loop1_14_rule(p)) // ((star_targets '='))+ && - (b = _tmp_23_rule(p)) // yield_expr | star_expressions + (b = _tmp_15_rule(p)) // yield_expr | star_expressions && _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 22) // token='=' && @@ -2430,7 +2184,7 @@ assignment_rule(Parser *p) && (_cut_var = 1) && - (c = _tmp_24_rule(p)) // yield_expr | star_expressions + (c = _tmp_16_rule(p)) // yield_expr | star_expressions ) { D(fprintf(stderr, "%*c+ assignment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_target augassign ~ (yield_expr | star_expressions)")); @@ -2484,31 +2238,86 @@ assignment_rule(Parser *p) return _res; } -// augassign: -// | '+=' -// | '-=' -// | '*=' -// | '@=' -// | '/=' -// | '%=' -// | '&=' -// | '|=' -// | '^=' -// | '<<=' -// | '>>=' -// | '**=' -// | '//=' -static AugOperator* -augassign_rule(Parser *p) +// annotated_rhs: yield_expr | star_expressions +static expr_ty +annotated_rhs_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - AugOperator* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // '+=' + { // yield_expr + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + expr_ty yield_expr_var; + if ( + (yield_expr_var = yield_expr_rule(p)) // yield_expr + ) + { + D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + _res = yield_expr_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); + } + { // star_expressions + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + expr_ty star_expressions_var; + if ( + (star_expressions_var = star_expressions_rule(p)) // star_expressions + ) + { + D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + _res = star_expressions_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// augassign: +// | '+=' +// | '-=' +// | '*=' +// | '@=' +// | '/=' +// | '%=' +// | '&=' +// | '|=' +// | '^=' +// | '<<=' +// | '>>=' +// | '**=' +// | '//=' +static AugOperator* +augassign_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + AugOperator* _res = NULL; + int _mark = p->mark; + { // '+=' if (p->error_indicator) { D(p->level--); return NULL; @@ -2826,9 +2635,9 @@ augassign_rule(Parser *p) return _res; } -// global_stmt: 'global' ','.NAME+ +// return_stmt: 'return' star_expressions? static stmt_ty -global_stmt_rule(Parser *p) +return_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -2846,21 +2655,21 @@ global_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'global' ','.NAME+ + { // 'return' star_expressions? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); + D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?")); Token * _keyword; - asdl_expr_seq* a; + void *a; if ( - (_keyword = _PyPegen_expect_token(p, 508)) // token='global' + (_keyword = _PyPegen_expect_token(p, 500)) // token='return' && - (a = (asdl_expr_seq*)_gather_25_rule(p)) // ','.NAME+ + (a = star_expressions_rule(p), 1) // star_expressions? ) { - D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); + D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -2870,7 +2679,7 @@ global_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Global ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); + _res = _PyAST_Return ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2879,8 +2688,8 @@ global_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s global_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'global' ','.NAME+")); + D(fprintf(stderr, "%*c%s return_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'return' star_expressions?")); } _res = NULL; done: @@ -2888,9 +2697,9 @@ global_stmt_rule(Parser *p) return _res; } -// nonlocal_stmt: 'nonlocal' ','.NAME+ +// raise_stmt: 'raise' expression ['from' expression] | 'raise' static stmt_ty -nonlocal_stmt_rule(Parser *p) +raise_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -2908,21 +2717,24 @@ nonlocal_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'nonlocal' ','.NAME+ + { // 'raise' expression ['from' expression] if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); + D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]")); Token * _keyword; - asdl_expr_seq* a; + expr_ty a; + void *b; if ( - (_keyword = _PyPegen_expect_token(p, 509)) // token='nonlocal' + (_keyword = _PyPegen_expect_token(p, 501)) // token='raise' + && + (a = expression_rule(p)) // expression && - (a = (asdl_expr_seq*)_gather_27_rule(p)) // ','.NAME+ + (b = _tmp_17_rule(p), 1) // ['from' expression] ) { - D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); + D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -2932,7 +2744,7 @@ nonlocal_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); + _res = _PyAST_Raise ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -2941,8 +2753,41 @@ nonlocal_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s nonlocal_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'nonlocal' ','.NAME+")); + D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression ['from' expression]")); + } + { // 'raise' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 501)) // token='raise' + ) + { + D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Raise ( NULL , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise'")); } _res = NULL; done: @@ -2950,9 +2795,9 @@ nonlocal_stmt_rule(Parser *p) return _res; } -// yield_stmt: yield_expr +// global_stmt: 'global' ','.NAME+ static stmt_ty -yield_stmt_rule(Parser *p) +global_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -2970,18 +2815,21 @@ yield_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // yield_expr + { // 'global' ','.NAME+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); - expr_ty y; + D(fprintf(stderr, "%*c> global_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); + Token * _keyword; + asdl_expr_seq* a; if ( - (y = yield_expr_rule(p)) // yield_expr + (_keyword = _PyPegen_expect_token(p, 508)) // token='global' + && + (a = (asdl_expr_seq*)_gather_18_rule(p)) // ','.NAME+ ) { - D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c+ global_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'global' ','.NAME+")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -2991,7 +2839,7 @@ yield_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Expr ( y , EXTRA ); + _res = _PyAST_Global ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3000,8 +2848,8 @@ yield_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s yield_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c%s global_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'global' ','.NAME+")); } _res = NULL; done: @@ -3009,9 +2857,9 @@ yield_stmt_rule(Parser *p) return _res; } -// assert_stmt: 'assert' expression [',' expression] +// nonlocal_stmt: 'nonlocal' ','.NAME+ static stmt_ty -assert_stmt_rule(Parser *p) +nonlocal_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -3029,24 +2877,21 @@ assert_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'assert' expression [',' expression] + { // 'nonlocal' ','.NAME+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); + D(fprintf(stderr, "%*c> nonlocal_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); Token * _keyword; - expr_ty a; - void *b; + asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 505)) // token='assert' - && - (a = expression_rule(p)) // expression + (_keyword = _PyPegen_expect_token(p, 509)) // token='nonlocal' && - (b = _tmp_29_rule(p), 1) // [',' expression] + (a = (asdl_expr_seq*)_gather_20_rule(p)) // ','.NAME+ ) { - D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); + D(fprintf(stderr, "%*c+ nonlocal_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'nonlocal' ','.NAME+")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -3056,7 +2901,7 @@ assert_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Assert ( a , b , EXTRA ); + _res = _PyAST_Nonlocal ( CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -3065,8 +2910,8 @@ assert_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression [',' expression]")); + D(fprintf(stderr, "%*c%s nonlocal_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'nonlocal' ','.NAME+")); } _res = NULL; done: @@ -3107,7 +2952,7 @@ del_stmt_rule(Parser *p) && (a = del_targets_rule(p)) // del_targets && - _PyPegen_lookahead(1, _tmp_30_rule, p) + _PyPegen_lookahead(1, _tmp_22_rule, p) ) { D(fprintf(stderr, "%*c+ del_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'del' del_targets &(';' | NEWLINE)")); @@ -3157,9 +3002,9 @@ del_stmt_rule(Parser *p) return _res; } -// import_stmt: import_name | import_from +// yield_stmt: yield_expr static stmt_ty -import_stmt_rule(Parser *p) +yield_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -3168,43 +3013,47 @@ import_stmt_rule(Parser *p) } stmt_ty _res = NULL; int _mark = p->mark; - { // import_name - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name")); - stmt_ty import_name_var; - if ( - (import_name_var = import_name_rule(p)) // import_name - ) - { - D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_name")); - _res = import_name_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_name")); + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; } - { // import_from + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // yield_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from")); - stmt_ty import_from_var; + D(fprintf(stderr, "%*c> yield_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + expr_ty y; if ( - (import_from_var = import_from_rule(p)) // import_from + (y = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from")); - _res = import_from_var; + D(fprintf(stderr, "%*c+ yield_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Expr ( y , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from")); + D(fprintf(stderr, "%*c%s yield_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } _res = NULL; done: @@ -3212,9 +3061,9 @@ import_stmt_rule(Parser *p) return _res; } -// import_name: 'import' dotted_as_names +// assert_stmt: 'assert' expression [',' expression] static stmt_ty -import_name_rule(Parser *p) +assert_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -3232,7 +3081,127 @@ import_name_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'import' dotted_as_names + { // 'assert' expression [',' expression] + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> assert_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); + Token * _keyword; + expr_ty a; + void *b; + if ( + (_keyword = _PyPegen_expect_token(p, 505)) // token='assert' + && + (a = expression_rule(p)) // expression + && + (b = _tmp_23_rule(p), 1) // [',' expression] + ) + { + D(fprintf(stderr, "%*c+ assert_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'assert' expression [',' expression]")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Assert ( a , b , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s assert_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'assert' expression [',' expression]")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// import_stmt: import_name | import_from +static stmt_ty +import_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + stmt_ty _res = NULL; + int _mark = p->mark; + { // import_name + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_name")); + stmt_ty import_name_var; + if ( + (import_name_var = import_name_rule(p)) // import_name + ) + { + D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_name")); + _res = import_name_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_name")); + } + { // import_from + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> import_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from")); + stmt_ty import_from_var; + if ( + (import_from_var = import_from_rule(p)) // import_from + ) + { + D(fprintf(stderr, "%*c+ import_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from")); + _res = import_from_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s import_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// import_name: 'import' dotted_as_names +static stmt_ty +import_name_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + stmt_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // 'import' dotted_as_names if (p->error_indicator) { D(p->level--); return NULL; @@ -3310,7 +3279,7 @@ import_from_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 514)) // token='from' && - (a = _loop0_31_rule(p)) // (('.' | '...'))* + (a = _loop0_24_rule(p)) // (('.' | '...'))* && (b = dotted_name_rule(p)) // dotted_name && @@ -3354,7 +3323,7 @@ import_from_rule(Parser *p) if ( (_keyword = _PyPegen_expect_token(p, 514)) // token='from' && - (a = _loop1_32_rule(p)) // (('.' | '...'))+ + (a = _loop1_25_rule(p)) // (('.' | '...'))+ && (_keyword_1 = _PyPegen_expect_token(p, 513)) // token='import' && @@ -3545,7 +3514,7 @@ import_from_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> import_from_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_33_rule(p)) // ','.import_from_as_name+ + (a = (asdl_alias_seq*)_gather_26_rule(p)) // ','.import_from_as_name+ ) { D(fprintf(stderr, "%*c+ import_from_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.import_from_as_name+")); @@ -3598,7 +3567,7 @@ import_from_as_name_rule(Parser *p) if ( (a = _PyPegen_name_token(p)) // NAME && - (b = _tmp_35_rule(p), 1) // ['as' NAME] + (b = _tmp_28_rule(p), 1) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ import_from_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME ['as' NAME]")); @@ -3648,7 +3617,7 @@ dotted_as_names_rule(Parser *p) D(fprintf(stderr, "%*c> dotted_as_names[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); asdl_alias_seq* a; if ( - (a = (asdl_alias_seq*)_gather_36_rule(p)) // ','.dotted_as_name+ + (a = (asdl_alias_seq*)_gather_29_rule(p)) // ','.dotted_as_name+ ) { D(fprintf(stderr, "%*c+ dotted_as_names[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.dotted_as_name+")); @@ -3701,7 +3670,7 @@ dotted_as_name_rule(Parser *p) if ( (a = dotted_name_rule(p)) // dotted_name && - (b = _tmp_38_rule(p), 1) // ['as' NAME] + (b = _tmp_31_rule(p), 1) // ['as' NAME] ) { D(fprintf(stderr, "%*c+ dotted_as_name[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_name ['as' NAME]")); @@ -3832,265 +3801,123 @@ dotted_name_raw(Parser *p) return _res; } -// if_stmt: -// | invalid_if_stmt -// | 'if' named_expression ':' block elif_stmt -// | 'if' named_expression ':' block else_block? -static stmt_ty -if_stmt_rule(Parser *p) +// block: NEWLINE INDENT statements DEDENT | simple_stmts | invalid_block +static asdl_stmt_seq* +block_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; + asdl_stmt_seq* _res = NULL; + if (_PyPegen_is_memoized(p, block_type, &_res)) { D(p->level--); - return NULL; + return _res; } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_if_stmt + int _mark = p->mark; + { // NEWLINE INDENT statements DEDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); - void *invalid_if_stmt_var; + D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT")); + asdl_stmt_seq* a; + Token * dedent_var; + Token * indent_var; + Token * newline_var; if ( - (invalid_if_stmt_var = invalid_if_stmt_rule(p)) // invalid_if_stmt + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + && + (a = statements_rule(p)) // statements + && + (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' ) { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); - _res = invalid_if_stmt_var; + D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt")); + D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT")); } - { // 'if' named_expression ':' block elif_stmt + { // simple_stmts if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); - Token * _keyword; - Token * _literal; - expr_ty a; - asdl_stmt_seq* b; - stmt_ty c; + D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts")); + asdl_stmt_seq* simple_stmts_var; if ( - (_keyword = _PyPegen_expect_token(p, 510)) // token='if' - && - (a = named_expression_rule(p)) // named_expression - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (b = block_rule(p)) // block - && - (c = elif_stmt_rule(p)) // elif_stmt + (simple_stmts_var = simple_stmts_rule(p)) // simple_stmts ) { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts")); + _res = simple_stmts_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt")); + D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts")); } - { // 'if' named_expression ':' block else_block? + if (p->call_invalid_rules) { // invalid_block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); - Token * _keyword; - Token * _literal; - expr_ty a; - asdl_stmt_seq* b; - void *c; + D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block")); + void *invalid_block_var; if ( - (_keyword = _PyPegen_expect_token(p, 510)) // token='if' - && - (a = named_expression_rule(p)) // named_expression - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (b = block_rule(p)) // block - && - (c = else_block_rule(p), 1) // else_block? + (invalid_block_var = invalid_block_rule(p)) // invalid_block ) { - D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_If ( a , b , c , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_block")); + _res = invalid_block_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?")); + D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_block")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, block_type, _res); D(p->level--); return _res; } -// elif_stmt: -// | invalid_elif_stmt -// | 'elif' named_expression ':' block elif_stmt -// | 'elif' named_expression ':' block else_block? -static stmt_ty -elif_stmt_rule(Parser *p) +// decorators: (('@' named_expression NEWLINE))+ +static asdl_expr_seq* +decorators_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + asdl_expr_seq* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_elif_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); - void *invalid_elif_stmt_var; - if ( - (invalid_elif_stmt_var = invalid_elif_stmt_rule(p)) // invalid_elif_stmt - ) - { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); - _res = invalid_elif_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt")); - } - { // 'elif' named_expression ':' block elif_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); - Token * _keyword; - Token * _literal; - expr_ty a; - asdl_stmt_seq* b; - stmt_ty c; - if ( - (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' - && - (a = named_expression_rule(p)) // named_expression - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (b = block_rule(p)) // block - && - (c = elif_stmt_rule(p)) // elif_stmt - ) - { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); - } - { // 'elif' named_expression ':' block else_block? + { // (('@' named_expression NEWLINE))+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); - Token * _keyword; - Token * _literal; - expr_ty a; - asdl_stmt_seq* b; - void *c; + D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); + asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' - && - (a = named_expression_rule(p)) // named_expression - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (b = block_rule(p)) // block - && - (c = else_block_rule(p), 1) // else_block? + (a = (asdl_expr_seq*)_loop1_32_rule(p)) // (('@' named_expression NEWLINE))+ ) { - D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_If ( a , b , c , EXTRA ); + D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4099,8 +3926,8 @@ elif_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?")); + D(fprintf(stderr, "%*c%s decorators[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(('@' named_expression NEWLINE))+")); } _res = NULL; done: @@ -4108,65 +3935,62 @@ elif_stmt_rule(Parser *p) return _res; } -// else_block: invalid_else_stmt | 'else' &&':' block -static asdl_stmt_seq* -else_block_rule(Parser *p) +// class_def: decorators class_def_raw | class_def_raw +static stmt_ty +class_def_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_stmt_seq* _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; - if (p->call_invalid_rules) { // invalid_else_stmt + { // decorators class_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); - void *invalid_else_stmt_var; + D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw")); + asdl_expr_seq* a; + stmt_ty b; if ( - (invalid_else_stmt_var = invalid_else_stmt_rule(p)) // invalid_else_stmt + (a = decorators_rule(p)) // decorators + && + (b = class_def_raw_rule(p)) // class_def_raw ) { - D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); - _res = invalid_else_stmt_var; + D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw")); + _res = _PyPegen_class_def_decorators ( p , a , b ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_else_stmt")); + D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators class_def_raw")); } - { // 'else' &&':' block + { // class_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' &&':' block")); - Token * _keyword; - Token * _literal; - asdl_stmt_seq* b; + D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw")); + stmt_ty class_def_raw_var; if ( - (_keyword = _PyPegen_expect_token(p, 516)) // token='else' - && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (b = block_rule(p)) // block + (class_def_raw_var = class_def_raw_rule(p)) // class_def_raw ) { - D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' &&':' block")); - _res = b; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_def_raw")); + _res = class_def_raw_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' &&':' block")); + D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_def_raw")); } _res = NULL; done: @@ -4174,9 +3998,9 @@ else_block_rule(Parser *p) return _res; } -// while_stmt: invalid_while_stmt | 'while' named_expression ':' block else_block? +// class_def_raw: invalid_class_def_raw | 'class' NAME ['(' arguments? ')'] &&':' block static stmt_ty -while_stmt_rule(Parser *p) +class_def_raw_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -4194,49 +4018,49 @@ while_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_while_stmt + if (p->call_invalid_rules) { // invalid_class_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); - void *invalid_while_stmt_var; + D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); + void *invalid_class_def_raw_var; if ( - (invalid_while_stmt_var = invalid_while_stmt_rule(p)) // invalid_while_stmt + (invalid_class_def_raw_var = invalid_class_def_raw_rule(p)) // invalid_class_def_raw ) { - D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); - _res = invalid_while_stmt_var; + D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); + _res = invalid_class_def_raw_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt")); + D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_def_raw")); } - { // 'while' named_expression ':' block else_block? + { // 'class' NAME ['(' arguments? ')'] &&':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); + D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); Token * _keyword; Token * _literal; expr_ty a; - asdl_stmt_seq* b; - void *c; + void *b; + asdl_stmt_seq* c; if ( - (_keyword = _PyPegen_expect_token(p, 512)) // token='while' + (_keyword = _PyPegen_expect_token(p, 515)) // token='class' && - (a = named_expression_rule(p)) // named_expression + (a = _PyPegen_name_token(p)) // NAME && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (b = _tmp_33_rule(p), 1) // ['(' arguments? ')'] && - (b = block_rule(p)) // block + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && - (c = else_block_rule(p), 1) // else_block? + (c = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); + D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -4246,7 +4070,7 @@ while_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_While ( a , b , c , EXTRA ); + _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4255,8 +4079,8 @@ while_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?")); + D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); } _res = NULL; done: @@ -4264,13 +4088,9 @@ while_stmt_rule(Parser *p) return _res; } -// for_stmt: -// | invalid_for_stmt -// | 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? -// | ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? -// | invalid_for_target +// function_def: decorators function_def_raw | function_def_raw static stmt_ty -for_stmt_rule(Parser *p) +function_def_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -4279,144 +4099,22 @@ for_stmt_rule(Parser *p) } stmt_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_for_stmt + { // decorators function_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); - void *invalid_for_stmt_var; + D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw")); + asdl_expr_seq* d; + stmt_ty f; if ( - (invalid_for_stmt_var = invalid_for_stmt_rule(p)) // invalid_for_stmt + (d = decorators_rule(p)) // decorators + && + (f = function_def_raw_rule(p)) // function_def_raw ) { - D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); - _res = invalid_for_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_stmt")); - } - { // 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - int _cut_var = 0; - Token * _keyword; - Token * _keyword_1; - Token * _literal; - asdl_stmt_seq* b; - void *el; - expr_ty ex; - expr_ty t; - void *tc; - if ( - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' - && - (t = star_targets_rule(p)) // star_targets - && - (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='in' - && - (_cut_var = 1) - && - (ex = star_expressions_rule(p)) // star_expressions - && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? - && - (b = block_rule(p)) // block - && - (el = else_block_rule(p), 1) // else_block? - ) - { - D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - if (_cut_var) { - D(p->level--); - return NULL; - } - } - { // ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - int _cut_var = 0; - Token * _keyword; - Token * _keyword_1; - Token * _literal; - Token * async_var; - asdl_stmt_seq* b; - void *el; - expr_ty ex; - expr_ty t; - void *tc; - if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' - && - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' - && - (t = star_targets_rule(p)) // star_targets - && - (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='in' - && - (_cut_var = 1) - && - (ex = star_expressions_rule(p)) // star_expressions - && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? - && - (b = block_rule(p)) // block - && - (el = else_block_rule(p), 1) // else_block? - ) - { - D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); + D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw")); + _res = _PyPegen_function_def_decorators ( p , d , f ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4425,31 +4123,27 @@ for_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); - if (_cut_var) { - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators function_def_raw")); } - if (p->call_invalid_rules) { // invalid_for_target + { // function_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); - void *invalid_for_target_var; + D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw")); + stmt_ty function_def_raw_var; if ( - (invalid_for_target_var = invalid_for_target_rule(p)) // invalid_for_target + (function_def_raw_var = function_def_raw_rule(p)) // function_def_raw ) { - D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); - _res = invalid_for_target_var; + D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "function_def_raw")); + _res = function_def_raw_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target")); + D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "function_def_raw")); } _res = NULL; done: @@ -4457,15 +4151,12 @@ for_stmt_rule(Parser *p) return _res; } -// with_stmt: -// | invalid_with_stmt_indent -// | 'with' '(' ','.with_item+ ','? ')' ':' block -// | 'with' ','.with_item+ ':' TYPE_COMMENT? block -// | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block -// | ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block -// | invalid_with_stmt +// function_def_raw: +// | invalid_def_raw +// | 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block +// | ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block static stmt_ty -with_stmt_rule(Parser *p) +function_def_raw_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -4483,101 +4174,61 @@ with_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_with_stmt_indent + if (p->call_invalid_rules) { // invalid_def_raw if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); - void *invalid_with_stmt_indent_var; + D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); + void *invalid_def_raw_var; if ( - (invalid_with_stmt_indent_var = invalid_with_stmt_indent_rule(p)) // invalid_with_stmt_indent + (invalid_def_raw_var = invalid_def_raw_rule(p)) // invalid_def_raw ) { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); - _res = invalid_with_stmt_indent_var; + D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); + _res = invalid_def_raw_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt_indent")); + D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw")); } - { // 'with' '(' ','.with_item+ ','? ')' ':' block + { // 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); + D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); Token * _keyword; Token * _literal; Token * _literal_1; Token * _literal_2; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_withitem_seq* a; + void *a; asdl_stmt_seq* b; + expr_ty n; + void *params; + void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' + (_keyword = _PyPegen_expect_token(p, 516)) // token='def' && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (n = _PyPegen_name_token(p)) // NAME && - (a = (asdl_withitem_seq*)_gather_39_rule(p)) // ','.with_item+ + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (params = params_rule(p), 1) // params? && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' - && - (b = block_rule(p)) // block - ) - { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_With ( a , b , NULL , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); - } - { // 'with' ','.with_item+ ':' TYPE_COMMENT? block - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); - Token * _keyword; - Token * _literal; - asdl_withitem_seq* a; - asdl_stmt_seq* b; - void *tc; - if ( - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' - && - (a = (asdl_withitem_seq*)_gather_41_rule(p)) // ','.with_item+ + (a = _tmp_34_rule(p), 1) // ['->' expression] && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (tc = func_type_comment_rule(p), 1) // func_type_comment? && (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); + D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -4587,7 +4238,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4596,43 +4247,48 @@ with_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); + D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); } - { // ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block + { // ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); + D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); Token * _keyword; Token * _literal; Token * _literal_1; Token * _literal_2; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_withitem_seq* a; + void *a; Token * async_var; asdl_stmt_seq* b; + expr_ty n; + void *params; + void *tc; if ( (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' && - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' + (_keyword = _PyPegen_expect_token(p, 516)) // token='def' && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (n = _PyPegen_name_token(p)) // NAME && - (a = (asdl_withitem_seq*)_gather_43_rule(p)) // ','.with_item+ + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (params = params_rule(p), 1) // params? && (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' && - (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' + (a = _tmp_35_rule(p), 1) // ['->' expression] + && + (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (tc = func_type_comment_rule(p), 1) // func_type_comment? && (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); + D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -4642,7 +4298,7 @@ with_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4651,75 +4307,63 @@ with_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); + D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); } - { // ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block + _res = NULL; + done: + D(p->level--); + return _res; +} + +// params: invalid_parameters | parameters +static arguments_ty +params_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + arguments_ty _res = NULL; + int _mark = p->mark; + if (p->call_invalid_rules) { // invalid_parameters if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); - Token * _keyword; - Token * _literal; - asdl_withitem_seq* a; - Token * async_var; - asdl_stmt_seq* b; - void *tc; + D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters")); + void *invalid_parameters_var; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' - && - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' - && - (a = (asdl_withitem_seq*)_gather_45_rule(p)) // ','.with_item+ - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? - && - (b = block_rule(p)) // block + (invalid_parameters_var = invalid_parameters_rule(p)) // invalid_parameters ) { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_parameters")); + _res = invalid_parameters_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); + D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_parameters")); } - if (p->call_invalid_rules) { // invalid_with_stmt + { // parameters if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt")); - void *invalid_with_stmt_var; + D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters")); + arguments_ty parameters_var; if ( - (invalid_with_stmt_var = invalid_with_stmt_rule(p)) // invalid_with_stmt + (parameters_var = parameters_rule(p)) // parameters ) { - D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt")); - _res = invalid_with_stmt_var; + D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "parameters")); + _res = parameters_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt")); + D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "parameters")); } _res = NULL; done: @@ -4727,41 +4371,44 @@ with_stmt_rule(Parser *p) return _res; } -// with_item: -// | expression 'as' star_target &(',' | ')' | ':') -// | invalid_with_item -// | expression -static withitem_ty -with_item_rule(Parser *p) +// parameters: +// | slash_no_default param_no_default* param_with_default* star_etc? +// | slash_with_default param_with_default* star_etc? +// | param_no_default+ param_with_default* star_etc? +// | param_with_default+ star_etc? +// | star_etc +static arguments_ty +parameters_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - withitem_ty _res = NULL; + arguments_ty _res = NULL; int _mark = p->mark; - { // expression 'as' star_target &(',' | ')' | ':') + { // slash_no_default param_no_default* param_with_default* star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); - Token * _keyword; - expr_ty e; - expr_ty t; + D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); + asdl_arg_seq* a; + asdl_arg_seq* b; + asdl_seq * c; + void *d; if ( - (e = expression_rule(p)) // expression + (a = slash_no_default_rule(p)) // slash_no_default && - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (b = (asdl_arg_seq*)_loop0_36_rule(p)) // param_no_default* && - (t = star_target_rule(p)) // star_target + (c = _loop0_37_rule(p)) // param_with_default* && - _PyPegen_lookahead(1, _tmp_47_rule, p) + (d = star_etc_rule(p), 1) // star_etc? ) { - D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); - _res = _PyAST_withitem ( e , t , p -> arena ); + D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); + _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4770,41 +4417,58 @@ with_item_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); + D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); } - if (p->call_invalid_rules) { // invalid_with_item + { // slash_with_default param_with_default* star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item")); - void *invalid_with_item_var; + D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?")); + SlashWithDefault* a; + asdl_seq * b; + void *c; if ( - (invalid_with_item_var = invalid_with_item_rule(p)) // invalid_with_item + (a = slash_with_default_rule(p)) // slash_with_default + && + (b = _loop0_38_rule(p)) // param_with_default* + && + (c = star_etc_rule(p), 1) // star_etc? ) { - D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_item")); - _res = invalid_with_item_var; + D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_item")); + D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default param_with_default* star_etc?")); } - { // expression + { // param_no_default+ param_with_default* star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression")); - expr_ty e; + D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); + asdl_arg_seq* a; + asdl_seq * b; + void *c; if ( - (e = expression_rule(p)) // expression + (a = (asdl_arg_seq*)_loop1_39_rule(p)) // param_no_default+ + && + (b = _loop0_40_rule(p)) // param_with_default* + && + (c = star_etc_rule(p), 1) // star_etc? ) { - D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression")); - _res = _PyAST_withitem ( e , NULL , p -> arena ); + D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4813,88 +4477,49 @@ with_item_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// try_stmt: -// | invalid_try_stmt -// | 'try' &&':' block finally_block -// | 'try' &&':' block except_block+ else_block? finally_block? -static stmt_ty -try_stmt_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - stmt_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_try_stmt + { // param_with_default+ star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); - void *invalid_try_stmt_var; + D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?")); + asdl_seq * a; + void *b; if ( - (invalid_try_stmt_var = invalid_try_stmt_rule(p)) // invalid_try_stmt + (a = _loop1_41_rule(p)) // param_with_default+ + && + (b = star_etc_rule(p), 1) // star_etc? ) { - D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); - _res = invalid_try_stmt_var; + D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_try_stmt")); + D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+ star_etc?")); } - { // 'try' &&':' block finally_block + { // star_etc if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block")); - Token * _keyword; - Token * _literal; - asdl_stmt_seq* b; - asdl_stmt_seq* f; + D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc")); + StarEtc* a; if ( - (_keyword = _PyPegen_expect_token(p, 511)) // token='try' - && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (b = block_rule(p)) // block - && - (f = finally_block_rule(p)) // finally_block + (a = star_etc_rule(p)) // star_etc ) { - D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA ); + D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_etc")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -4903,56 +4528,8 @@ try_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block finally_block")); - } - { // 'try' &&':' block except_block+ else_block? finally_block? - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); - Token * _keyword; - Token * _literal; - asdl_stmt_seq* b; - void *el; - asdl_excepthandler_seq* ex; - void *f; - if ( - (_keyword = _PyPegen_expect_token(p, 511)) // token='try' - && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (b = block_rule(p)) // block - && - (ex = (asdl_excepthandler_seq*)_loop1_48_rule(p)) // except_block+ - && - (el = else_block_rule(p), 1) // else_block? - && - (f = finally_block_rule(p), 1) // finally_block? - ) - { - D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Try ( b , ex , el , f , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); + D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_etc")); } _res = NULL; done: @@ -4960,83 +4537,36 @@ try_stmt_rule(Parser *p) return _res; } -// except_block: -// | invalid_except_stmt_indent -// | 'except' expression ['as' NAME] ':' block -// | 'except' ':' block -// | invalid_except_stmt -static excepthandler_ty -except_block_rule(Parser *p) +// slash_no_default: param_no_default+ '/' ',' | param_no_default+ '/' &')' +static asdl_arg_seq* +slash_no_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - excepthandler_ty _res = NULL; + asdl_arg_seq* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_except_stmt_indent - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); - void *invalid_except_stmt_indent_var; - if ( - (invalid_except_stmt_indent_var = invalid_except_stmt_indent_rule(p)) // invalid_except_stmt_indent - ) - { - D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); - _res = invalid_except_stmt_indent_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt_indent")); - } - { // 'except' expression ['as' NAME] ':' block + { // param_no_default+ '/' ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block")); - Token * _keyword; + D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','")); Token * _literal; - asdl_stmt_seq* b; - expr_ty e; - void *t; + Token * _literal_1; + asdl_arg_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' - && - (e = expression_rule(p)) // expression - && - (t = _tmp_49_rule(p), 1) // ['as' NAME] + (a = (asdl_arg_seq*)_loop1_42_rule(p)) // param_no_default+ && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 17)) // token='/' && - (b = block_rule(p)) // block + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA ); + D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5045,37 +4575,27 @@ except_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' block")); + D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' ','")); } - { // 'except' ':' block + { // param_no_default+ '/' &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block")); - Token * _keyword; + D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'")); Token * _literal; - asdl_stmt_seq* b; + asdl_arg_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (a = (asdl_arg_seq*)_loop1_43_rule(p)) // param_no_default+ && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 17)) // token='/' && - (b = block_rule(p)) // block + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA ); + D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5084,27 +4604,8 @@ except_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block")); - } - if (p->call_invalid_rules) { // invalid_except_stmt - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); - void *invalid_except_stmt_var; - if ( - (invalid_except_stmt_var = invalid_except_stmt_rule(p)) // invalid_except_stmt - ) - { - D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); - _res = invalid_except_stmt_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt")); + D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' &')'")); } _res = NULL; done: @@ -5112,55 +4613,73 @@ except_block_rule(Parser *p) return _res; } -// finally_block: invalid_finally_stmt | 'finally' &&':' block -static asdl_stmt_seq* -finally_block_rule(Parser *p) +// slash_with_default: +// | param_no_default* param_with_default+ '/' ',' +// | param_no_default* param_with_default+ '/' &')' +static SlashWithDefault* +slash_with_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_stmt_seq* _res = NULL; + SlashWithDefault* _res = NULL; int _mark = p->mark; - if (p->call_invalid_rules) { // invalid_finally_stmt + { // param_no_default* param_with_default+ '/' ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); - void *invalid_finally_stmt_var; + D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); + Token * _literal; + Token * _literal_1; + asdl_seq * a; + asdl_seq * b; if ( - (invalid_finally_stmt_var = invalid_finally_stmt_rule(p)) // invalid_finally_stmt + (a = _loop0_44_rule(p)) // param_no_default* + && + (b = _loop1_45_rule(p)) // param_with_default+ + && + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); - _res = invalid_finally_stmt_var; + D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); + _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_finally_stmt")); + D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); } - { // 'finally' &&':' block + { // param_no_default* param_with_default+ '/' &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); - Token * _keyword; + D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); Token * _literal; - asdl_stmt_seq* a; + asdl_seq * a; + asdl_seq * b; if ( - (_keyword = _PyPegen_expect_token(p, 522)) // token='finally' + (a = _loop0_46_rule(p)) // param_no_default* && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (b = _loop1_47_rule(p)) // param_with_default+ && - (a = block_rule(p)) // block + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); - _res = a; + D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); + _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5169,8 +4688,8 @@ finally_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' &&':' block")); + D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); } _res = NULL; done: @@ -5178,68 +4697,100 @@ finally_block_rule(Parser *p) return _res; } -// match_stmt: -// | "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT -// | invalid_match_stmt -static stmt_ty -match_stmt_rule(Parser *p) +// star_etc: +// | '*' param_no_default param_maybe_default* kwds? +// | '*' ',' param_maybe_default+ kwds? +// | kwds +// | invalid_star_etc +static StarEtc* +star_etc_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + StarEtc* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT + { // '*' param_no_default param_maybe_default* kwds? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); - expr_ty _keyword; + D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); Token * _literal; - asdl_match_case_seq* cases; - Token * dedent_var; - Token * indent_var; - Token * newline_var; - expr_ty subject; - if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "match")) // soft_keyword='"match"' + arg_ty a; + asdl_seq * b; + void *c; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (subject = subject_expr_rule(p)) // subject_expr + (a = param_no_default_rule(p)) // param_no_default && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (b = _loop0_48_rule(p)) // param_maybe_default* && - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + (c = kwds_rule(p), 1) // kwds? + ) + { + D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); + _res = _PyPegen_star_etc ( p , a , b , c ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); + } + { // '*' ',' param_maybe_default+ kwds? + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); + Token * _literal; + Token * _literal_1; + asdl_seq * b; + void *c; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (cases = (asdl_match_case_seq*)_loop1_50_rule(p)) // case_block+ + (b = _loop1_49_rule(p)) // param_maybe_default+ && - (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' + (c = kwds_rule(p), 1) // kwds? ) { - D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { + D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); + _res = _PyPegen_star_etc ( p , NULL , b , c ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; D(p->level--); return NULL; } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) ); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); + } + { // kwds + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds")); + arg_ty a; + if ( + (a = kwds_rule(p)) // kwds + ) + { + D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwds")); + _res = _PyPegen_star_etc ( p , NULL , NULL , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5248,27 +4799,27 @@ match_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); + D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwds")); } - if (p->call_invalid_rules) { // invalid_match_stmt + if (p->call_invalid_rules) { // invalid_star_etc if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt")); - void *invalid_match_stmt_var; + D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc")); + void *invalid_star_etc_var; if ( - (invalid_match_stmt_var = invalid_match_stmt_rule(p)) // invalid_match_stmt + (invalid_star_etc_var = invalid_star_etc_rule(p)) // invalid_star_etc ) { - D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt")); - _res = invalid_match_stmt_var; + D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_star_etc")); + _res = invalid_star_etc_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_match_stmt")); + D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_star_etc")); } _res = NULL; done: @@ -5276,54 +4827,33 @@ match_stmt_rule(Parser *p) return _res; } -// subject_expr: star_named_expression ',' star_named_expressions? | named_expression -static expr_ty -subject_expr_rule(Parser *p) +// kwds: '**' param_no_default +static arg_ty +kwds_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + arg_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // star_named_expression ',' star_named_expressions? + { // '**' param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); + D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default")); Token * _literal; - expr_ty value; - void *values; + arg_ty a; if ( - (value = star_named_expression_rule(p)) // star_named_expression - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - (values = star_named_expressions_rule(p), 1) // star_named_expressions? + (a = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA ); + D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param_no_default")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5332,27 +4862,8 @@ subject_expr_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?")); - } - { // named_expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); - expr_ty named_expression_var; - if ( - (named_expression_var = named_expression_rule(p)) // named_expression - ) - { - D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); - _res = named_expression_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param_no_default")); } _res = NULL; done: @@ -5360,61 +4871,65 @@ subject_expr_rule(Parser *p) return _res; } -// case_block: invalid_case_block | "case" patterns guard? ':' block -static match_case_ty -case_block_rule(Parser *p) +// param_no_default: param ',' TYPE_COMMENT? | param TYPE_COMMENT? &')' +static arg_ty +param_no_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - match_case_ty _res = NULL; + arg_ty _res = NULL; int _mark = p->mark; - if (p->call_invalid_rules) { // invalid_case_block + { // param ',' TYPE_COMMENT? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); - void *invalid_case_block_var; + D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?")); + Token * _literal; + arg_ty a; + void *tc; if ( - (invalid_case_block_var = invalid_case_block_rule(p)) // invalid_case_block + (a = param_rule(p)) // param + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? ) { - D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); - _res = invalid_case_block_var; + D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?")); + _res = _PyPegen_add_type_comment_to_arg ( p , a , tc ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block")); + D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param ',' TYPE_COMMENT?")); } - { // "case" patterns guard? ':' block + { // param TYPE_COMMENT? &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block")); - expr_ty _keyword; - Token * _literal; - asdl_stmt_seq* body; - void *guard; - pattern_ty pattern; + D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'")); + arg_ty a; + void *tc; if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' - && - (pattern = patterns_rule(p)) // patterns - && - (guard = guard_rule(p), 1) // guard? + (a = param_rule(p)) // param && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? && - (body = block_rule(p)) // block + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block")); - _res = _PyAST_match_case ( pattern , guard , body , p -> arena ); + D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'")); + _res = _PyPegen_add_type_comment_to_arg ( p , a , tc ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5423,8 +4938,8 @@ case_block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block")); + D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param TYPE_COMMENT? &')'")); } _res = NULL; done: @@ -5432,33 +4947,39 @@ case_block_rule(Parser *p) return _res; } -// guard: 'if' named_expression -static expr_ty -guard_rule(Parser *p) +// param_with_default: param default ',' TYPE_COMMENT? | param default TYPE_COMMENT? &')' +static NameDefaultPair* +param_with_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + NameDefaultPair* _res = NULL; int _mark = p->mark; - { // 'if' named_expression + { // param default ',' TYPE_COMMENT? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> guard[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression")); - Token * _keyword; - expr_ty guard; + D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?")); + Token * _literal; + arg_ty a; + expr_ty c; + void *tc; if ( - (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + (a = param_rule(p)) // param && - (guard = named_expression_rule(p)) // named_expression + (c = default_rule(p)) // default + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? ) { - D(fprintf(stderr, "%*c+ guard[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression")); - _res = guard; + D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?")); + _res = _PyPegen_name_default_pair ( p , a , c , tc ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5467,57 +4988,30 @@ guard_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s guard[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression")); + D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default ',' TYPE_COMMENT?")); } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// patterns: open_sequence_pattern | pattern -static pattern_ty -patterns_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - pattern_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // open_sequence_pattern + { // param default TYPE_COMMENT? &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); - asdl_pattern_seq* patterns; + D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'")); + arg_ty a; + expr_ty c; + void *tc; if ( - (patterns = (asdl_pattern_seq*)open_sequence_pattern_rule(p)) // open_sequence_pattern + (a = param_rule(p)) // param + && + (c = default_rule(p)) // default + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSequence ( patterns , EXTRA ); + D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'")); + _res = _PyPegen_name_default_pair ( p , a , c , tc ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5526,27 +5020,8 @@ patterns_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "open_sequence_pattern")); - } - { // pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); - pattern_ty pattern_var; - if ( - (pattern_var = pattern_rule(p)) // pattern - ) - { - D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern")); - _res = pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern")); + D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default TYPE_COMMENT? &')'")); } _res = NULL; done: @@ -5554,54 +5029,83 @@ patterns_rule(Parser *p) return _res; } -// pattern: as_pattern | or_pattern -static pattern_ty -pattern_rule(Parser *p) +// param_maybe_default: +// | param default? ',' TYPE_COMMENT? +// | param default? TYPE_COMMENT? &')' +static NameDefaultPair* +param_maybe_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + NameDefaultPair* _res = NULL; int _mark = p->mark; - { // as_pattern + { // param default? ',' TYPE_COMMENT? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern")); - pattern_ty as_pattern_var; + D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?")); + Token * _literal; + arg_ty a; + void *c; + void *tc; if ( - (as_pattern_var = as_pattern_rule(p)) // as_pattern + (a = param_rule(p)) // param + && + (c = default_rule(p), 1) // default? + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? ) { - D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "as_pattern")); - _res = as_pattern_var; + D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?")); + _res = _PyPegen_name_default_pair ( p , a , c , tc ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "as_pattern")); + D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? ',' TYPE_COMMENT?")); } - { // or_pattern + { // param default? TYPE_COMMENT? &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern")); - pattern_ty or_pattern_var; + D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'")); + arg_ty a; + void *c; + void *tc; if ( - (or_pattern_var = or_pattern_rule(p)) // or_pattern + (a = param_rule(p)) // param + && + (c = default_rule(p), 1) // default? + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern")); - _res = or_pattern_var; + D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'")); + _res = _PyPegen_name_default_pair ( p , a , c , tc ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern")); + D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? TYPE_COMMENT? &')'")); } _res = NULL; done: @@ -5609,16 +5113,16 @@ pattern_rule(Parser *p) return _res; } -// as_pattern: or_pattern 'as' pattern_capture_target | invalid_as_pattern -static pattern_ty -as_pattern_rule(Parser *p) +// param: NAME annotation? +static arg_ty +param_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + arg_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5629,24 +5133,21 @@ as_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // or_pattern 'as' pattern_capture_target + { // NAME annotation? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); - Token * _keyword; - pattern_ty pattern; - expr_ty target; + D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?")); + expr_ty a; + void *b; if ( - (pattern = or_pattern_rule(p)) // or_pattern - && - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (a = _PyPegen_name_token(p)) // NAME && - (target = pattern_capture_target_rule(p)) // pattern_capture_target + (b = annotation_rule(p), 1) // annotation? ) { - D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); + D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -5656,7 +5157,7 @@ as_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA ); + _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5665,27 +5166,8 @@ as_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' pattern_capture_target")); - } - if (p->call_invalid_rules) { // invalid_as_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern")); - void *invalid_as_pattern_var; - if ( - (invalid_as_pattern_var = invalid_as_pattern_rule(p)) // invalid_as_pattern - ) - { - D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern")); - _res = invalid_as_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_as_pattern")); + D(fprintf(stderr, "%*c%s param[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME annotation?")); } _res = NULL; done: @@ -5693,48 +5175,33 @@ as_pattern_rule(Parser *p) return _res; } -// or_pattern: '|'.closed_pattern+ -static pattern_ty -or_pattern_rule(Parser *p) +// annotation: ':' expression +static expr_ty +annotation_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '|'.closed_pattern+ + { // ':' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); - asdl_pattern_seq* patterns; + D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression")); + Token * _literal; + expr_ty a; if ( - (patterns = (asdl_pattern_seq*)_gather_51_rule(p)) // '|'.closed_pattern+ + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA ); + D(fprintf(stderr, "%*c+ annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -5743,8 +5210,8 @@ or_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s or_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|'.closed_pattern+")); + D(fprintf(stderr, "%*c%s annotation[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression")); } _res = NULL; done: @@ -5752,176 +5219,43 @@ or_pattern_rule(Parser *p) return _res; } -// closed_pattern: -// | literal_pattern -// | capture_pattern -// | wildcard_pattern -// | value_pattern -// | group_pattern -// | sequence_pattern -// | mapping_pattern -// | class_pattern -static pattern_ty -closed_pattern_rule(Parser *p) +// default: '=' expression +static expr_ty +default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // literal_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern")); - pattern_ty literal_pattern_var; - if ( - (literal_pattern_var = literal_pattern_rule(p)) // literal_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_pattern")); - _res = literal_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_pattern")); - } - { // capture_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern")); - pattern_ty capture_pattern_var; - if ( - (capture_pattern_var = capture_pattern_rule(p)) // capture_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "capture_pattern")); - _res = capture_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "capture_pattern")); - } - { // wildcard_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); - pattern_ty wildcard_pattern_var; - if ( - (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); - _res = wildcard_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "wildcard_pattern")); - } - { // value_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern")); - pattern_ty value_pattern_var; - if ( - (value_pattern_var = value_pattern_rule(p)) // value_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "value_pattern")); - _res = value_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "value_pattern")); - } - { // group_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern")); - pattern_ty group_pattern_var; - if ( - (group_pattern_var = group_pattern_rule(p)) // group_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group_pattern")); - _res = group_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group_pattern")); - } - { // sequence_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern")); - pattern_ty sequence_pattern_var; - if ( - (sequence_pattern_var = sequence_pattern_rule(p)) // sequence_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sequence_pattern")); - _res = sequence_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sequence_pattern")); - } - { // mapping_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern")); - pattern_ty mapping_pattern_var; - if ( - (mapping_pattern_var = mapping_pattern_rule(p)) // mapping_pattern - ) - { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "mapping_pattern")); - _res = mapping_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "mapping_pattern")); - } - { // class_pattern + { // '=' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern")); - pattern_ty class_pattern_var; + D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression")); + Token * _literal; + expr_ty a; if ( - (class_pattern_var = class_pattern_rule(p)) // class_pattern + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + && + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_pattern")); - _res = class_pattern_var; + D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_pattern")); + D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression")); } _res = NULL; done: @@ -5929,22 +5263,19 @@ closed_pattern_rule(Parser *p) return _res; } -// literal_pattern: -// | signed_number !('+' | '-') -// | complex_number -// | strings -// | 'None' -// | 'True' -// | 'False' -static pattern_ty -literal_pattern_rule(Parser *p) +// if_stmt: +// | invalid_if_stmt +// | 'if' named_expression ':' block elif_stmt +// | 'if' named_expression ':' block else_block? +static stmt_ty +if_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -5955,53 +5286,49 @@ literal_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // signed_number !('+' | '-') + if (p->call_invalid_rules) { // invalid_if_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - expr_ty value; + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + void *invalid_if_stmt_var; if ( - (value = signed_number_rule(p)) // signed_number - && - _PyPegen_lookahead(0, _tmp_53_rule, p) + (invalid_if_stmt_var = invalid_if_stmt_rule(p)) // invalid_if_stmt ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchValue ( value , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_if_stmt")); + _res = invalid_if_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); + D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_if_stmt")); } - { // complex_number + { // 'if' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); - expr_ty value; + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); + Token * _keyword; + Token * _literal; + expr_ty a; + asdl_stmt_seq* b; + stmt_ty c; if ( - (value = complex_number_rule(p)) // complex_number + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + && + (a = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + && + (c = elif_stmt_rule(p)) // elif_stmt ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block elif_stmt")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6011,7 +5338,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchValue ( value , EXTRA ); + _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6020,21 +5347,33 @@ literal_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); + D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block elif_stmt")); } - { // strings + { // 'if' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); - expr_ty value; + D(fprintf(stderr, "%*c> if_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); + Token * _keyword; + Token * _literal; + expr_ty a; + asdl_stmt_seq* b; + void *c; if ( - (value = strings_rule(p)) // strings + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' + && + (a = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + && + (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); + D(fprintf(stderr, "%*c+ if_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6044,7 +5383,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchValue ( value , EXTRA ); + _res = _PyAST_If ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6053,54 +5392,81 @@ literal_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings")); + D(fprintf(stderr, "%*c%s if_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression ':' block else_block?")); } - { // 'None' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// elif_stmt: +// | invalid_elif_stmt +// | 'elif' named_expression ':' block elif_stmt +// | 'elif' named_expression ':' block else_block? +static stmt_ty +elif_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + stmt_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_elif_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); - Token * _keyword; + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + void *invalid_elif_stmt_var; if ( - (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + (invalid_elif_stmt_var = invalid_elif_stmt_rule(p)) // invalid_elif_stmt ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSingleton ( Py_None , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_elif_stmt")); + _res = invalid_elif_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_elif_stmt")); } - { // 'True' + { // 'elif' named_expression ':' block elif_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); Token * _keyword; + Token * _literal; + expr_ty a; + asdl_stmt_seq* b; + stmt_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 524)) // token='True' + (_keyword = _PyPegen_expect_token(p, 517)) // token='elif' + && + (a = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + && + (c = elif_stmt_rule(p)) // elif_stmt ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6110,7 +5476,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSingleton ( Py_True , EXTRA ); + _res = _PyAST_If ( a , b , CHECK ( asdl_stmt_seq * , _PyPegen_singleton_seq ( p , c ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6119,21 +5485,33 @@ literal_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block elif_stmt")); } - { // 'False' + { // 'elif' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c> elif_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); Token * _keyword; + Token * _literal; + expr_ty a; + asdl_stmt_seq* b; + void *c; if ( - (_keyword = _PyPegen_expect_token(p, 525)) // token='False' + (_keyword = _PyPegen_expect_token(p, 517)) // token='elif' + && + (a = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + && + (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ elif_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'elif' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6143,7 +5521,7 @@ literal_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSingleton ( Py_False , EXTRA ); + _res = _PyAST_If ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6152,8 +5530,8 @@ literal_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c%s elif_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'elif' named_expression ':' block else_block?")); } _res = NULL; done: @@ -6161,103 +5539,135 @@ literal_pattern_rule(Parser *p) return _res; } -// literal_expr: -// | signed_number !('+' | '-') -// | complex_number -// | strings -// | 'None' -// | 'True' -// | 'False' -static expr_ty -literal_expr_rule(Parser *p) +// else_block: invalid_else_stmt | 'else' &&':' block +static asdl_stmt_seq* +else_block_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + asdl_stmt_seq* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // signed_number !('+' | '-') + if (p->call_invalid_rules) { // invalid_else_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - expr_ty signed_number_var; + D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); + void *invalid_else_stmt_var; if ( - (signed_number_var = signed_number_rule(p)) // signed_number - && - _PyPegen_lookahead(0, _tmp_54_rule, p) + (invalid_else_stmt_var = invalid_else_stmt_rule(p)) // invalid_else_stmt ) { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); - _res = signed_number_var; + D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_else_stmt")); + _res = invalid_else_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); + D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_else_stmt")); } - { // complex_number + { // 'else' &&':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); - expr_ty complex_number_var; + D(fprintf(stderr, "%*c> else_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'else' &&':' block")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* b; if ( - (complex_number_var = complex_number_rule(p)) // complex_number + (_keyword = _PyPegen_expect_token(p, 518)) // token='else' + && + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); - _res = complex_number_var; + D(fprintf(stderr, "%*c+ else_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'else' &&':' block")); + _res = b; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); + D(fprintf(stderr, "%*c%s else_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'else' &&':' block")); } - { // strings + _res = NULL; + done: + D(p->level--); + return _res; +} + +// while_stmt: invalid_while_stmt | 'while' named_expression ':' block else_block? +static stmt_ty +while_stmt_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + stmt_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_while_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); - expr_ty strings_var; + D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + void *invalid_while_stmt_var; if ( - (strings_var = strings_rule(p)) // strings + (invalid_while_stmt_var = invalid_while_stmt_rule(p)) // invalid_while_stmt ) { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); - _res = strings_var; + D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_while_stmt")); + _res = invalid_while_stmt_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings")); + D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_while_stmt")); } - { // 'None' + { // 'while' named_expression ':' block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c> while_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); Token * _keyword; + Token * _literal; + expr_ty a; + asdl_stmt_seq* b; + void *c; if ( - (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + (_keyword = _PyPegen_expect_token(p, 512)) // token='while' + && + (a = named_expression_rule(p)) // named_expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + && + (c = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ while_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'while' named_expression ':' block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6267,7 +5677,7 @@ literal_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); + _res = _PyAST_While ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6276,74 +5686,8 @@ literal_expr_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); - } - { // 'True' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); - Token * _keyword; - if ( - (_keyword = _PyPegen_expect_token(p, 524)) // token='True' - ) - { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); - } - { // 'False' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); - Token * _keyword; - if ( - (_keyword = _PyPegen_expect_token(p, 525)) // token='False' - ) - { - D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c%s while_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'while' named_expression ':' block else_block?")); } _res = NULL; done: @@ -6351,18 +5695,20 @@ literal_expr_rule(Parser *p) return _res; } -// complex_number: -// | signed_real_number '+' imaginary_number -// | signed_real_number '-' imaginary_number -static expr_ty -complex_number_rule(Parser *p) +// for_stmt: +// | invalid_for_stmt +// | 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? +// | ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? +// | invalid_for_target +static stmt_ty +for_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6373,24 +5719,61 @@ complex_number_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // signed_real_number '+' imaginary_number + if (p->call_invalid_rules) { // invalid_for_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); + D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); + void *invalid_for_stmt_var; + if ( + (invalid_for_stmt_var = invalid_for_stmt_rule(p)) // invalid_for_stmt + ) + { + D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_stmt")); + _res = invalid_for_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_stmt")); + } + { // 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); + int _cut_var = 0; + Token * _keyword; + Token * _keyword_1; Token * _literal; - expr_ty imag; - expr_ty real; + asdl_stmt_seq* b; + void *el; + expr_ty ex; + expr_ty t; + void *tc; if ( - (real = signed_real_number_rule(p)) // signed_real_number + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' && - (_literal = _PyPegen_expect_token(p, 14)) // token='+' + (t = star_targets_rule(p)) // star_targets && - (imag = imaginary_number_rule(p)) // imaginary_number + (_keyword_1 = _PyPegen_expect_token(p, 520)) // token='in' + && + (_cut_var = 1) + && + (ex = star_expressions_rule(p)) // star_expressions + && + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + (b = block_rule(p)) // block + && + (el = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); + D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6400,7 +5783,7 @@ complex_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( real , Add , imag , EXTRA ); + _res = _PyAST_For ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6409,27 +5792,52 @@ complex_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '+' imaginary_number")); + D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); + if (_cut_var) { + D(p->level--); + return NULL; + } } - { // signed_real_number '-' imaginary_number + { // ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); + D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); + int _cut_var = 0; + Token * _keyword; + Token * _keyword_1; Token * _literal; - expr_ty imag; - expr_ty real; + Token * async_var; + asdl_stmt_seq* b; + void *el; + expr_ty ex; + expr_ty t; + void *tc; if ( - (real = signed_real_number_rule(p)) // signed_real_number + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' && - (_literal = _PyPegen_expect_token(p, 15)) // token='-' + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' && - (imag = imaginary_number_rule(p)) // imaginary_number + (t = star_targets_rule(p)) // star_targets + && + (_keyword_1 = _PyPegen_expect_token(p, 520)) // token='in' + && + (_cut_var = 1) + && + (ex = star_expressions_rule(p)) // star_expressions + && + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + (b = block_rule(p)) // block + && + (el = else_block_rule(p), 1) // else_block? ) { - D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); + D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6439,7 +5847,7 @@ complex_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( real , Sub , imag , EXTRA ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async for loops are" , _PyAST_AsyncFor ( t , ex , b , el , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6448,8 +5856,31 @@ complex_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '-' imaginary_number")); + D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ star_expressions &&':' TYPE_COMMENT? block else_block?")); + if (_cut_var) { + D(p->level--); + return NULL; + } + } + if (p->call_invalid_rules) { // invalid_for_target + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> for_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); + void *invalid_for_target_var; + if ( + (invalid_for_target_var = invalid_for_target_rule(p)) // invalid_for_target + ) + { + D(fprintf(stderr, "%*c+ for_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); + _res = invalid_for_target_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s for_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target")); } _res = NULL; done: @@ -6457,16 +5888,22 @@ complex_number_rule(Parser *p) return _res; } -// signed_number: NUMBER | '-' NUMBER -static expr_ty -signed_number_rule(Parser *p) +// with_stmt: +// | invalid_with_stmt_indent +// | 'with' '(' ','.with_item+ ','? ')' ':' block +// | 'with' ','.with_item+ ':' TYPE_COMMENT? block +// | ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block +// | ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block +// | invalid_with_stmt +static stmt_ty +with_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6477,40 +5914,56 @@ signed_number_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NUMBER + if (p->call_invalid_rules) { // invalid_with_stmt_indent if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); - expr_ty number_var; + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); + void *invalid_with_stmt_indent_var; if ( - (number_var = _PyPegen_number_token(p)) // NUMBER + (invalid_with_stmt_indent_var = invalid_with_stmt_indent_rule(p)) // invalid_with_stmt_indent ) { - D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); - _res = number_var; + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt_indent")); + _res = invalid_with_stmt_indent_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt_indent")); } - { // '-' NUMBER + { // 'with' '(' ','.with_item+ ','? ')' ':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); + Token * _keyword; Token * _literal; - expr_ty number; + Token * _literal_1; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_withitem_seq* a; + asdl_stmt_seq* b; if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' && - (number = _PyPegen_number_token(p)) // NUMBER + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (a = (asdl_withitem_seq*)_gather_50_rule(p)) // ','.with_item+ + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + && + (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6520,7 +5973,7 @@ signed_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( USub , number , EXTRA ); + _res = _PyAST_With ( a , b , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6529,69 +5982,136 @@ signed_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER")); + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' '(' ','.with_item+ ','? ')' ':' block")); } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// signed_real_number: real_number | '-' real_number -static expr_ty -signed_real_number_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + { // 'with' ','.with_item+ ':' TYPE_COMMENT? block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); + Token * _keyword; + Token * _literal; + asdl_withitem_seq* a; + asdl_stmt_seq* b; + void *tc; + if ( + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' + && + (a = (asdl_withitem_seq*)_gather_52_rule(p)) // ','.with_item+ + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + (b = block_rule(p)) // block + ) + { + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_With ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with' ','.with_item+ ':' TYPE_COMMENT? block")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // real_number + { // ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number")); - expr_ty real_number_var; + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); + Token * _keyword; + Token * _literal; + Token * _literal_1; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_withitem_seq* a; + Token * async_var; + asdl_stmt_seq* b; if ( - (real_number_var = real_number_rule(p)) // real_number + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + && + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' + && + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (a = (asdl_withitem_seq*)_gather_54_rule(p)) // ','.with_item+ + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + && + (_literal_2 = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "real_number")); - _res = real_number_var; + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NULL , EXTRA ) ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "real_number")); + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' '(' ','.with_item+ ','? ')' ':' block")); } - { // '-' real_number + { // ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number")); + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); + Token * _keyword; Token * _literal; - expr_ty real; + asdl_withitem_seq* a; + Token * async_var; + asdl_stmt_seq* b; + void *tc; if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' && - (real = real_number_rule(p)) // real_number + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' + && + (a = (asdl_withitem_seq*)_gather_56_rule(p)) // ','.with_item+ + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + && + (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number")); + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6601,7 +6121,7 @@ signed_real_number_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( USub , real , EXTRA ); + _res = CHECK_VERSION ( stmt_ty , 5 , "Async with statements are" , _PyAST_AsyncWith ( a , b , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6610,8 +6130,27 @@ signed_real_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' real_number")); + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'with' ','.with_item+ ':' TYPE_COMMENT? block")); + } + if (p->call_invalid_rules) { // invalid_with_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> with_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt")); + void *invalid_with_stmt_var; + if ( + (invalid_with_stmt_var = invalid_with_stmt_rule(p)) // invalid_with_stmt + ) + { + D(fprintf(stderr, "%*c+ with_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_stmt")); + _res = invalid_with_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s with_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_stmt")); } _res = NULL; done: @@ -6619,30 +6158,41 @@ signed_real_number_rule(Parser *p) return _res; } -// real_number: NUMBER -static expr_ty -real_number_rule(Parser *p) +// with_item: +// | expression 'as' star_target &(',' | ')' | ':') +// | invalid_with_item +// | expression +static withitem_ty +with_item_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + withitem_ty _res = NULL; int _mark = p->mark; - { // NUMBER + { // expression 'as' star_target &(',' | ')' | ':') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); - expr_ty real; + D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); + Token * _keyword; + expr_ty e; + expr_ty t; if ( - (real = _PyPegen_number_token(p)) // NUMBER + (e = expression_rule(p)) // expression + && + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' + && + (t = star_target_rule(p)) // star_target + && + _PyPegen_lookahead(1, _tmp_58_rule, p) ) { - D(fprintf(stderr, "%*c+ real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); - _res = _PyPegen_ensure_real ( p , real ); + D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); + _res = _PyAST_withitem ( e , t , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6651,39 +6201,41 @@ real_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s real_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression 'as' star_target &(',' | ')' | ':')")); } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// imaginary_number: NUMBER -static expr_ty -imaginary_number_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + if (p->call_invalid_rules) { // invalid_with_item + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_with_item")); + void *invalid_with_item_var; + if ( + (invalid_with_item_var = invalid_with_item_rule(p)) // invalid_with_item + ) + { + D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_with_item")); + _res = invalid_with_item_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_with_item")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // NUMBER + { // expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); - expr_ty imag; + D(fprintf(stderr, "%*c> with_item[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression")); + expr_ty e; if ( - (imag = _PyPegen_number_token(p)) // NUMBER + (e = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ imaginary_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); - _res = _PyPegen_ensure_imaginary ( p , imag ); + D(fprintf(stderr, "%*c+ with_item[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression")); + _res = _PyAST_withitem ( e , NULL , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6692,8 +6244,8 @@ imaginary_number_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s imaginary_number[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + D(fprintf(stderr, "%*c%s with_item[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression")); } _res = NULL; done: @@ -6701,16 +6253,19 @@ imaginary_number_rule(Parser *p) return _res; } -// capture_pattern: pattern_capture_target -static pattern_ty -capture_pattern_rule(Parser *p) +// try_stmt: +// | invalid_try_stmt +// | 'try' &&':' block finally_block +// | 'try' &&':' block except_block+ else_block? finally_block? +static stmt_ty +try_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6721,18 +6276,46 @@ capture_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // pattern_capture_target + if (p->call_invalid_rules) { // invalid_try_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); - expr_ty target; + D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); + void *invalid_try_stmt_var; if ( - (target = pattern_capture_target_rule(p)) // pattern_capture_target + (invalid_try_stmt_var = invalid_try_stmt_rule(p)) // invalid_try_stmt ) { - D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); + D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_try_stmt")); + _res = invalid_try_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_try_stmt")); + } + { // 'try' &&':' block finally_block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* b; + asdl_stmt_seq* f; + if ( + (_keyword = _PyPegen_expect_token(p, 511)) // token='try' + && + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (b = block_rule(p)) // block + && + (f = finally_block_rule(p)) // finally_block + ) + { + D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block finally_block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6742,7 +6325,7 @@ capture_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA ); + _res = _PyAST_Try ( b , NULL , NULL , f , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6751,43 +6334,46 @@ capture_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern_capture_target")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// pattern_capture_target: !"_" NAME !('.' | '(' | '=') -static expr_ty -pattern_capture_target_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block finally_block")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // !"_" NAME !('.' | '(' | '=') + { // 'try' &&':' block except_block+ else_block? finally_block? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); - expr_ty name; + D(fprintf(stderr, "%*c> try_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* b; + void *el; + asdl_excepthandler_seq* ex; + void *f; if ( - _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_") + (_keyword = _PyPegen_expect_token(p, 511)) // token='try' && - (name = _PyPegen_name_token(p)) // NAME + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (b = block_rule(p)) // block + && + (ex = (asdl_excepthandler_seq*)_loop1_59_rule(p)) // except_block+ + && + (el = else_block_rule(p), 1) // else_block? && - _PyPegen_lookahead(0, _tmp_55_rule, p) + (f = finally_block_rule(p), 1) // finally_block? ) { - D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); - _res = _PyPegen_set_expr_context ( p , name , Store ); + D(fprintf(stderr, "%*c+ try_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Try ( b , ex , el , f , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6796,8 +6382,8 @@ pattern_capture_target_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s pattern_capture_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + D(fprintf(stderr, "%*c%s try_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'try' &&':' block except_block+ else_block? finally_block?")); } _res = NULL; done: @@ -6805,16 +6391,20 @@ pattern_capture_target_rule(Parser *p) return _res; } -// wildcard_pattern: "_" -static pattern_ty -wildcard_pattern_rule(Parser *p) +// except_block: +// | invalid_except_stmt_indent +// | 'except' expression ['as' NAME] ':' block +// | 'except' ':' block +// | invalid_except_stmt +static excepthandler_ty +except_block_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + excepthandler_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6825,18 +6415,49 @@ wildcard_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // "_" + if (p->call_invalid_rules) { // invalid_except_stmt_indent if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\"")); - expr_ty _keyword; + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); + void *invalid_except_stmt_indent_var; if ( - (_keyword = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' + (invalid_except_stmt_indent_var = invalid_except_stmt_indent_rule(p)) // invalid_except_stmt_indent ) { - D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\"")); + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt_indent")); + _res = invalid_except_stmt_indent_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt_indent")); + } + { // 'except' expression ['as' NAME] ':' block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* b; + expr_ty e; + void *t; + if ( + (_keyword = _PyPegen_expect_token(p, 523)) // token='except' + && + (e = expression_rule(p)) // expression + && + (t = _tmp_60_rule(p), 1) // ['as' NAME] + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = block_rule(p)) // block + ) + { + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' expression ['as' NAME] ':' block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6846,7 +6467,7 @@ wildcard_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchAs ( NULL , NULL , EXTRA ); + _res = _PyAST_ExceptHandler ( e , ( t ) ? ( ( expr_ty ) t ) -> v . Name . id : NULL , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6855,49 +6476,27 @@ wildcard_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\"")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// value_pattern: attr !('.' | '(' | '=') -static pattern_ty -value_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - pattern_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' expression ['as' NAME] ':' block")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // attr !('.' | '(' | '=') + { // 'except' ':' block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); - expr_ty attr; + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except' ':' block")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* b; if ( - (attr = attr_rule(p)) // attr + (_keyword = _PyPegen_expect_token(p, 523)) // token='except' + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - _PyPegen_lookahead(0, _tmp_56_rule, p) + (b = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except' ':' block")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -6907,7 +6506,7 @@ value_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchValue ( attr , EXTRA ); + _res = _PyAST_ExceptHandler ( NULL , NULL , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -6916,8 +6515,27 @@ value_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s value_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr !('.' | '(' | '=')")); + D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'except' ':' block")); + } + if (p->call_invalid_rules) { // invalid_except_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> except_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); + void *invalid_except_stmt_var; + if ( + (invalid_except_stmt_var = invalid_except_stmt_rule(p)) // invalid_except_stmt + ) + { + D(fprintf(stderr, "%*c+ except_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_except_stmt")); + _res = invalid_except_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s except_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_except_stmt")); } _res = NULL; done: @@ -6925,50 +6543,84 @@ value_pattern_rule(Parser *p) return _res; } -// Left-recursive -// attr: name_or_attr '.' NAME -static expr_ty attr_raw(Parser *); -static expr_ty -attr_rule(Parser *p) +// finally_block: invalid_finally_stmt | 'finally' &&':' block +static asdl_stmt_seq* +finally_block_rule(Parser *p) { D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, attr_type, &_res)) { + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; } + asdl_stmt_seq* _res = NULL; int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_1 = _PyPegen_update_memo(p, _mark, attr_type, _res); - if (tmpvar_1) { + if (p->call_invalid_rules) { // invalid_finally_stmt + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; + } + D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); + void *invalid_finally_stmt_var; + if ( + (invalid_finally_stmt_var = invalid_finally_stmt_rule(p)) // invalid_finally_stmt + ) + { + D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_finally_stmt")); + _res = invalid_finally_stmt_var; + goto done; } p->mark = _mark; - p->in_raw_rule++; - void *_raw = attr_raw(p); - p->in_raw_rule--; - if (p->error_indicator) + D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_finally_stmt")); + } + { // 'finally' &&':' block + if (p->error_indicator) { + D(p->level--); return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; + } + D(fprintf(stderr, "%*c> finally_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); + Token * _keyword; + Token * _literal; + asdl_stmt_seq* a; + if ( + (_keyword = _PyPegen_expect_token(p, 524)) // token='finally' + && + (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + && + (a = block_rule(p)) // block + ) + { + D(fprintf(stderr, "%*c+ finally_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally' &&':' block")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s finally_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'finally' &&':' block")); } - p->mark = _resmark; + _res = NULL; + done: D(p->level--); return _res; } -static expr_ty -attr_raw(Parser *p) + +// match_stmt: +// | "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT +// | invalid_match_stmt +static stmt_ty +match_stmt_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + stmt_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -6979,24 +6631,36 @@ attr_raw(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // name_or_attr '.' NAME + { // "match" subject_expr ':' NEWLINE INDENT case_block+ DEDENT if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME")); + D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); + expr_ty _keyword; Token * _literal; - expr_ty attr; - expr_ty value; + asdl_match_case_seq* cases; + Token * dedent_var; + Token * indent_var; + Token * newline_var; + expr_ty subject; if ( - (value = name_or_attr_rule(p)) // name_or_attr + (_keyword = _PyPegen_expect_soft_keyword(p, "match")) // soft_keyword='"match"' && - (_literal = _PyPegen_expect_token(p, 23)) // token='.' + (subject = subject_expr_rule(p)) // subject_expr && - (attr = _PyPegen_name_token(p)) // NAME + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + && + (cases = (asdl_match_case_seq*)_loop1_61_rule(p)) // case_block+ + && + (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' ) { - D(fprintf(stderr, "%*c+ attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME")); + D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7006,7 +6670,7 @@ attr_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA ); + _res = CHECK_VERSION ( stmt_ty , 10 , "Pattern matching is" , _PyAST_Match ( subject , cases , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7015,8 +6679,27 @@ attr_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s attr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '.' NAME")); + D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"match\" subject_expr ':' NEWLINE INDENT case_block+ DEDENT")); + } + if (p->call_invalid_rules) { // invalid_match_stmt + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> match_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt")); + void *invalid_match_stmt_var; + if ( + (invalid_match_stmt_var = invalid_match_stmt_rule(p)) // invalid_match_stmt + ) + { + D(fprintf(stderr, "%*c+ match_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_match_stmt")); + _res = invalid_match_stmt_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s match_stmt[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_match_stmt")); } _res = NULL; done: @@ -7024,10 +6707,9 @@ attr_raw(Parser *p) return _res; } -// Left-recursive -// name_or_attr: attr | NAME +// subject_expr: star_named_expression ',' star_named_expressions? | named_expression static expr_ty -name_or_attr_rule(Parser *p) +subject_expr_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -7036,43 +6718,72 @@ name_or_attr_rule(Parser *p) } expr_ty _res = NULL; int _mark = p->mark; - { // attr + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // star_named_expression ',' star_named_expressions? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); - expr_ty attr_var; + D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); + Token * _literal; + expr_ty value; + void *values; if ( - (attr_var = attr_rule(p)) // attr + (value = star_named_expression_rule(p)) // star_named_expression + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (values = star_named_expressions_rule(p), 1) // star_named_expressions? ) { - D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); - _res = attr_var; + D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , value , values ) ) , Load , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?")); } - { // NAME + { // named_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); - expr_ty name_var; + D(fprintf(stderr, "%*c> subject_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); + expr_ty named_expression_var; if ( - (name_var = _PyPegen_name_token(p)) // NAME + (named_expression_var = named_expression_rule(p)) // named_expression ) { - D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); - _res = name_var; + D(fprintf(stderr, "%*c+ subject_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); + _res = named_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); + D(fprintf(stderr, "%*c%s subject_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); } _res = NULL; done: @@ -7080,36 +6791,61 @@ name_or_attr_rule(Parser *p) return _res; } -// group_pattern: '(' pattern ')' -static pattern_ty -group_pattern_rule(Parser *p) +// case_block: invalid_case_block | "case" patterns guard? ':' block +static match_case_ty +case_block_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + match_case_ty _res = NULL; int _mark = p->mark; - { // '(' pattern ')' + if (p->call_invalid_rules) { // invalid_case_block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'")); + D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); + void *invalid_case_block_var; + if ( + (invalid_case_block_var = invalid_case_block_rule(p)) // invalid_case_block + ) + { + D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_case_block")); + _res = invalid_case_block_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_case_block")); + } + { // "case" patterns guard? ':' block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> case_block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block")); + expr_ty _keyword; Token * _literal; - Token * _literal_1; + asdl_stmt_seq* body; + void *guard; pattern_ty pattern; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (_keyword = _PyPegen_expect_soft_keyword(p, "case")) // soft_keyword='"case"' && - (pattern = pattern_rule(p)) // pattern + (pattern = patterns_rule(p)) // patterns && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (guard = guard_rule(p), 1) // guard? + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (body = block_rule(p)) // block ) { - D(fprintf(stderr, "%*c+ group_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'")); - _res = pattern; + D(fprintf(stderr, "%*c+ case_block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"case\" patterns guard? ':' block")); + _res = _PyAST_match_case ( pattern , guard , body , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7118,8 +6854,8 @@ group_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s group_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' pattern ')'")); + D(fprintf(stderr, "%*c%s case_block[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"case\" patterns guard? ':' block")); } _res = NULL; done: @@ -7127,93 +6863,33 @@ group_pattern_rule(Parser *p) return _res; } -// sequence_pattern: '[' maybe_sequence_pattern? ']' | '(' open_sequence_pattern? ')' -static pattern_ty -sequence_pattern_rule(Parser *p) +// guard: 'if' named_expression +static expr_ty +guard_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '[' maybe_sequence_pattern? ']' + { // 'if' named_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); - Token * _literal; - Token * _literal_1; - void *patterns; + D(fprintf(stderr, "%*c> guard[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'if' named_expression")); + Token * _keyword; + expr_ty guard; if ( - (_literal = _PyPegen_expect_token(p, 9)) // token='[' - && - (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + (guard = named_expression_rule(p)) // named_expression ) { - D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSequence ( patterns , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); - } - { // '(' open_sequence_pattern? ')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'")); - Token * _literal; - Token * _literal_1; - void *patterns; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (patterns = open_sequence_pattern_rule(p), 1) // open_sequence_pattern? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' - ) - { - D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchSequence ( patterns , EXTRA ); + D(fprintf(stderr, "%*c+ guard[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'if' named_expression")); + _res = guard; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7222,8 +6898,8 @@ sequence_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' open_sequence_pattern? ')'")); + D(fprintf(stderr, "%*c%s guard[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'if' named_expression")); } _res = NULL; done: @@ -7231,36 +6907,48 @@ sequence_pattern_rule(Parser *p) return _res; } -// open_sequence_pattern: maybe_star_pattern ',' maybe_sequence_pattern? -static asdl_seq* -open_sequence_pattern_rule(Parser *p) +// patterns: open_sequence_pattern | pattern +static pattern_ty +patterns_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq* _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - { // maybe_star_pattern ',' maybe_sequence_pattern? + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // open_sequence_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); - Token * _literal; - pattern_ty pattern; - void *patterns; + D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); + asdl_pattern_seq* patterns; if ( - (pattern = maybe_star_pattern_rule(p)) // maybe_star_pattern - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? + (patterns = (asdl_pattern_seq*)open_sequence_pattern_rule(p)) // open_sequence_pattern ) { - D(fprintf(stderr, "%*c+ open_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); - _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns ); + D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "open_sequence_pattern")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7269,53 +6957,27 @@ open_sequence_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s open_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// maybe_sequence_pattern: ','.maybe_star_pattern+ ','? -static asdl_seq* -maybe_sequence_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "open_sequence_pattern")); } - asdl_seq* _res = NULL; - int _mark = p->mark; - { // ','.maybe_star_pattern+ ','? + { // pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_seq * patterns; + D(fprintf(stderr, "%*c> patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); + pattern_ty pattern_var; if ( - (patterns = _gather_57_rule(p)) // ','.maybe_star_pattern+ - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (pattern_var = pattern_rule(p)) // pattern ) { - D(fprintf(stderr, "%*c+ maybe_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); - _res = patterns; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern")); + _res = pattern_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s maybe_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.maybe_star_pattern+ ','?")); + D(fprintf(stderr, "%*c%s patterns[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern")); } _res = NULL; done: @@ -7323,9 +6985,9 @@ maybe_sequence_pattern_rule(Parser *p) return _res; } -// maybe_star_pattern: star_pattern | pattern +// pattern: as_pattern | or_pattern static pattern_ty -maybe_star_pattern_rule(Parser *p) +pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -7334,43 +6996,43 @@ maybe_star_pattern_rule(Parser *p) } pattern_ty _res = NULL; int _mark = p->mark; - { // star_pattern + { // as_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern")); - pattern_ty star_pattern_var; + D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "as_pattern")); + pattern_ty as_pattern_var; if ( - (star_pattern_var = star_pattern_rule(p)) // star_pattern + (as_pattern_var = as_pattern_rule(p)) // as_pattern ) { - D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_pattern")); - _res = star_pattern_var; + D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "as_pattern")); + _res = as_pattern_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_pattern")); + D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "as_pattern")); } - { // pattern + { // or_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); - pattern_ty pattern_var; + D(fprintf(stderr, "%*c> pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern")); + pattern_ty or_pattern_var; if ( - (pattern_var = pattern_rule(p)) // pattern + (or_pattern_var = or_pattern_rule(p)) // or_pattern ) { - D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern")); - _res = pattern_var; + D(fprintf(stderr, "%*c+ pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern")); + _res = or_pattern_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern")); + D(fprintf(stderr, "%*c%s pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern")); } _res = NULL; done: @@ -7378,9 +7040,9 @@ maybe_star_pattern_rule(Parser *p) return _res; } -// star_pattern: '*' pattern_capture_target | '*' wildcard_pattern +// as_pattern: or_pattern 'as' pattern_capture_target | invalid_as_pattern static pattern_ty -star_pattern_rule(Parser *p) +as_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -7398,21 +7060,24 @@ star_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '*' pattern_capture_target + { // or_pattern 'as' pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); - Token * _literal; + D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); + Token * _keyword; + pattern_ty pattern; expr_ty target; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (pattern = or_pattern_rule(p)) // or_pattern + && + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); + D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "or_pattern 'as' pattern_capture_target")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7422,7 +7087,7 @@ star_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA ); + _res = _PyAST_MatchAs ( pattern , target -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7431,44 +7096,27 @@ star_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' pattern_capture_target")); + D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "or_pattern 'as' pattern_capture_target")); } - { // '*' wildcard_pattern + if (p->call_invalid_rules) { // invalid_as_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); - Token * _literal; - pattern_ty wildcard_pattern_var; + D(fprintf(stderr, "%*c> as_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern")); + void *invalid_as_pattern_var; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern + (invalid_as_pattern_var = invalid_as_pattern_rule(p)) // invalid_as_pattern ) { - D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchStar ( NULL , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ as_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_as_pattern")); + _res = invalid_as_pattern_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' wildcard_pattern")); + D(fprintf(stderr, "%*c%s as_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_as_pattern")); } _res = NULL; done: @@ -7476,13 +7124,9 @@ star_pattern_rule(Parser *p) return _res; } -// mapping_pattern: -// | '{' '}' -// | '{' double_star_pattern ','? '}' -// | '{' items_pattern ',' double_star_pattern ','? '}' -// | '{' items_pattern ','? '}' +// or_pattern: '|'.closed_pattern+ static pattern_ty -mapping_pattern_rule(Parser *p) +or_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -7500,21 +7144,18 @@ mapping_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' '}' + { // '|'.closed_pattern+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'")); - Token * _literal; - Token * _literal_1; + D(fprintf(stderr, "%*c> or_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); + asdl_pattern_seq* patterns; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + (patterns = (asdl_pattern_seq*)_gather_62_rule(p)) // '|'.closed_pattern+ ) { - D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'")); + D(fprintf(stderr, "%*c+ or_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'|'.closed_pattern+")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7524,7 +7165,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA ); + _res = asdl_seq_LEN ( patterns ) == 1 ? asdl_seq_GET ( patterns , 0 ) : _PyAST_MatchOr ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7533,31 +7174,232 @@ mapping_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'")); + D(fprintf(stderr, "%*c%s or_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|'.closed_pattern+")); } - { // '{' double_star_pattern ','? '}' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// closed_pattern: +// | literal_pattern +// | capture_pattern +// | wildcard_pattern +// | value_pattern +// | group_pattern +// | sequence_pattern +// | mapping_pattern +// | class_pattern +static pattern_ty +closed_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + { // literal_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); - Token * _literal; - Token * _literal_1; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - expr_ty rest; + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_pattern")); + pattern_ty literal_pattern_var; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (rest = double_star_pattern_rule(p)) // double_star_pattern - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (literal_pattern_var = literal_pattern_rule(p)) // literal_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_pattern")); + _res = literal_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_pattern")); + } + { // capture_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "capture_pattern")); + pattern_ty capture_pattern_var; + if ( + (capture_pattern_var = capture_pattern_rule(p)) // capture_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "capture_pattern")); + _res = capture_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "capture_pattern")); + } + { // wildcard_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); + pattern_ty wildcard_pattern_var; + if ( + (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "wildcard_pattern")); + _res = wildcard_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "wildcard_pattern")); + } + { // value_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "value_pattern")); + pattern_ty value_pattern_var; + if ( + (value_pattern_var = value_pattern_rule(p)) // value_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "value_pattern")); + _res = value_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "value_pattern")); + } + { // group_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group_pattern")); + pattern_ty group_pattern_var; + if ( + (group_pattern_var = group_pattern_rule(p)) // group_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group_pattern")); + _res = group_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group_pattern")); + } + { // sequence_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sequence_pattern")); + pattern_ty sequence_pattern_var; + if ( + (sequence_pattern_var = sequence_pattern_rule(p)) // sequence_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sequence_pattern")); + _res = sequence_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sequence_pattern")); + } + { // mapping_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "mapping_pattern")); + pattern_ty mapping_pattern_var; + if ( + (mapping_pattern_var = mapping_pattern_rule(p)) // mapping_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "mapping_pattern")); + _res = mapping_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "mapping_pattern")); + } + { // class_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> closed_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_pattern")); + pattern_ty class_pattern_var; + if ( + (class_pattern_var = class_pattern_rule(p)) // class_pattern + ) + { + D(fprintf(stderr, "%*c+ closed_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_pattern")); + _res = class_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s closed_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_pattern")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// literal_pattern: +// | signed_number !('+' | '-') +// | complex_number +// | strings +// | 'None' +// | 'True' +// | 'False' +static pattern_ty +literal_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // signed_number !('+' | '-') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); + expr_ty value; + if ( + (value = signed_number_rule(p)) // signed_number && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + _PyPegen_lookahead(0, _tmp_64_rule, p) ) { - D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7567,7 +7409,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA ); + _res = _PyAST_MatchValue ( value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7576,37 +7418,21 @@ mapping_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_star_pattern ','? '}'")); + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); } - { // '{' items_pattern ',' double_star_pattern ','? '}' + { // complex_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); - Token * _literal; - Token * _literal_1; - Token * _literal_2; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_seq* items; - expr_ty rest; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); + expr_ty value; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (items = items_pattern_rule(p)) // items_pattern - && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' - && - (rest = double_star_pattern_rule(p)) // double_star_pattern - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - && - (_literal_2 = _PyPegen_expect_token(p, 26)) // token='}' + (value = complex_number_rule(p)) // complex_number ) { - D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7616,7 +7442,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA ); + _res = _PyAST_MatchValue ( value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7625,31 +7451,21 @@ mapping_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); } - { // '{' items_pattern ','? '}' + { // strings if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); - Token * _literal; - Token * _literal_1; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_seq* items; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); + expr_ty value; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (items = items_pattern_rule(p)) // items_pattern - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + (value = strings_rule(p)) // strings ) { - D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7659,7 +7475,7 @@ mapping_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA ); + _res = _PyAST_MatchValue ( value , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7668,81 +7484,64 @@ mapping_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ','? '}'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// items_pattern: ','.key_value_pattern+ -static asdl_seq* -items_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings")); } - asdl_seq* _res = NULL; - int _mark = p->mark; - { // ','.key_value_pattern+ + { // 'None' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - asdl_seq * _gather_59_var; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + Token * _keyword; if ( - (_gather_59_var = _gather_59_rule(p)) // ','.key_value_pattern+ + (_keyword = _PyPegen_expect_token(p, 525)) // token='None' ) { - D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); - _res = _gather_59_var; + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSingleton ( Py_None , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s items_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// key_value_pattern: (literal_expr | attr) ':' pattern -static KeyPatternPair* -key_value_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } - KeyPatternPair* _res = NULL; - int _mark = p->mark; - { // (literal_expr | attr) ':' pattern + { // 'True' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); - Token * _literal; - void *key; - pattern_ty pattern; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + Token * _keyword; if ( - (key = _tmp_61_rule(p)) // literal_expr | attr - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (pattern = pattern_rule(p)) // pattern + (_keyword = _PyPegen_expect_token(p, 526)) // token='True' ) { - D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); - _res = _PyPegen_key_pattern_pair ( p , key , pattern ); + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSingleton ( Py_True , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7751,42 +7550,31 @@ key_value_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_expr | attr) ':' pattern")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// double_star_pattern: '**' pattern_capture_target -static expr_ty -double_star_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // '**' pattern_capture_target + { // 'False' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); - Token * _literal; - expr_ty target; + D(fprintf(stderr, "%*c> literal_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + Token * _keyword; if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (target = pattern_capture_target_rule(p)) // pattern_capture_target + (_keyword = _PyPegen_expect_token(p, 527)) // token='False' ) { - D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); - _res = target; + D(fprintf(stderr, "%*c+ literal_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSingleton ( Py_False , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7795,8 +7583,8 @@ double_star_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s double_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' pattern_capture_target")); + D(fprintf(stderr, "%*c%s literal_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } _res = NULL; done: @@ -7804,21 +7592,22 @@ double_star_pattern_rule(Parser *p) return _res; } -// class_pattern: -// | name_or_attr '(' ')' -// | name_or_attr '(' positional_patterns ','? ')' -// | name_or_attr '(' keyword_patterns ','? ')' -// | name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')' -// | invalid_class_pattern -static pattern_ty -class_pattern_rule(Parser *p) +// literal_expr: +// | signed_number !('+' | '-') +// | complex_number +// | strings +// | 'None' +// | 'True' +// | 'False' +static expr_ty +literal_expr_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - pattern_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -7829,24 +7618,77 @@ class_pattern_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // name_or_attr '(' ')' + { // signed_number !('+' | '-') + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); + expr_ty signed_number_var; + if ( + (signed_number_var = signed_number_rule(p)) // signed_number + && + _PyPegen_lookahead(0, _tmp_65_rule, p) + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_number !('+' | '-')")); + _res = signed_number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_number !('+' | '-')")); + } + { // complex_number + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "complex_number")); + expr_ty complex_number_var; + if ( + (complex_number_var = complex_number_rule(p)) // complex_number + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "complex_number")); + _res = complex_number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "complex_number")); + } + { // strings + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "strings")); + expr_ty strings_var; + if ( + (strings_var = strings_rule(p)) // strings + ) + { + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "strings")); + _res = strings_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "strings")); + } + { // 'None' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'")); - Token * _literal; - Token * _literal_1; - expr_ty cls; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + Token * _keyword; if ( - (cls = name_or_attr_rule(p)) // name_or_attr - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_keyword = _PyPegen_expect_token(p, 525)) // token='None' ) { - D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'")); + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7856,7 +7698,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7865,34 +7707,21 @@ class_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' ')'")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } - { // name_or_attr '(' positional_patterns ','? ')' + { // 'True' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); - Token * _literal; - Token * _literal_1; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - expr_ty cls; - asdl_pattern_seq* patterns; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + Token * _keyword; if ( - (cls = name_or_attr_rule(p)) // name_or_attr - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (patterns = positional_patterns_rule(p)) // positional_patterns - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_keyword = _PyPegen_expect_token(p, 526)) // token='True' ) { - D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7902,7 +7731,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA ); + _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7911,34 +7740,21 @@ class_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } - { // name_or_attr '(' keyword_patterns ','? ')' + { // 'False' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); - Token * _literal; - Token * _literal_1; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - expr_ty cls; - asdl_seq* keywords; + D(fprintf(stderr, "%*c> literal_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + Token * _keyword; if ( - (cls = name_or_attr_rule(p)) // name_or_attr - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (keywords = keyword_patterns_rule(p)) // keyword_patterns - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_keyword = _PyPegen_expect_token(p, 527)) // token='False' ) { - D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); + D(fprintf(stderr, "%*c+ literal_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -7948,7 +7764,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); + _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -7957,40 +7773,55 @@ class_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); + D(fprintf(stderr, "%*c%s literal_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } - { // name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// complex_number: +// | signed_real_number '+' imaginary_number +// | signed_real_number '-' imaginary_number +static expr_ty +complex_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // signed_real_number '+' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); Token * _literal; - Token * _literal_1; - Token * _literal_2; - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - expr_ty cls; - asdl_seq* keywords; - asdl_pattern_seq* patterns; + expr_ty imag; + expr_ty real; if ( - (cls = name_or_attr_rule(p)) // name_or_attr - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (patterns = positional_patterns_rule(p)) // positional_patterns - && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' - && - (keywords = keyword_patterns_rule(p)) // keyword_patterns + (real = signed_real_number_rule(p)) // signed_real_number && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (_literal = _PyPegen_expect_token(p, 14)) // token='+' && - (_literal_2 = _PyPegen_expect_token(p, 8)) // token=')' + (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '+' imaginary_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -8000,7 +7831,7 @@ class_pattern_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); + _res = _PyAST_BinOp ( real , Add , imag , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8009,58 +7840,37 @@ class_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); - } - if (p->call_invalid_rules) { // invalid_class_pattern - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern")); - void *invalid_class_pattern_var; - if ( - (invalid_class_pattern_var = invalid_class_pattern_rule(p)) // invalid_class_pattern - ) - { - D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern")); - _res = invalid_class_pattern_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_pattern")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// positional_patterns: ','.pattern+ -static asdl_pattern_seq* -positional_patterns_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '+' imaginary_number")); } - asdl_pattern_seq* _res = NULL; - int _mark = p->mark; - { // ','.pattern+ + { // signed_real_number '-' imaginary_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+")); - asdl_pattern_seq* args; + D(fprintf(stderr, "%*c> complex_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); + Token * _literal; + expr_ty imag; + expr_ty real; if ( - (args = (asdl_pattern_seq*)_gather_62_rule(p)) // ','.pattern+ + (real = signed_real_number_rule(p)) // signed_real_number + && + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + && + (imag = imaginary_number_rule(p)) // imaginary_number ) { - D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+")); - _res = args; + D(fprintf(stderr, "%*c+ complex_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "signed_real_number '-' imaginary_number")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( real , Sub , imag , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8069,8 +7879,8 @@ positional_patterns_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s positional_patterns[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.pattern+")); + D(fprintf(stderr, "%*c%s complex_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "signed_real_number '-' imaginary_number")); } _res = NULL; done: @@ -8078,72 +7888,70 @@ positional_patterns_rule(Parser *p) return _res; } -// keyword_patterns: ','.keyword_pattern+ -static asdl_seq* -keyword_patterns_rule(Parser *p) +// signed_number: NUMBER | '-' NUMBER +static expr_ty +signed_number_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // ','.keyword_pattern+ + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // NUMBER if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - asdl_seq * _gather_64_var; + D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty number_var; if ( - (_gather_64_var = _gather_64_rule(p)) // ','.keyword_pattern+ + (number_var = _PyPegen_number_token(p)) // NUMBER ) { - D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); - _res = _gather_64_var; + D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = number_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s keyword_patterns[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.keyword_pattern+")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// keyword_pattern: NAME '=' pattern -static KeyPatternPair* -keyword_pattern_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - KeyPatternPair* _res = NULL; - int _mark = p->mark; - { // NAME '=' pattern + D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + { // '-' NUMBER if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); + D(fprintf(stderr, "%*c> signed_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); Token * _literal; - expr_ty arg; - pattern_ty value; + expr_ty number; if ( - (arg = _PyPegen_name_token(p)) // NAME - && - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + (_literal = _PyPegen_expect_token(p, 15)) // token='-' && - (value = pattern_rule(p)) // pattern + (number = _PyPegen_number_token(p)) // NUMBER ) { - D(fprintf(stderr, "%*c+ keyword_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); - _res = _PyPegen_key_pattern_pair ( p , arg , value ); + D(fprintf(stderr, "%*c+ signed_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' NUMBER")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( USub , number , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8152,8 +7960,8 @@ keyword_pattern_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s keyword_pattern[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' pattern")); + D(fprintf(stderr, "%*c%s signed_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' NUMBER")); } _res = NULL; done: @@ -8161,16 +7969,16 @@ keyword_pattern_rule(Parser *p) return _res; } -// return_stmt: 'return' star_expressions? -static stmt_ty -return_stmt_rule(Parser *p) +// signed_real_number: real_number | '-' real_number +static expr_ty +signed_real_number_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8181,21 +7989,40 @@ return_stmt_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'return' star_expressions? + { // real_number if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> return_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?")); - Token * _keyword; - void *a; + D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "real_number")); + expr_ty real_number_var; if ( - (_keyword = _PyPegen_expect_token(p, 500)) // token='return' + (real_number_var = real_number_rule(p)) // real_number + ) + { + D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "real_number")); + _res = real_number_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "real_number")); + } + { // '-' real_number + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> signed_real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' real_number")); + Token * _literal; + expr_ty real; + if ( + (_literal = _PyPegen_expect_token(p, 15)) // token='-' && - (a = star_expressions_rule(p), 1) // star_expressions? + (real = real_number_rule(p)) // real_number ) { - D(fprintf(stderr, "%*c+ return_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'return' star_expressions?")); + D(fprintf(stderr, "%*c+ signed_real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' real_number")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -8205,7 +8032,7 @@ return_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Return ( a , EXTRA ); + _res = _PyAST_UnaryOp ( USub , real , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8214,8 +8041,8 @@ return_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s return_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'return' star_expressions?")); + D(fprintf(stderr, "%*c%s signed_real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' real_number")); } _res = NULL; done: @@ -8223,54 +8050,71 @@ return_stmt_rule(Parser *p) return _res; } -// raise_stmt: 'raise' expression ['from' expression] | 'raise' -static stmt_ty -raise_stmt_rule(Parser *p) +// real_number: NUMBER +static expr_ty +real_number_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'raise' expression ['from' expression] + { // NUMBER if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]")); - Token * _keyword; - expr_ty a; - void *b; + D(fprintf(stderr, "%*c> real_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty real; if ( - (_keyword = _PyPegen_expect_token(p, 501)) // token='raise' - && - (a = expression_rule(p)) // expression - && - (b = _tmp_66_rule(p), 1) // ['from' expression] + (real = _PyPegen_number_token(p)) // NUMBER ) { - D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise' expression ['from' expression]")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { + D(fprintf(stderr, "%*c+ real_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = _PyPegen_ensure_real ( p , real ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; D(p->level--); return NULL; } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Raise ( a , b , EXTRA ); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s real_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// imaginary_number: NUMBER +static expr_ty +imaginary_number_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // NUMBER + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> imaginary_number[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty imag; + if ( + (imag = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ imaginary_number[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = _PyPegen_ensure_imaginary ( p , imag ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8279,21 +8123,47 @@ raise_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise' expression ['from' expression]")); + D(fprintf(stderr, "%*c%s imaginary_number[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); } - { // 'raise' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// capture_pattern: pattern_capture_target +static pattern_ty +capture_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> raise_stmt[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'raise'")); - Token * _keyword; + D(fprintf(stderr, "%*c> capture_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); + expr_ty target; if ( - (_keyword = _PyPegen_expect_token(p, 501)) // token='raise' + (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ raise_stmt[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'raise'")); + D(fprintf(stderr, "%*c+ capture_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern_capture_target")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -8303,7 +8173,7 @@ raise_stmt_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Raise ( NULL , NULL , EXTRA ); + _res = _PyAST_MatchAs ( NULL , target -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8312,8 +8182,8 @@ raise_stmt_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s raise_stmt[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'raise'")); + D(fprintf(stderr, "%*c%s capture_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern_capture_target")); } _res = NULL; done: @@ -8321,33 +8191,34 @@ raise_stmt_rule(Parser *p) return _res; } -// function_def: decorators function_def_raw | function_def_raw -static stmt_ty -function_def_rule(Parser *p) +// pattern_capture_target: !"_" NAME !('.' | '(' | '=') +static expr_ty +pattern_capture_target_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // decorators function_def_raw + { // !"_" NAME !('.' | '(' | '=') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw")); - asdl_expr_seq* d; - stmt_ty f; + D(fprintf(stderr, "%*c> pattern_capture_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + expr_ty name; if ( - (d = decorators_rule(p)) // decorators + _PyPegen_lookahead_with_string(0, _PyPegen_expect_soft_keyword, p, "_") && - (f = function_def_raw_rule(p)) // function_def_raw + (name = _PyPegen_name_token(p)) // NAME + && + _PyPegen_lookahead(0, _tmp_66_rule, p) ) { - D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators function_def_raw")); - _res = _PyPegen_function_def_decorators ( p , d , f ); + D(fprintf(stderr, "%*c+ pattern_capture_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); + _res = _PyPegen_set_expr_context ( p , name , Store ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8356,47 +8227,25 @@ function_def_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators function_def_raw")); - } - { // function_def_raw - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> function_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "function_def_raw")); - stmt_ty function_def_raw_var; - if ( - (function_def_raw_var = function_def_raw_rule(p)) // function_def_raw - ) - { - D(fprintf(stderr, "%*c+ function_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "function_def_raw")); - _res = function_def_raw_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s function_def[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "function_def_raw")); + D(fprintf(stderr, "%*c%s pattern_capture_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!\"_\" NAME !('.' | '(' | '=')")); } _res = NULL; done: D(p->level--); return _res; -} - -// function_def_raw: -// | invalid_def_raw -// | 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block -// | ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block -static stmt_ty -function_def_raw_rule(Parser *p) +} + +// wildcard_pattern: "_" +static pattern_ty +wildcard_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -8407,61 +8256,18 @@ function_def_raw_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_def_raw - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); - void *invalid_def_raw_var; - if ( - (invalid_def_raw_var = invalid_def_raw_rule(p)) // invalid_def_raw - ) - { - D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_def_raw")); - _res = invalid_def_raw_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_def_raw")); - } - { // 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block + { // "_" if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); - Token * _keyword; - Token * _literal; - Token * _literal_1; - Token * _literal_2; - void *a; - asdl_stmt_seq* b; - expr_ty n; - void *params; - void *tc; + D(fprintf(stderr, "%*c> wildcard_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "\"_\"")); + expr_ty _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 526)) // token='def' - && - (n = _PyPegen_name_token(p)) // NAME - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (params = params_rule(p), 1) // params? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' - && - (a = _tmp_67_rule(p), 1) // ['->' expression] - && - (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (tc = func_type_comment_rule(p), 1) // func_type_comment? - && - (b = block_rule(p)) // block + (_keyword = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' ) { - D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); + D(fprintf(stderr, "%*c+ wildcard_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "\"_\"")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -8471,7 +8277,7 @@ function_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_FunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ); + _res = _PyAST_MatchAs ( NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8480,48 +8286,49 @@ function_def_raw_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); + D(fprintf(stderr, "%*c%s wildcard_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "\"_\"")); } - { // ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block + _res = NULL; + done: + D(p->level--); + return _res; +} + +// value_pattern: attr !('.' | '(' | '=') +static pattern_ty +value_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // attr !('.' | '(' | '=') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> function_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); - Token * _keyword; - Token * _literal; - Token * _literal_1; - Token * _literal_2; - void *a; - Token * async_var; - asdl_stmt_seq* b; - expr_ty n; - void *params; - void *tc; + D(fprintf(stderr, "%*c> value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); + expr_ty attr; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' - && - (_keyword = _PyPegen_expect_token(p, 526)) // token='def' - && - (n = _PyPegen_name_token(p)) // NAME - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (params = params_rule(p), 1) // params? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' - && - (a = _tmp_68_rule(p), 1) // ['->' expression] - && - (_literal_2 = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' - && - (tc = func_type_comment_rule(p), 1) // func_type_comment? + (attr = attr_rule(p)) // attr && - (b = block_rule(p)) // block + _PyPegen_lookahead(0, _tmp_67_rule, p) ) { - D(fprintf(stderr, "%*c+ function_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); + D(fprintf(stderr, "%*c+ value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr !('.' | '(' | '=')")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -8531,7 +8338,7 @@ function_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( stmt_ty , 5 , "Async functions are" , _PyAST_AsyncFunctionDef ( n -> v . Name . id , ( params ) ? params : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , NULL , a , NEW_TYPE_COMMENT ( p , tc ) , EXTRA ) ); + _res = _PyAST_MatchValue ( attr , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8540,8 +8347,8 @@ function_def_raw_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s function_def_raw[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'def' NAME '(' params? ')' ['->' expression] &&':' func_type_comment? block")); + D(fprintf(stderr, "%*c%s value_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr !('.' | '(' | '=')")); } _res = NULL; done: @@ -8549,38 +8356,88 @@ function_def_raw_rule(Parser *p) return _res; } -// func_type_comment: -// | NEWLINE TYPE_COMMENT &(NEWLINE INDENT) -// | invalid_double_type_comments -// | TYPE_COMMENT -static Token* -func_type_comment_rule(Parser *p) +// Left-recursive +// attr: name_or_attr '.' NAME +static expr_ty attr_raw(Parser *); +static expr_ty +attr_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, attr_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_1 = _PyPegen_update_memo(p, _mark, attr_type, _res); + if (tmpvar_1) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = attr_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; + } + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +attr_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - Token* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT) + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // name_or_attr '.' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); - Token * newline_var; - Token * t; + D(fprintf(stderr, "%*c> attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME")); + Token * _literal; + expr_ty attr; + expr_ty value; if ( - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + (value = name_or_attr_rule(p)) // name_or_attr && - (t = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT' + (_literal = _PyPegen_expect_token(p, 23)) // token='.' && - _PyPegen_lookahead(1, _tmp_69_rule, p) + (attr = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); - _res = t; + D(fprintf(stderr, "%*c+ attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '.' NAME")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Attribute ( value , attr -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8589,46 +8446,64 @@ func_type_comment_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); + D(fprintf(stderr, "%*c%s attr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '.' NAME")); } - if (p->call_invalid_rules) { // invalid_double_type_comments + _res = NULL; + done: + D(p->level--); + return _res; +} + +// Left-recursive +// name_or_attr: attr | NAME +static expr_ty +name_or_attr_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // attr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments")); - void *invalid_double_type_comments_var; + D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); + expr_ty attr_var; if ( - (invalid_double_type_comments_var = invalid_double_type_comments_rule(p)) // invalid_double_type_comments + (attr_var = attr_rule(p)) // attr ) { - D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments")); - _res = invalid_double_type_comments_var; + D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); + _res = attr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_double_type_comments")); + D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); } - { // TYPE_COMMENT + { // NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT")); - Token * type_comment_var; + D(fprintf(stderr, "%*c> name_or_attr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); + expr_ty name_var; if ( - (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT' + (name_var = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT")); - _res = type_comment_var; + D(fprintf(stderr, "%*c+ name_or_attr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + _res = name_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT")); + D(fprintf(stderr, "%*c%s name_or_attr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); } _res = NULL; done: @@ -8636,54 +8511,46 @@ func_type_comment_rule(Parser *p) return _res; } -// params: invalid_parameters | parameters -static arguments_ty -params_rule(Parser *p) +// group_pattern: '(' pattern ')' +static pattern_ty +group_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arguments_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - if (p->call_invalid_rules) { // invalid_parameters - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_parameters")); - void *invalid_parameters_var; - if ( - (invalid_parameters_var = invalid_parameters_rule(p)) // invalid_parameters - ) - { - D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_parameters")); - _res = invalid_parameters_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_parameters")); - } - { // parameters + { // '(' pattern ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "parameters")); - arguments_ty parameters_var; + D(fprintf(stderr, "%*c> group_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'")); + Token * _literal; + Token * _literal_1; + pattern_ty pattern; if ( - (parameters_var = parameters_rule(p)) // parameters + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (pattern = pattern_rule(p)) // pattern + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "parameters")); - _res = parameters_var; + D(fprintf(stderr, "%*c+ group_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' pattern ')'")); + _res = pattern; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s params[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "parameters")); + D(fprintf(stderr, "%*c%s group_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' pattern ')'")); } _res = NULL; done: @@ -8691,44 +8558,54 @@ params_rule(Parser *p) return _res; } -// parameters: -// | slash_no_default param_no_default* param_with_default* star_etc? -// | slash_with_default param_with_default* star_etc? -// | param_no_default+ param_with_default* star_etc? -// | param_with_default+ star_etc? -// | star_etc -static arguments_ty -parameters_rule(Parser *p) +// sequence_pattern: '[' maybe_sequence_pattern? ']' | '(' open_sequence_pattern? ')' +static pattern_ty +sequence_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arguments_ty _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - { // slash_no_default param_no_default* param_with_default* star_etc? + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '[' maybe_sequence_pattern? ']' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); - asdl_arg_seq* a; - asdl_arg_seq* b; - asdl_seq * c; - void *d; + D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); + Token * _literal; + Token * _literal_1; + void *patterns; if ( - (a = slash_no_default_rule(p)) // slash_no_default - && - (b = (asdl_arg_seq*)_loop0_70_rule(p)) // param_no_default* + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (c = _loop0_71_rule(p)) // param_with_default* + (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? && - (d = star_etc_rule(p), 1) // star_etc? + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) { - D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); - _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d ); + D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8737,28 +8614,37 @@ parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_no_default param_no_default* param_with_default* star_etc?")); + D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' maybe_sequence_pattern? ']'")); } - { // slash_with_default param_with_default* star_etc? + { // '(' open_sequence_pattern? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?")); - SlashWithDefault* a; - asdl_seq * b; - void *c; + D(fprintf(stderr, "%*c> sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'")); + Token * _literal; + Token * _literal_1; + void *patterns; if ( - (a = slash_with_default_rule(p)) // slash_with_default + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (b = _loop0_72_rule(p)) // param_with_default* + (patterns = open_sequence_pattern_rule(p), 1) // open_sequence_pattern? && - (c = star_etc_rule(p), 1) // star_etc? + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slash_with_default param_with_default* star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ); + D(fprintf(stderr, "%*c+ sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' open_sequence_pattern? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchSequence ( patterns , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8767,28 +8653,45 @@ parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slash_with_default param_with_default* star_etc?")); + D(fprintf(stderr, "%*c%s sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' open_sequence_pattern? ')'")); } - { // param_no_default+ param_with_default* star_etc? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// open_sequence_pattern: maybe_star_pattern ',' maybe_sequence_pattern? +static asdl_seq* +open_sequence_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq* _res = NULL; + int _mark = p->mark; + { // maybe_star_pattern ',' maybe_sequence_pattern? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); - asdl_arg_seq* a; - asdl_seq * b; - void *c; + D(fprintf(stderr, "%*c> open_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); + Token * _literal; + pattern_ty pattern; + void *patterns; if ( - (a = (asdl_arg_seq*)_loop1_73_rule(p)) // param_no_default+ + (pattern = maybe_star_pattern_rule(p)) // maybe_star_pattern && - (b = _loop0_74_rule(p)) // param_with_default* + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (c = star_etc_rule(p), 1) // star_etc? + (patterns = maybe_sequence_pattern_rule(p), 1) // maybe_sequence_pattern? ) { - D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c ); + D(fprintf(stderr, "%*c+ open_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); + _res = _PyPegen_seq_insert_in_front ( p , pattern , patterns ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8797,25 +8700,43 @@ parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ param_with_default* star_etc?")); + D(fprintf(stderr, "%*c%s open_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern ',' maybe_sequence_pattern?")); } - { // param_with_default+ star_etc? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// maybe_sequence_pattern: ','.maybe_star_pattern+ ','? +static asdl_seq* +maybe_sequence_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq* _res = NULL; + int _mark = p->mark; + { // ','.maybe_star_pattern+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?")); - asdl_seq * a; - void *b; + D(fprintf(stderr, "%*c> maybe_sequence_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq * patterns; if ( - (a = _loop1_75_rule(p)) // param_with_default+ + (patterns = _gather_68_rule(p)) // ','.maybe_star_pattern+ && - (b = star_etc_rule(p), 1) // star_etc? + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_with_default+ star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b ); + D(fprintf(stderr, "%*c+ maybe_sequence_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.maybe_star_pattern+ ','?")); + _res = patterns; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8824,32 +8745,63 @@ parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default+ star_etc?")); + D(fprintf(stderr, "%*c%s maybe_sequence_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.maybe_star_pattern+ ','?")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// maybe_star_pattern: star_pattern | pattern +static pattern_ty +maybe_star_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + pattern_ty _res = NULL; + int _mark = p->mark; + { // star_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_pattern")); + pattern_ty star_pattern_var; + if ( + (star_pattern_var = star_pattern_rule(p)) // star_pattern + ) + { + D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_pattern")); + _res = star_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_pattern")); } - { // star_etc + { // pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_etc")); - StarEtc* a; + D(fprintf(stderr, "%*c> maybe_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern")); + pattern_ty pattern_var; if ( - (a = star_etc_rule(p)) // star_etc + (pattern_var = pattern_rule(p)) // pattern ) { - D(fprintf(stderr, "%*c+ parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_etc")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ maybe_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern")); + _res = pattern_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_etc")); + D(fprintf(stderr, "%*c%s maybe_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern")); } _res = NULL; done: @@ -8857,36 +8809,51 @@ parameters_rule(Parser *p) return _res; } -// slash_no_default: param_no_default+ '/' ',' | param_no_default+ '/' &')' -static asdl_arg_seq* -slash_no_default_rule(Parser *p) +// star_pattern: '*' pattern_capture_target | '*' wildcard_pattern +static pattern_ty +star_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_arg_seq* _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - { // param_no_default+ '/' ',' + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '*' pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','")); + D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); Token * _literal; - Token * _literal_1; - asdl_arg_seq* a; + expr_ty target; if ( - (a = (asdl_arg_seq*)_loop1_76_rule(p)) // param_no_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' ','")); - _res = a; + D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' pattern_capture_target")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchStar ( target -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8895,27 +8862,34 @@ slash_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' ','")); + D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' pattern_capture_target")); } - { // param_no_default+ '/' &')' + { // '*' wildcard_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'")); + D(fprintf(stderr, "%*c> star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); Token * _literal; - asdl_arg_seq* a; + pattern_ty wildcard_pattern_var; if ( - (a = (asdl_arg_seq*)_loop1_77_rule(p)) // param_no_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' + (wildcard_pattern_var = wildcard_pattern_rule(p)) // wildcard_pattern ) { - D(fprintf(stderr, "%*c+ slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default+ '/' &')'")); - _res = a; + D(fprintf(stderr, "%*c+ star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' wildcard_pattern")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchStar ( NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -8924,8 +8898,8 @@ slash_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default+ '/' &')'")); + D(fprintf(stderr, "%*c%s star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' wildcard_pattern")); } _res = NULL; done: @@ -8933,73 +8907,55 @@ slash_no_default_rule(Parser *p) return _res; } -// slash_with_default: -// | param_no_default* param_with_default+ '/' ',' -// | param_no_default* param_with_default+ '/' &')' -static SlashWithDefault* -slash_with_default_rule(Parser *p) +// mapping_pattern: +// | '{' '}' +// | '{' double_star_pattern ','? '}' +// | '{' items_pattern ',' double_star_pattern ','? '}' +// | '{' items_pattern ','? '}' +static pattern_ty +mapping_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - SlashWithDefault* _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - { // param_no_default* param_with_default+ '/' ',' + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '{' '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' '}'")); Token * _literal; Token * _literal_1; - asdl_seq * a; - asdl_seq * b; if ( - (a = _loop0_78_rule(p)) // param_no_default* - && - (b = _loop1_79_rule(p)) // param_with_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); - _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' ','")); - } - { // param_no_default* param_with_default+ '/' &')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); - Token * _literal; - asdl_seq * a; - asdl_seq * b; - if ( - (a = _loop0_80_rule(p)) // param_no_default* - && - (b = _loop1_81_rule(p)) // param_with_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' - && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' - ) - { - D(fprintf(stderr, "%*c+ slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); - _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( NULL , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9008,52 +8964,41 @@ slash_with_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default* param_with_default+ '/' &')'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// star_etc: -// | '*' param_no_default param_maybe_default* kwds? -// | '*' ',' param_maybe_default+ kwds? -// | kwds -// | invalid_star_etc -static StarEtc* -star_etc_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' '}'")); } - StarEtc* _res = NULL; - int _mark = p->mark; - { // '*' param_no_default param_maybe_default* kwds? + { // '{' double_star_pattern ','? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); Token * _literal; - arg_ty a; - asdl_seq * b; - void *c; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty rest; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (a = param_no_default_rule(p)) // param_no_default + (rest = double_star_pattern_rule(p)) // double_star_pattern && - (b = _loop0_82_rule(p)) // param_maybe_default* + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? && - (c = kwds_rule(p), 1) // kwds? + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); - _res = _PyPegen_star_etc ( p , a , b , c ); + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_star_pattern ','? '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( NULL , NULL , rest -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9062,31 +9007,47 @@ star_etc_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' param_no_default param_maybe_default* kwds?")); + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_star_pattern ','? '}'")); } - { // '*' ',' param_maybe_default+ kwds? + { // '{' items_pattern ',' double_star_pattern ','? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); Token * _literal; Token * _literal_1; - asdl_seq * b; - void *c; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq* items; + expr_ty rest; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (items = items_pattern_rule(p)) // items_pattern && (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _loop1_83_rule(p)) // param_maybe_default+ + (rest = double_star_pattern_rule(p)) // double_star_pattern && - (c = kwds_rule(p), 1) // kwds? + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_2 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); - _res = _PyPegen_star_etc ( p , NULL , b , c ); + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , rest -> v . Name . id , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9095,22 +9056,41 @@ star_etc_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' param_maybe_default+ kwds?")); + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ',' double_star_pattern ','? '}'")); } - { // kwds + { // '{' items_pattern ','? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwds")); - arg_ty a; + D(fprintf(stderr, "%*c> mapping_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); + Token * _literal; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq* items; if ( - (a = kwds_rule(p)) // kwds + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (items = items_pattern_rule(p)) // items_pattern + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwds")); - _res = _PyPegen_star_etc ( p , NULL , NULL , a ); + D(fprintf(stderr, "%*c+ mapping_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' items_pattern ','? '}'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchMapping ( CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , items ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , items ) ) , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9119,27 +9099,8 @@ star_etc_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwds")); - } - if (p->call_invalid_rules) { // invalid_star_etc - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_star_etc")); - void *invalid_star_etc_var; - if ( - (invalid_star_etc_var = invalid_star_etc_rule(p)) // invalid_star_etc - ) - { - D(fprintf(stderr, "%*c+ star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_star_etc")); - _res = invalid_star_etc_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_star_etc")); + D(fprintf(stderr, "%*c%s mapping_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' items_pattern ','? '}'")); } _res = NULL; done: @@ -9147,43 +9108,35 @@ star_etc_rule(Parser *p) return _res; } -// kwds: '**' param_no_default -static arg_ty -kwds_rule(Parser *p) +// items_pattern: ','.key_value_pattern+ +static asdl_seq* +items_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arg_ty _res = NULL; + asdl_seq* _res = NULL; int _mark = p->mark; - { // '**' param_no_default + { // ','.key_value_pattern+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' param_no_default")); - Token * _literal; - arg_ty a; + D(fprintf(stderr, "%*c> items_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); + asdl_seq * _gather_70_var; if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (a = param_no_default_rule(p)) // param_no_default + (_gather_70_var = _gather_70_rule(p)) // ','.key_value_pattern+ ) { - D(fprintf(stderr, "%*c+ kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' param_no_default")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ items_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.key_value_pattern+")); + _res = _gather_70_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwds[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' param_no_default")); + D(fprintf(stderr, "%*c%s items_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.key_value_pattern+")); } _res = NULL; done: @@ -9191,36 +9144,36 @@ kwds_rule(Parser *p) return _res; } -// param_no_default: param ',' TYPE_COMMENT? | param TYPE_COMMENT? &')' -static arg_ty -param_no_default_rule(Parser *p) +// key_value_pattern: (literal_expr | attr) ':' pattern +static KeyPatternPair* +key_value_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arg_ty _res = NULL; + KeyPatternPair* _res = NULL; int _mark = p->mark; - { // param ',' TYPE_COMMENT? + { // (literal_expr | attr) ':' pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c> key_value_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); Token * _literal; - arg_ty a; - void *tc; + void *key; + pattern_ty pattern; if ( - (a = param_rule(p)) // param + (key = _tmp_72_rule(p)) // literal_expr | attr && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (pattern = pattern_rule(p)) // pattern ) { - D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param ',' TYPE_COMMENT?")); - _res = _PyPegen_add_type_comment_to_arg ( p , a , tc ); + D(fprintf(stderr, "%*c+ key_value_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(literal_expr | attr) ':' pattern")); + _res = _PyPegen_key_pattern_pair ( p , key , pattern ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9229,27 +9182,42 @@ param_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c%s key_value_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(literal_expr | attr) ':' pattern")); } - { // param TYPE_COMMENT? &')' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// double_star_pattern: '**' pattern_capture_target +static expr_ty +double_star_pattern_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // '**' pattern_capture_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'")); - arg_ty a; - void *tc; + D(fprintf(stderr, "%*c> double_star_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); + Token * _literal; + expr_ty target; if ( - (a = param_rule(p)) // param - && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' + (target = pattern_capture_target_rule(p)) // pattern_capture_target ) { - D(fprintf(stderr, "%*c+ param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param TYPE_COMMENT? &')'")); - _res = _PyPegen_add_type_comment_to_arg ( p , a , tc ); + D(fprintf(stderr, "%*c+ double_star_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' pattern_capture_target")); + _res = target; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9258,8 +9226,8 @@ param_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param TYPE_COMMENT? &')'")); + D(fprintf(stderr, "%*c%s double_star_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' pattern_capture_target")); } _res = NULL; done: @@ -9267,39 +9235,59 @@ param_no_default_rule(Parser *p) return _res; } -// param_with_default: param default ',' TYPE_COMMENT? | param default TYPE_COMMENT? &')' -static NameDefaultPair* -param_with_default_rule(Parser *p) +// class_pattern: +// | name_or_attr '(' ')' +// | name_or_attr '(' positional_patterns ','? ')' +// | name_or_attr '(' keyword_patterns ','? ')' +// | name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')' +// | invalid_class_pattern +static pattern_ty +class_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - NameDefaultPair* _res = NULL; + pattern_ty _res = NULL; int _mark = p->mark; - { // param default ',' TYPE_COMMENT? + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // name_or_attr '(' ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'")); Token * _literal; - arg_ty a; - expr_ty c; - void *tc; + Token * _literal_1; + expr_ty cls; if ( - (a = param_rule(p)) // param - && - (c = default_rule(p)) // default + (cls = name_or_attr_rule(p)) // name_or_attr && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default ',' TYPE_COMMENT?")); - _res = _PyPegen_name_default_pair ( p , a , c , tc ); + D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchClass ( cls , NULL , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9308,30 +9296,44 @@ param_with_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' ')'")); } - { // param default TYPE_COMMENT? &')' + { // name_or_attr '(' positional_patterns ','? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'")); - arg_ty a; - expr_ty c; - void *tc; + D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); + Token * _literal; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty cls; + asdl_pattern_seq* patterns; if ( - (a = param_rule(p)) // param + (cls = name_or_attr_rule(p)) // name_or_attr && - (c = default_rule(p)) // default + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (patterns = positional_patterns_rule(p)) // positional_patterns && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default TYPE_COMMENT? &')'")); - _res = _PyPegen_name_default_pair ( p , a , c , tc ); + D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchClass ( cls , patterns , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9340,50 +9342,44 @@ param_with_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default TYPE_COMMENT? &')'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// param_maybe_default: -// | param default? ',' TYPE_COMMENT? -// | param default? TYPE_COMMENT? &')' -static NameDefaultPair* -param_maybe_default_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ','? ')'")); } - NameDefaultPair* _res = NULL; - int _mark = p->mark; - { // param default? ',' TYPE_COMMENT? + { // name_or_attr '(' keyword_patterns ','? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); Token * _literal; - arg_ty a; - void *c; - void *tc; + Token * _literal_1; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty cls; + asdl_seq* keywords; if ( - (a = param_rule(p)) // param + (cls = name_or_attr_rule(p)) // name_or_attr && - (c = default_rule(p), 1) // default? + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (keywords = keyword_patterns_rule(p)) // keyword_patterns && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? ',' TYPE_COMMENT?")); - _res = _PyPegen_name_default_pair ( p , a , c , tc ); + D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchClass ( cls , NULL , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9392,30 +9388,50 @@ param_maybe_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? ',' TYPE_COMMENT?")); + D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' keyword_patterns ','? ')'")); } - { // param default? TYPE_COMMENT? &')' + { // name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'")); - arg_ty a; - void *c; - void *tc; + D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); + Token * _literal; + Token * _literal_1; + Token * _literal_2; + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty cls; + asdl_seq* keywords; + asdl_pattern_seq* patterns; if ( - (a = param_rule(p)) // param + (cls = name_or_attr_rule(p)) // name_or_attr && - (c = default_rule(p), 1) // default? + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (tc = _PyPegen_expect_token(p, TYPE_COMMENT), 1) // TYPE_COMMENT? + (patterns = positional_patterns_rule(p)) // positional_patterns && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + && + (keywords = keyword_patterns_rule(p)) // keyword_patterns + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + && + (_literal_2 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "param default? TYPE_COMMENT? &')'")); - _res = _PyPegen_name_default_pair ( p , a , c , tc ); + D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_MatchClass ( cls , patterns , CHECK ( asdl_identifier_seq * , _PyPegen_map_names_to_ids ( p , CHECK ( asdl_expr_seq * , _PyPegen_get_pattern_keys ( p , keywords ) ) ) ) , CHECK ( asdl_pattern_seq * , _PyPegen_get_patterns ( p , keywords ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9424,8 +9440,27 @@ param_maybe_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param default? TYPE_COMMENT? &')'")); + D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "name_or_attr '(' positional_patterns ',' keyword_patterns ','? ')'")); + } + if (p->call_invalid_rules) { // invalid_class_pattern + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> class_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern")); + void *invalid_class_pattern_var; + if ( + (invalid_class_pattern_var = invalid_class_pattern_rule(p)) // invalid_class_pattern + ) + { + D(fprintf(stderr, "%*c+ class_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_pattern")); + _res = invalid_class_pattern_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s class_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_pattern")); } _res = NULL; done: @@ -9433,51 +9468,30 @@ param_maybe_default_rule(Parser *p) return _res; } -// param: NAME annotation? -static arg_ty -param_rule(Parser *p) +// positional_patterns: ','.pattern+ +static asdl_pattern_seq* +positional_patterns_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arg_ty _res = NULL; + asdl_pattern_seq* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NAME annotation? + { // ','.pattern+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME annotation?")); - expr_ty a; - void *b; + D(fprintf(stderr, "%*c> positional_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.pattern+")); + asdl_pattern_seq* args; if ( - (a = _PyPegen_name_token(p)) // NAME - && - (b = annotation_rule(p), 1) // annotation? + (args = (asdl_pattern_seq*)_gather_73_rule(p)) // ','.pattern+ ) { - D(fprintf(stderr, "%*c+ param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME annotation?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_arg ( a -> v . Name . id , b , NULL , EXTRA ); + D(fprintf(stderr, "%*c+ positional_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.pattern+")); + _res = args; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9486,8 +9500,8 @@ param_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s param[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME annotation?")); + D(fprintf(stderr, "%*c%s positional_patterns[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.pattern+")); } _res = NULL; done: @@ -9495,43 +9509,35 @@ param_rule(Parser *p) return _res; } -// annotation: ':' expression -static expr_ty -annotation_rule(Parser *p) +// keyword_patterns: ','.keyword_pattern+ +static asdl_seq* +keyword_patterns_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + asdl_seq* _res = NULL; int _mark = p->mark; - { // ':' expression + { // ','.keyword_pattern+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> annotation[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression")); - Token * _literal; - expr_ty a; + D(fprintf(stderr, "%*c> keyword_patterns[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); + asdl_seq * _gather_75_var; if ( - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (a = expression_rule(p)) // expression + (_gather_75_var = _gather_75_rule(p)) // ','.keyword_pattern+ ) { - D(fprintf(stderr, "%*c+ annotation[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ keyword_patterns[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.keyword_pattern+")); + _res = _gather_75_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s annotation[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression")); + D(fprintf(stderr, "%*c%s keyword_patterns[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.keyword_pattern+")); } _res = NULL; done: @@ -9539,33 +9545,36 @@ annotation_rule(Parser *p) return _res; } -// default: '=' expression -static expr_ty -default_rule(Parser *p) +// keyword_pattern: NAME '=' pattern +static KeyPatternPair* +keyword_pattern_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + KeyPatternPair* _res = NULL; int _mark = p->mark; - { // '=' expression + { // NAME '=' pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' expression")); + D(fprintf(stderr, "%*c> keyword_pattern[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); Token * _literal; - expr_ty a; + expr_ty arg; + pattern_ty value; if ( + (arg = _PyPegen_name_token(p)) // NAME + && (_literal = _PyPegen_expect_token(p, 22)) // token='=' && - (a = expression_rule(p)) // expression + (value = pattern_rule(p)) // pattern ) { - D(fprintf(stderr, "%*c+ default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' expression")); - _res = a; + D(fprintf(stderr, "%*c+ keyword_pattern[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' pattern")); + _res = _PyPegen_key_pattern_pair ( p , arg , value ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9574,8 +9583,8 @@ default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' expression")); + D(fprintf(stderr, "%*c%s keyword_pattern[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' pattern")); } _res = NULL; done: @@ -9583,30 +9592,55 @@ default_rule(Parser *p) return _res; } -// decorators: (('@' named_expression NEWLINE))+ -static asdl_expr_seq* -decorators_rule(Parser *p) +// expressions: expression ((',' expression))+ ','? | expression ',' | expression +static expr_ty +expressions_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_expr_seq* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // (('@' named_expression NEWLINE))+ + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // expression ((',' expression))+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> decorators[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); - asdl_expr_seq* a; + D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty a; + asdl_seq * b; if ( - (a = (asdl_expr_seq*)_loop1_84_rule(p)) // (('@' named_expression NEWLINE))+ + (a = expression_rule(p)) // expression + && + (b = _loop1_77_rule(p)) // ((',' expression))+ + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ decorators[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(('@' named_expression NEWLINE))+")); - _res = a; + D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9615,42 +9649,34 @@ decorators_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s decorators[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(('@' named_expression NEWLINE))+")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// class_def: decorators class_def_raw | class_def_raw -static stmt_ty -class_def_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ((',' expression))+ ','?")); } - stmt_ty _res = NULL; - int _mark = p->mark; - { // decorators class_def_raw + { // expression ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw")); - asdl_expr_seq* a; - stmt_ty b; + D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','")); + Token * _literal; + expr_ty a; if ( - (a = decorators_rule(p)) // decorators + (a = expression_rule(p)) // expression && - (b = class_def_raw_rule(p)) // class_def_raw + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "decorators class_def_raw")); - _res = _PyPegen_class_def_decorators ( p , a , b ); + D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9659,27 +9685,27 @@ class_def_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "decorators class_def_raw")); + D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ','")); } - { // class_def_raw + { // expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_def[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "class_def_raw")); - stmt_ty class_def_raw_var; + D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression")); + expr_ty expression_var; if ( - (class_def_raw_var = class_def_raw_rule(p)) // class_def_raw + (expression_var = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ class_def[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "class_def_raw")); - _res = class_def_raw_var; + D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression")); + _res = expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_def[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "class_def_raw")); + D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression")); } _res = NULL; done: @@ -9687,16 +9713,24 @@ class_def_rule(Parser *p) return _res; } -// class_def_raw: invalid_class_def_raw | 'class' NAME ['(' arguments? ')'] &&':' block -static stmt_ty -class_def_raw_rule(Parser *p) +// expression: +// | invalid_expression +// | disjunction 'if' disjunction 'else' expression +// | disjunction +// | lambdef +static expr_ty +expression_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - stmt_ty _res = NULL; + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, expression_type, &_res)) { + D(p->level--); + return _res; + } int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -9707,49 +9741,49 @@ class_def_raw_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_class_def_raw + if (p->call_invalid_rules) { // invalid_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); - void *invalid_class_def_raw_var; + D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression")); + void *invalid_expression_var; if ( - (invalid_class_def_raw_var = invalid_class_def_raw_rule(p)) // invalid_class_def_raw + (invalid_expression_var = invalid_expression_rule(p)) // invalid_expression ) { - D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_class_def_raw")); - _res = invalid_class_def_raw_var; + D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_expression")); + _res = invalid_expression_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_class_def_raw")); + D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_expression")); } - { // 'class' NAME ['(' arguments? ')'] &&':' block + { // disjunction 'if' disjunction 'else' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> class_def_raw[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); + D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); Token * _keyword; - Token * _literal; + Token * _keyword_1; expr_ty a; - void *b; - asdl_stmt_seq* c; + expr_ty b; + expr_ty c; if ( - (_keyword = _PyPegen_expect_token(p, 527)) // token='class' + (a = disjunction_rule(p)) // disjunction && - (a = _PyPegen_name_token(p)) // NAME + (_keyword = _PyPegen_expect_token(p, 510)) // token='if' && - (b = _tmp_85_rule(p), 1) // ['(' arguments? ')'] + (b = disjunction_rule(p)) // disjunction && - (_literal = _PyPegen_expect_forced_token(p, 11, ":")) // forced_token=':' + (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='else' && - (c = block_rule(p)) // block + (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ class_def_raw[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); + D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -9759,7 +9793,7 @@ class_def_raw_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_ClassDef ( a -> v . Name . id , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , c , NULL , EXTRA ); + _res = _PyAST_IfExp ( b , a , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9768,52 +9802,102 @@ class_def_raw_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s class_def_raw[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class' NAME ['(' arguments? ')'] &&':' block")); + D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); + } + { // disjunction + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction")); + expr_ty disjunction_var; + if ( + (disjunction_var = disjunction_rule(p)) // disjunction + ) + { + D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction")); + _res = disjunction_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction")); + } + { // lambdef + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef")); + expr_ty lambdef_var; + if ( + (lambdef_var = lambdef_rule(p)) // lambdef + ) + { + D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef")); + _res = lambdef_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, expression_type, _res); D(p->level--); return _res; } -// block: NEWLINE INDENT statements DEDENT | simple_stmts | invalid_block -static asdl_stmt_seq* -block_rule(Parser *p) +// yield_expr: 'yield' 'from' expression | 'yield' star_expressions? +static expr_ty +yield_expr_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_stmt_seq* _res = NULL; - if (_PyPegen_is_memoized(p, block_type, &_res)) { + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; D(p->level--); - return _res; + return NULL; } - int _mark = p->mark; - { // NEWLINE INDENT statements DEDENT + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // 'yield' 'from' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT")); - asdl_stmt_seq* a; - Token * dedent_var; - Token * indent_var; - Token * newline_var; + D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression")); + Token * _keyword; + Token * _keyword_1; + expr_ty a; if ( - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' - && - (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + (_keyword = _PyPegen_expect_token(p, 504)) // token='yield' && - (a = statements_rule(p)) // statements + (_keyword_1 = _PyPegen_expect_token(p, 514)) // token='from' && - (dedent_var = _PyPegen_expect_token(p, DEDENT)) // token='DEDENT' + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT statements DEDENT")); - _res = a; + D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_YieldFrom ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -9822,50 +9906,47 @@ block_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT statements DEDENT")); - } - { // simple_stmts - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmts")); - asdl_stmt_seq* simple_stmts_var; - if ( - (simple_stmts_var = simple_stmts_rule(p)) // simple_stmts - ) - { - D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmts")); - _res = simple_stmts_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmts")); + D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' 'from' expression")); } - if (p->call_invalid_rules) { // invalid_block + { // 'yield' star_expressions? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> block[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_block")); - void *invalid_block_var; + D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?")); + Token * _keyword; + void *a; if ( - (invalid_block_var = invalid_block_rule(p)) // invalid_block + (_keyword = _PyPegen_expect_token(p, 504)) // token='yield' + && + (a = star_expressions_rule(p), 1) // star_expressions? ) { - D(fprintf(stderr, "%*c+ block[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_block")); - _res = invalid_block_var; + D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Yield ( a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s block[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_block")); + D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, block_type, _res); D(p->level--); return _res; } @@ -9906,7 +9987,7 @@ star_expressions_rule(Parser *p) if ( (a = star_expression_rule(p)) // star_expression && - (b = _loop1_86_rule(p)) // ((',' star_expression))+ + (b = _loop1_78_rule(p)) // ((',' star_expression))+ && (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) @@ -10101,7 +10182,7 @@ star_named_expressions_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_87_rule(p)) // ','.star_named_expression+ + (a = (asdl_expr_seq*)_gather_79_rule(p)) // ','.star_named_expression+ && (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) @@ -10354,9 +10435,9 @@ named_expression_rule(Parser *p) return _res; } -// annotated_rhs: yield_expr | star_expressions +// disjunction: conjunction (('or' conjunction))+ | conjunction static expr_ty -annotated_rhs_rule(Parser *p) +disjunction_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -10364,54 +10445,257 @@ annotated_rhs_rule(Parser *p) return NULL; } expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, disjunction_type, &_res)) { + D(p->level--); + return _res; + } int _mark = p->mark; - { // yield_expr + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // conjunction (('or' conjunction))+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); - expr_ty yield_expr_var; + D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); + expr_ty a; + asdl_seq * b; if ( - (yield_expr_var = yield_expr_rule(p)) // yield_expr + (a = conjunction_rule(p)) // conjunction + && + (b = _loop1_81_rule(p)) // (('or' conjunction))+ ) { - D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); - _res = yield_expr_var; + D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); + D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction (('or' conjunction))+")); } - { // star_expressions + { // conjunction if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> annotated_rhs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); - expr_ty star_expressions_var; + D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction")); + expr_ty conjunction_var; if ( - (star_expressions_var = star_expressions_rule(p)) // star_expressions + (conjunction_var = conjunction_rule(p)) // conjunction + ) + { + D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction")); + _res = conjunction_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction")); + } + _res = NULL; + done: + _PyPegen_insert_memo(p, _mark, disjunction_type, _res); + D(p->level--); + return _res; +} + +// conjunction: inversion (('and' inversion))+ | inversion +static expr_ty +conjunction_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, conjunction_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // inversion (('and' inversion))+ + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); + expr_ty a; + asdl_seq * b; + if ( + (a = inversion_rule(p)) // inversion + && + (b = _loop1_82_rule(p)) // (('and' inversion))+ + ) + { + D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion (('and' inversion))+")); + } + { // inversion + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion")); + expr_ty inversion_var; + if ( + (inversion_var = inversion_rule(p)) // inversion + ) + { + D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion")); + _res = inversion_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion")); + } + _res = NULL; + done: + _PyPegen_insert_memo(p, _mark, conjunction_type, _res); + D(p->level--); + return _res; +} + +// inversion: 'not' inversion | comparison +static expr_ty +inversion_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, inversion_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // 'not' inversion + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion")); + Token * _keyword; + expr_ty a; + if ( + (_keyword = _PyPegen_expect_token(p, 528)) // token='not' + && + (a = inversion_rule(p)) // inversion + ) + { + D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( Not , a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' inversion")); + } + { // comparison + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison")); + expr_ty comparison_var; + if ( + (comparison_var = comparison_rule(p)) // comparison ) { - D(fprintf(stderr, "%*c+ annotated_rhs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); - _res = star_expressions_var; + D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "comparison")); + _res = comparison_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s annotated_rhs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "comparison")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, inversion_type, _res); D(p->level--); return _res; } -// expressions: expression ((',' expression))+ ','? | expression ',' | expression +// comparison: bitwise_or compare_op_bitwise_or_pair+ | bitwise_or static expr_ty -expressions_rule(Parser *p) +comparison_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -10429,61 +10713,21 @@ expressions_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // expression ((',' expression))+ ','? + { // bitwise_or compare_op_bitwise_or_pair+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings + D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); expr_ty a; asdl_seq * b; if ( - (a = expression_rule(p)) // expression - && - (b = _loop1_89_rule(p)) // ((',' expression))+ - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - ) - { - D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ((',' expression))+ ','?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Load , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ((',' expression))+ ','?")); - } - { // expression ',' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ','")); - Token * _literal; - expr_ty a; - if ( - (a = expression_rule(p)) // expression + (a = bitwise_or_rule(p)) // bitwise_or && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (b = _loop1_83_rule(p)) // compare_op_bitwise_or_pair+ ) { - D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ','")); + D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -10493,7 +10737,7 @@ expressions_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_singleton_seq ( p , a ) ) , Load , EXTRA ); + _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq * , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_exprs ( p , b ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10502,27 +10746,27 @@ expressions_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ','")); + D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); } - { // expression + { // bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression")); - expr_ty expression_var; + D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or")); + expr_ty bitwise_or_var; if ( - (expression_var = expression_rule(p)) // expression + (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression")); - _res = expression_var; + D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or")); + _res = bitwise_or_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expressions[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression")); + D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or")); } _res = NULL; done: @@ -10530,194 +10774,250 @@ expressions_rule(Parser *p) return _res; } -// expression: -// | invalid_expression -// | disjunction 'if' disjunction 'else' expression -// | disjunction -// | lambdef -static expr_ty -expression_rule(Parser *p) +// compare_op_bitwise_or_pair: +// | eq_bitwise_or +// | noteq_bitwise_or +// | lte_bitwise_or +// | lt_bitwise_or +// | gte_bitwise_or +// | gt_bitwise_or +// | notin_bitwise_or +// | in_bitwise_or +// | isnot_bitwise_or +// | is_bitwise_or +static CmpopExprPair* +compare_op_bitwise_or_pair_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, expression_type, &_res)) { - D(p->level--); - return _res; - } + CmpopExprPair* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + { // eq_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or")); + CmpopExprPair* eq_bitwise_or_var; + if ( + (eq_bitwise_or_var = eq_bitwise_or_rule(p)) // eq_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or")); + _res = eq_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "eq_bitwise_or")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_expression + { // noteq_bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_expression")); - void *invalid_expression_var; + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or")); + CmpopExprPair* noteq_bitwise_or_var; if ( - (invalid_expression_var = invalid_expression_rule(p)) // invalid_expression + (noteq_bitwise_or_var = noteq_bitwise_or_rule(p)) // noteq_bitwise_or ) { - D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_expression")); - _res = invalid_expression_var; + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or")); + _res = noteq_bitwise_or_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_expression")); + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "noteq_bitwise_or")); } - { // disjunction 'if' disjunction 'else' expression + { // lte_bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); - Token * _keyword; - Token * _keyword_1; - expr_ty a; - expr_ty b; - expr_ty c; + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or")); + CmpopExprPair* lte_bitwise_or_var; + if ( + (lte_bitwise_or_var = lte_bitwise_or_rule(p)) // lte_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or")); + _res = lte_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lte_bitwise_or")); + } + { // lt_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or")); + CmpopExprPair* lt_bitwise_or_var; + if ( + (lt_bitwise_or_var = lt_bitwise_or_rule(p)) // lt_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or")); + _res = lt_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lt_bitwise_or")); + } + { // gte_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or")); + CmpopExprPair* gte_bitwise_or_var; + if ( + (gte_bitwise_or_var = gte_bitwise_or_rule(p)) // gte_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or")); + _res = gte_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gte_bitwise_or")); + } + { // gt_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or")); + CmpopExprPair* gt_bitwise_or_var; + if ( + (gt_bitwise_or_var = gt_bitwise_or_rule(p)) // gt_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or")); + _res = gt_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gt_bitwise_or")); + } + { // notin_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or")); + CmpopExprPair* notin_bitwise_or_var; + if ( + (notin_bitwise_or_var = notin_bitwise_or_rule(p)) // notin_bitwise_or + ) + { + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or")); + _res = notin_bitwise_or_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "notin_bitwise_or")); + } + { // in_bitwise_or + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "in_bitwise_or")); + CmpopExprPair* in_bitwise_or_var; if ( - (a = disjunction_rule(p)) // disjunction - && - (_keyword = _PyPegen_expect_token(p, 510)) // token='if' - && - (b = disjunction_rule(p)) // disjunction - && - (_keyword_1 = _PyPegen_expect_token(p, 516)) // token='else' - && - (c = expression_rule(p)) // expression + (in_bitwise_or_var = in_bitwise_or_rule(p)) // in_bitwise_or ) { - D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_IfExp ( b , a , c , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "in_bitwise_or")); + _res = in_bitwise_or_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction 'if' disjunction 'else' expression")); + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "in_bitwise_or")); } - { // disjunction + { // isnot_bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "disjunction")); - expr_ty disjunction_var; + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or")); + CmpopExprPair* isnot_bitwise_or_var; if ( - (disjunction_var = disjunction_rule(p)) // disjunction + (isnot_bitwise_or_var = isnot_bitwise_or_rule(p)) // isnot_bitwise_or ) { - D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "disjunction")); - _res = disjunction_var; + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or")); + _res = isnot_bitwise_or_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "disjunction")); + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "isnot_bitwise_or")); } - { // lambdef + { // is_bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambdef")); - expr_ty lambdef_var; + D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "is_bitwise_or")); + CmpopExprPair* is_bitwise_or_var; if ( - (lambdef_var = lambdef_rule(p)) // lambdef + (is_bitwise_or_var = is_bitwise_or_rule(p)) // is_bitwise_or ) { - D(fprintf(stderr, "%*c+ expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambdef")); - _res = lambdef_var; + D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "is_bitwise_or")); + _res = is_bitwise_or_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambdef")); + D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "is_bitwise_or")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, expression_type, _res); D(p->level--); return _res; } -// lambdef: 'lambda' lambda_params? ':' expression -static expr_ty -lambdef_rule(Parser *p) +// eq_bitwise_or: '==' bitwise_or +static CmpopExprPair* +eq_bitwise_or_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + CmpopExprPair* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'lambda' lambda_params? ':' expression + { // '==' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression")); - Token * _keyword; + D(fprintf(stderr, "%*c> eq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or")); Token * _literal; - void *a; - expr_ty b; + expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 528)) // token='lambda' - && - (a = lambda_params_rule(p), 1) // lambda_params? - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 27)) // token='==' && - (b = expression_rule(p)) // expression + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA ); + D(fprintf(stderr, "%*c+ eq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , Eq , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10726,8 +11026,8 @@ lambdef_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambdef[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' expression")); + D(fprintf(stderr, "%*c%s eq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'==' bitwise_or")); } _res = NULL; done: @@ -10735,54 +11035,87 @@ lambdef_rule(Parser *p) return _res; } -// lambda_params: invalid_lambda_parameters | lambda_parameters -static arguments_ty -lambda_params_rule(Parser *p) +// noteq_bitwise_or: ('!=') bitwise_or +static CmpopExprPair* +noteq_bitwise_or_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arguments_ty _res = NULL; + CmpopExprPair* _res = NULL; int _mark = p->mark; - if (p->call_invalid_rules) { // invalid_lambda_parameters + { // ('!=') bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters")); - void *invalid_lambda_parameters_var; + D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); + void *_tmp_84_var; + expr_ty a; if ( - (invalid_lambda_parameters_var = invalid_lambda_parameters_rule(p)) // invalid_lambda_parameters + (_tmp_84_var = _tmp_84_rule(p)) // '!=' + && + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters")); - _res = invalid_lambda_parameters_var; + D(fprintf(stderr, "%*c+ noteq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_parameters")); + D(fprintf(stderr, "%*c%s noteq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('!=') bitwise_or")); } - { // lambda_parameters + _res = NULL; + done: + D(p->level--); + return _res; +} + +// lte_bitwise_or: '<=' bitwise_or +static CmpopExprPair* +lte_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // '<=' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters")); - arguments_ty lambda_parameters_var; + D(fprintf(stderr, "%*c> lte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or")); + Token * _literal; + expr_ty a; if ( - (lambda_parameters_var = lambda_parameters_rule(p)) // lambda_parameters + (_literal = _PyPegen_expect_token(p, 29)) // token='<=' + && + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_parameters")); - _res = lambda_parameters_var; + D(fprintf(stderr, "%*c+ lte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , LtE , a ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_parameters")); + D(fprintf(stderr, "%*c%s lte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<=' bitwise_or")); } _res = NULL; done: @@ -10790,44 +11123,33 @@ lambda_params_rule(Parser *p) return _res; } -// lambda_parameters: -// | lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc? -// | lambda_slash_with_default lambda_param_with_default* lambda_star_etc? -// | lambda_param_no_default+ lambda_param_with_default* lambda_star_etc? -// | lambda_param_with_default+ lambda_star_etc? -// | lambda_star_etc -static arguments_ty -lambda_parameters_rule(Parser *p) +// lt_bitwise_or: '<' bitwise_or +static CmpopExprPair* +lt_bitwise_or_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arguments_ty _res = NULL; + CmpopExprPair* _res = NULL; int _mark = p->mark; - { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc? + { // '<' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); - asdl_arg_seq* a; - asdl_arg_seq* b; - asdl_seq * c; - void *d; + D(fprintf(stderr, "%*c> lt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or")); + Token * _literal; + expr_ty a; if ( - (a = lambda_slash_no_default_rule(p)) // lambda_slash_no_default - && - (b = (asdl_arg_seq*)_loop0_90_rule(p)) // lambda_param_no_default* - && - (c = _loop0_91_rule(p)) // lambda_param_with_default* + (_literal = _PyPegen_expect_token(p, 20)) // token='<' && - (d = lambda_star_etc_rule(p), 1) // lambda_star_etc? + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); - _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d ); + D(fprintf(stderr, "%*c+ lt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , Lt , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10836,28 +11158,42 @@ lambda_parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); + D(fprintf(stderr, "%*c%s lt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' bitwise_or")); } - { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// gte_bitwise_or: '>=' bitwise_or +static CmpopExprPair* +gte_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // '>=' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); - SlashWithDefault* a; - asdl_seq * b; - void *c; + D(fprintf(stderr, "%*c> gte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or")); + Token * _literal; + expr_ty a; if ( - (a = lambda_slash_with_default_rule(p)) // lambda_slash_with_default - && - (b = _loop0_92_rule(p)) // lambda_param_with_default* + (_literal = _PyPegen_expect_token(p, 30)) // token='>=' && - (c = lambda_star_etc_rule(p), 1) // lambda_star_etc? + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ); + D(fprintf(stderr, "%*c+ gte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , GtE , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10866,28 +11202,42 @@ lambda_parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); + D(fprintf(stderr, "%*c%s gte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>=' bitwise_or")); } - { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// gt_bitwise_or: '>' bitwise_or +static CmpopExprPair* +gt_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // '>' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); - asdl_arg_seq* a; - asdl_seq * b; - void *c; + D(fprintf(stderr, "%*c> gt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or")); + Token * _literal; + expr_ty a; if ( - (a = (asdl_arg_seq*)_loop1_93_rule(p)) // lambda_param_no_default+ - && - (b = _loop0_94_rule(p)) // lambda_param_with_default* + (_literal = _PyPegen_expect_token(p, 21)) // token='>' && - (c = lambda_star_etc_rule(p), 1) // lambda_star_etc? + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c ); + D(fprintf(stderr, "%*c+ gt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , Gt , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10896,25 +11246,45 @@ lambda_parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); + D(fprintf(stderr, "%*c%s gt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>' bitwise_or")); } - { // lambda_param_with_default+ lambda_star_etc? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// notin_bitwise_or: 'not' 'in' bitwise_or +static CmpopExprPair* +notin_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // 'not' 'in' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); - asdl_seq * a; - void *b; + D(fprintf(stderr, "%*c> notin_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or")); + Token * _keyword; + Token * _keyword_1; + expr_ty a; if ( - (a = _loop1_95_rule(p)) // lambda_param_with_default+ + (_keyword = _PyPegen_expect_token(p, 528)) // token='not' && - (b = lambda_star_etc_rule(p), 1) // lambda_star_etc? + (_keyword_1 = _PyPegen_expect_token(p, 520)) // token='in' + && + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b ); + D(fprintf(stderr, "%*c+ notin_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10923,22 +11293,42 @@ lambda_parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); + D(fprintf(stderr, "%*c%s notin_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' 'in' bitwise_or")); } - { // lambda_star_etc + _res = NULL; + done: + D(p->level--); + return _res; +} + +// in_bitwise_or: 'in' bitwise_or +static CmpopExprPair* +in_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // 'in' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc")); - StarEtc* a; + D(fprintf(stderr, "%*c> in_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or")); + Token * _keyword; + expr_ty a; if ( - (a = lambda_star_etc_rule(p)) // lambda_star_etc + (_keyword = _PyPegen_expect_token(p, 520)) // token='in' + && + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_star_etc")); - _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a ); + D(fprintf(stderr, "%*c+ in_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , In , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10947,8 +11337,8 @@ lambda_parameters_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_star_etc")); + D(fprintf(stderr, "%*c%s in_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'in' bitwise_or")); } _res = NULL; done: @@ -10956,38 +11346,36 @@ lambda_parameters_rule(Parser *p) return _res; } -// lambda_slash_no_default: -// | lambda_param_no_default+ '/' ',' -// | lambda_param_no_default+ '/' &':' -static asdl_arg_seq* -lambda_slash_no_default_rule(Parser *p) +// isnot_bitwise_or: 'is' 'not' bitwise_or +static CmpopExprPair* +isnot_bitwise_or_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_arg_seq* _res = NULL; + CmpopExprPair* _res = NULL; int _mark = p->mark; - { // lambda_param_no_default+ '/' ',' + { // 'is' 'not' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','")); - Token * _literal; - Token * _literal_1; - asdl_arg_seq* a; + D(fprintf(stderr, "%*c> isnot_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or")); + Token * _keyword; + Token * _keyword_1; + expr_ty a; if ( - (a = (asdl_arg_seq*)_loop1_96_rule(p)) // lambda_param_no_default+ + (_keyword = _PyPegen_expect_token(p, 529)) // token='is' && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_keyword_1 = _PyPegen_expect_token(p, 528)) // token='not' && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','")); - _res = a; + D(fprintf(stderr, "%*c+ isnot_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -10996,27 +11384,42 @@ lambda_slash_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' ','")); + D(fprintf(stderr, "%*c%s isnot_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' 'not' bitwise_or")); } - { // lambda_param_no_default+ '/' &':' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// is_bitwise_or: 'is' bitwise_or +static CmpopExprPair* +is_bitwise_or_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + CmpopExprPair* _res = NULL; + int _mark = p->mark; + { // 'is' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'")); - Token * _literal; - asdl_arg_seq* a; + D(fprintf(stderr, "%*c> is_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or")); + Token * _keyword; + expr_ty a; if ( - (a = (asdl_arg_seq*)_loop1_97_rule(p)) // lambda_param_no_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_keyword = _PyPegen_expect_token(p, 529)) // token='is' && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'")); - _res = a; + D(fprintf(stderr, "%*c+ is_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or")); + _res = _PyPegen_cmpop_expr_pair ( p , Is , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11025,8 +11428,8 @@ lambda_slash_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' &':'")); + D(fprintf(stderr, "%*c%s is_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' bitwise_or")); } _res = NULL; done: @@ -11034,41 +11437,88 @@ lambda_slash_no_default_rule(Parser *p) return _res; } -// lambda_slash_with_default: -// | lambda_param_no_default* lambda_param_with_default+ '/' ',' -// | lambda_param_no_default* lambda_param_with_default+ '/' &':' -static SlashWithDefault* -lambda_slash_with_default_rule(Parser *p) +// Left-recursive +// bitwise_or: bitwise_or '|' bitwise_xor | bitwise_xor +static expr_ty bitwise_or_raw(Parser *); +static expr_ty +bitwise_or_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res); + if (tmpvar_2) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = bitwise_or_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; + } + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +bitwise_or_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - SlashWithDefault* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // lambda_param_no_default* lambda_param_with_default+ '/' ',' + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // bitwise_or '|' bitwise_xor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); + D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor")); Token * _literal; - Token * _literal_1; - asdl_seq * a; - asdl_seq * b; + expr_ty a; + expr_ty b; if ( - (a = _loop0_98_rule(p)) // lambda_param_no_default* - && - (b = _loop1_99_rule(p)) // lambda_param_with_default+ + (a = bitwise_or_rule(p)) // bitwise_or && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (_literal = _PyPegen_expect_token(p, 18)) // token='|' && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + (b = bitwise_xor_rule(p)) // bitwise_xor ) { - D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); - _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); + D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , BitOr , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11077,40 +11527,27 @@ lambda_slash_with_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); + D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' bitwise_xor")); } - { // lambda_param_no_default* lambda_param_with_default+ '/' &':' + { // bitwise_xor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); - Token * _literal; - asdl_seq * a; - asdl_seq * b; + D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor")); + expr_ty bitwise_xor_var; if ( - (a = _loop0_100_rule(p)) // lambda_param_no_default* - && - (b = _loop1_101_rule(p)) // lambda_param_with_default+ - && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' - && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' + (bitwise_xor_var = bitwise_xor_rule(p)) // bitwise_xor ) { - D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); - _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor")); + _res = bitwise_xor_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); + D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor")); } _res = NULL; done: @@ -11118,100 +11555,88 @@ lambda_slash_with_default_rule(Parser *p) return _res; } -// lambda_star_etc: -// | '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds? -// | '*' ',' lambda_param_maybe_default+ lambda_kwds? -// | lambda_kwds -// | invalid_lambda_star_etc -static StarEtc* -lambda_star_etc_rule(Parser *p) +// Left-recursive +// bitwise_xor: bitwise_xor '^' bitwise_and | bitwise_and +static expr_ty bitwise_xor_raw(Parser *); +static expr_ty +bitwise_xor_rule(Parser *p) { D(p->level++); - if (p->error_indicator) { + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) { D(p->level--); - return NULL; + return _res; } - StarEtc* _res = NULL; int _mark = p->mark; - { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds? - if (p->error_indicator) { + int _resmark = p->mark; + while (1) { + int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res); + if (tmpvar_3) { D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); - Token * _literal; - arg_ty a; - asdl_seq * b; - void *c; - if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (a = lambda_param_no_default_rule(p)) // lambda_param_no_default - && - (b = _loop0_102_rule(p)) // lambda_param_maybe_default* - && - (c = lambda_kwds_rule(p), 1) // lambda_kwds? - ) - { - D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); - _res = _PyPegen_star_etc ( p , a , b , c ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; + return _res; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); + p->in_raw_rule++; + void *_raw = bitwise_xor_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; } - { // '*' ',' lambda_param_maybe_default+ lambda_kwds? + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +bitwise_xor_raw(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // bitwise_xor '^' bitwise_and if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); + D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and")); Token * _literal; - Token * _literal_1; - asdl_seq * b; - void *c; + expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + (a = bitwise_xor_rule(p)) // bitwise_xor && - (b = _loop1_103_rule(p)) // lambda_param_maybe_default+ + (_literal = _PyPegen_expect_token(p, 32)) // token='^' && - (c = lambda_kwds_rule(p), 1) // lambda_kwds? + (b = bitwise_and_rule(p)) // bitwise_and ) { - D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); - _res = _PyPegen_star_etc ( p , NULL , b , c ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); - } - { // lambda_kwds - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds")); - arg_ty a; - if ( - (a = lambda_kwds_rule(p)) // lambda_kwds - ) - { - D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_kwds")); - _res = _PyPegen_star_etc ( p , NULL , NULL , a ); + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , BitXor , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11220,27 +11645,27 @@ lambda_star_etc_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_kwds")); + D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor '^' bitwise_and")); } - if (p->call_invalid_rules) { // invalid_lambda_star_etc + { // bitwise_and if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc")); - void *invalid_lambda_star_etc_var; + D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and")); + expr_ty bitwise_and_var; if ( - (invalid_lambda_star_etc_var = invalid_lambda_star_etc_rule(p)) // invalid_lambda_star_etc + (bitwise_and_var = bitwise_and_rule(p)) // bitwise_and ) { - D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc")); - _res = invalid_lambda_star_etc_var; + D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and")); + _res = bitwise_and_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_star_etc")); + D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and")); } _res = NULL; done: @@ -11248,77 +11673,88 @@ lambda_star_etc_rule(Parser *p) return _res; } -// lambda_kwds: '**' lambda_param_no_default -static arg_ty -lambda_kwds_rule(Parser *p) +// Left-recursive +// bitwise_and: bitwise_and '&' shift_expr | shift_expr +static expr_ty bitwise_and_raw(Parser *); +static expr_ty +bitwise_and_rule(Parser *p) { D(p->level++); - if (p->error_indicator) { + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) { D(p->level--); - return NULL; + return _res; } - arg_ty _res = NULL; int _mark = p->mark; - { // '**' lambda_param_no_default - if (p->error_indicator) { + int _resmark = p->mark; + while (1) { + int tmpvar_4 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res); + if (tmpvar_4) { D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default")); - Token * _literal; - arg_ty a; - if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (a = lambda_param_no_default_rule(p)) // lambda_param_no_default - ) - { - D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; + return _res; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param_no_default")); + p->in_raw_rule++; + void *_raw = bitwise_and_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; } - _res = NULL; - done: + p->mark = _resmark; D(p->level--); return _res; } - -// lambda_param_no_default: lambda_param ',' | lambda_param &':' -static arg_ty -lambda_param_no_default_rule(Parser *p) +static expr_ty +bitwise_and_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arg_ty _res = NULL; - int _mark = p->mark; - { // lambda_param ',' + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // bitwise_and '&' shift_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','")); + D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr")); Token * _literal; - arg_ty a; + expr_ty a; + expr_ty b; if ( - (a = lambda_param_rule(p)) // lambda_param + (a = bitwise_and_rule(p)) // bitwise_and && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 19)) // token='&' + && + (b = shift_expr_rule(p)) // shift_expr ) { - D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param ','")); - _res = a; + D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11327,34 +11763,27 @@ lambda_param_no_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param ','")); + D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' shift_expr")); } - { // lambda_param &':' + { // shift_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'")); - arg_ty a; + D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr")); + expr_ty shift_expr_var; if ( - (a = lambda_param_rule(p)) // lambda_param - && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' + (shift_expr_var = shift_expr_rule(p)) // shift_expr ) { - D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param &':'")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr")); + _res = shift_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param &':'")); + D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr")); } _res = NULL; done: @@ -11362,65 +11791,88 @@ lambda_param_no_default_rule(Parser *p) return _res; } -// lambda_param_with_default: lambda_param default ',' | lambda_param default &':' -static NameDefaultPair* -lambda_param_with_default_rule(Parser *p) +// Left-recursive +// shift_expr: shift_expr '<<' sum | shift_expr '>>' sum | sum +static expr_ty shift_expr_raw(Parser *); +static expr_ty +shift_expr_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_5 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res); + if (tmpvar_5) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = shift_expr_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; + } + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +shift_expr_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - NameDefaultPair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // lambda_param default ',' + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // shift_expr '<<' sum if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','")); + D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum")); Token * _literal; - arg_ty a; - expr_ty c; + expr_ty a; + expr_ty b; if ( - (a = lambda_param_rule(p)) // lambda_param + (a = shift_expr_rule(p)) // shift_expr && - (c = default_rule(p)) // default + (_literal = _PyPegen_expect_token(p, 33)) // token='<<' && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (b = sum_rule(p)) // sum ) { - D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default ','")); - _res = _PyPegen_name_default_pair ( p , a , c , NULL ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default ','")); - } - { // lambda_param default &':' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'")); - arg_ty a; - expr_ty c; - if ( - (a = lambda_param_rule(p)) // lambda_param - && - (c = default_rule(p)) // default - && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' - ) - { - D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'")); - _res = _PyPegen_name_default_pair ( p , a , c , NULL ); + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , LShift , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11429,45 +11881,37 @@ lambda_param_with_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default &':'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// lambda_param_maybe_default: lambda_param default? ',' | lambda_param default? &':' -static NameDefaultPair* -lambda_param_maybe_default_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '<<' sum")); } - NameDefaultPair* _res = NULL; - int _mark = p->mark; - { // lambda_param default? ',' + { // shift_expr '>>' sum if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','")); + D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum")); Token * _literal; - arg_ty a; - void *c; + expr_ty a; + expr_ty b; if ( - (a = lambda_param_rule(p)) // lambda_param + (a = shift_expr_rule(p)) // shift_expr && - (c = default_rule(p), 1) // default? + (_literal = _PyPegen_expect_token(p, 34)) // token='>>' && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (b = sum_rule(p)) // sum ) { - D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','")); - _res = _PyPegen_name_default_pair ( p , a , c , NULL ); + D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , RShift , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11476,54 +11920,78 @@ lambda_param_maybe_default_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? ','")); + D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '>>' sum")); } - { // lambda_param default? &':' + { // sum if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'")); - arg_ty a; - void *c; + D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum")); + expr_ty sum_var; if ( - (a = lambda_param_rule(p)) // lambda_param - && - (c = default_rule(p), 1) // default? - && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' + (sum_var = sum_rule(p)) // sum ) { - D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'")); - _res = _PyPegen_name_default_pair ( p , a , c , NULL ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum")); + _res = sum_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? &':'")); + D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// Left-recursive +// sum: sum '+' term | sum '-' term | term +static expr_ty sum_raw(Parser *); +static expr_ty +sum_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, sum_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_6 = _PyPegen_update_memo(p, _mark, sum_type, _res); + if (tmpvar_6) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = sum_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; } - _res = NULL; - done: + p->mark = _resmark; D(p->level--); return _res; } - -// lambda_param: NAME -static arg_ty -lambda_param_rule(Parser *p) +static expr_ty +sum_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - arg_ty _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -11534,18 +12002,24 @@ lambda_param_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NAME + { // sum '+' term if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); + D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term")); + Token * _literal; expr_ty a; + expr_ty b; if ( - (a = _PyPegen_name_token(p)) // NAME + (a = sum_rule(p)) // sum + && + (_literal = _PyPegen_expect_token(p, 14)) // token='+' + && + (b = term_rule(p)) // term ) { - D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -11555,7 +12029,7 @@ lambda_param_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA ); + _res = _PyAST_BinOp ( a , Add , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11564,54 +12038,27 @@ lambda_param_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lambda_param[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// disjunction: conjunction (('or' conjunction))+ | conjunction -static expr_ty -disjunction_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, disjunction_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '+' term")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // conjunction (('or' conjunction))+ + { // sum '-' term if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); + D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term")); + Token * _literal; expr_ty a; - asdl_seq * b; + expr_ty b; if ( - (a = conjunction_rule(p)) // conjunction + (a = sum_rule(p)) // sum + && + (_literal = _PyPegen_expect_token(p, 15)) // token='-' && - (b = _loop1_104_rule(p)) // (('or' conjunction))+ + (b = term_rule(p)) // term ) { - D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction (('or' conjunction))+")); + D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -11621,7 +12068,7 @@ disjunction_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BoolOp ( Or , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + _res = _PyAST_BinOp ( a , Sub , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11630,38 +12077,77 @@ disjunction_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction (('or' conjunction))+")); + D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '-' term")); } - { // conjunction + { // term if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> disjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "conjunction")); - expr_ty conjunction_var; + D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term")); + expr_ty term_var; if ( - (conjunction_var = conjunction_rule(p)) // conjunction + (term_var = term_rule(p)) // term ) { - D(fprintf(stderr, "%*c+ disjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "conjunction")); - _res = conjunction_var; + D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term")); + _res = term_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s disjunction[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "conjunction")); + D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, disjunction_type, _res); D(p->level--); return _res; } -// conjunction: inversion (('and' inversion))+ | inversion +// Left-recursive +// term: +// | term '*' factor +// | term '/' factor +// | term '//' factor +// | term '%' factor +// | term '@' factor +// | factor +static expr_ty term_raw(Parser *); static expr_ty -conjunction_rule(Parser *p) +term_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, term_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_7 = _PyPegen_update_memo(p, _mark, term_type, _res); + if (tmpvar_7) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = term_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; + } + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +term_raw(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -11669,10 +12155,6 @@ conjunction_rule(Parser *p) return NULL; } expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, conjunction_type, &_res)) { - D(p->level--); - return _res; - } int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -11683,21 +12165,24 @@ conjunction_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // inversion (('and' inversion))+ + { // term '*' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor")); + Token * _literal; expr_ty a; - asdl_seq * b; + expr_ty b; if ( - (a = inversion_rule(p)) // inversion + (a = term_rule(p)) // term && - (b = _loop1_105_rule(p)) // (('and' inversion))+ + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion (('and' inversion))+")); + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -11707,7 +12192,7 @@ conjunction_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BoolOp ( And , CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , EXTRA ); + _res = _PyAST_BinOp ( a , Mult , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11716,74 +12201,66 @@ conjunction_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion (('and' inversion))+")); + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '*' factor")); } - { // inversion + { // term '/' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> conjunction[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "inversion")); - expr_ty inversion_var; + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor")); + Token * _literal; + expr_ty a; + expr_ty b; if ( - (inversion_var = inversion_rule(p)) // inversion + (a = term_rule(p)) // term + && + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ conjunction[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "inversion")); - _res = inversion_var; + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , Div , b , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s conjunction[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "inversion")); - } - _res = NULL; - done: - _PyPegen_insert_memo(p, _mark, conjunction_type, _res); - D(p->level--); - return _res; -} - -// inversion: 'not' inversion | comparison -static expr_ty -inversion_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, inversion_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'not' inversion + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '/' factor")); + } + { // term '//' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' inversion")); - Token * _keyword; + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor")); + Token * _literal; expr_ty a; + expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 529)) // token='not' + (a = term_rule(p)) // term && - (a = inversion_rule(p)) // inversion + (_literal = _PyPegen_expect_token(p, 47)) // token='//' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' inversion")); + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -11793,7 +12270,7 @@ inversion_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( Not , a , EXTRA ); + _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11802,70 +12279,66 @@ inversion_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' inversion")); + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '//' factor")); } - { // comparison + { // term '%' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> inversion[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "comparison")); - expr_ty comparison_var; + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor")); + Token * _literal; + expr_ty a; + expr_ty b; if ( - (comparison_var = comparison_rule(p)) // comparison + (a = term_rule(p)) // term + && + (_literal = _PyPegen_expect_token(p, 24)) // token='%' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ inversion[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "comparison")); - _res = comparison_var; + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , Mod , b , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s inversion[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "comparison")); - } - _res = NULL; - done: - _PyPegen_insert_memo(p, _mark, inversion_type, _res); - D(p->level--); - return _res; -} - -// comparison: bitwise_or compare_op_bitwise_or_pair+ | bitwise_or -static expr_ty -comparison_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '%' factor")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // bitwise_or compare_op_bitwise_or_pair+ + { // term '@' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor")); + Token * _literal; expr_ty a; - asdl_seq * b; + expr_ty b; if ( - (a = bitwise_or_rule(p)) // bitwise_or + (a = term_rule(p)) // term && - (b = _loop1_106_rule(p)) // compare_op_bitwise_or_pair+ + (_literal = _PyPegen_expect_token(p, 49)) // token='@' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -11875,7 +12348,7 @@ comparison_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Compare ( a , CHECK ( asdl_int_seq * , _PyPegen_get_cmpops ( p , b ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_exprs ( p , b ) ) , EXTRA ); + _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -11884,27 +12357,27 @@ comparison_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or compare_op_bitwise_or_pair+")); + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '@' factor")); } - { // bitwise_or + { // factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> comparison[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or")); - expr_ty bitwise_or_var; + D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor")); + expr_ty factor_var; if ( - (bitwise_or_var = bitwise_or_rule(p)) // bitwise_or + (factor_var = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ comparison[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or")); - _res = bitwise_or_var; + D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "factor")); + _res = factor_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s comparison[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or")); + D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "factor")); } _res = NULL; done: @@ -11912,250 +12385,212 @@ comparison_rule(Parser *p) return _res; } -// compare_op_bitwise_or_pair: -// | eq_bitwise_or -// | noteq_bitwise_or -// | lte_bitwise_or -// | lt_bitwise_or -// | gte_bitwise_or -// | gt_bitwise_or -// | notin_bitwise_or -// | in_bitwise_or -// | isnot_bitwise_or -// | is_bitwise_or -static CmpopExprPair* -compare_op_bitwise_or_pair_rule(Parser *p) +// factor: '+' factor | '-' factor | '~' factor | power +static expr_ty +factor_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // eq_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or")); - CmpopExprPair* eq_bitwise_or_var; - if ( - (eq_bitwise_or_var = eq_bitwise_or_rule(p)) // eq_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "eq_bitwise_or")); - _res = eq_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "eq_bitwise_or")); - } - { // noteq_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or")); - CmpopExprPair* noteq_bitwise_or_var; - if ( - (noteq_bitwise_or_var = noteq_bitwise_or_rule(p)) // noteq_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "noteq_bitwise_or")); - _res = noteq_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "noteq_bitwise_or")); - } - { // lte_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or")); - CmpopExprPair* lte_bitwise_or_var; - if ( - (lte_bitwise_or_var = lte_bitwise_or_rule(p)) // lte_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lte_bitwise_or")); - _res = lte_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lte_bitwise_or")); - } - { // lt_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or")); - CmpopExprPair* lt_bitwise_or_var; - if ( - (lt_bitwise_or_var = lt_bitwise_or_rule(p)) // lt_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lt_bitwise_or")); - _res = lt_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lt_bitwise_or")); - } - { // gte_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or")); - CmpopExprPair* gte_bitwise_or_var; - if ( - (gte_bitwise_or_var = gte_bitwise_or_rule(p)) // gte_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gte_bitwise_or")); - _res = gte_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gte_bitwise_or")); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, factor_type, &_res)) { + D(p->level--); + return _res; } - { // gt_bitwise_or - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or")); - CmpopExprPair* gt_bitwise_or_var; - if ( - (gt_bitwise_or_var = gt_bitwise_or_rule(p)) // gt_bitwise_or - ) - { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "gt_bitwise_or")); - _res = gt_bitwise_or_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "gt_bitwise_or")); + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; } - { // notin_bitwise_or + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '+' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or")); - CmpopExprPair* notin_bitwise_or_var; + D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor")); + Token * _literal; + expr_ty a; if ( - (notin_bitwise_or_var = notin_bitwise_or_rule(p)) // notin_bitwise_or + (_literal = _PyPegen_expect_token(p, 14)) // token='+' + && + (a = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "notin_bitwise_or")); - _res = notin_bitwise_or_var; + D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( UAdd , a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "notin_bitwise_or")); + D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' factor")); } - { // in_bitwise_or + { // '-' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "in_bitwise_or")); - CmpopExprPair* in_bitwise_or_var; + D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor")); + Token * _literal; + expr_ty a; if ( - (in_bitwise_or_var = in_bitwise_or_rule(p)) // in_bitwise_or + (_literal = _PyPegen_expect_token(p, 15)) // token='-' + && + (a = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "in_bitwise_or")); - _res = in_bitwise_or_var; + D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( USub , a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "in_bitwise_or")); + D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' factor")); } - { // isnot_bitwise_or + { // '~' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or")); - CmpopExprPair* isnot_bitwise_or_var; + D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor")); + Token * _literal; + expr_ty a; if ( - (isnot_bitwise_or_var = isnot_bitwise_or_rule(p)) // isnot_bitwise_or + (_literal = _PyPegen_expect_token(p, 31)) // token='~' + && + (a = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "isnot_bitwise_or")); - _res = isnot_bitwise_or_var; + D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_UnaryOp ( Invert , a , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "isnot_bitwise_or")); + D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~' factor")); } - { // is_bitwise_or + { // power if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> compare_op_bitwise_or_pair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "is_bitwise_or")); - CmpopExprPair* is_bitwise_or_var; + D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power")); + expr_ty power_var; if ( - (is_bitwise_or_var = is_bitwise_or_rule(p)) // is_bitwise_or + (power_var = power_rule(p)) // power ) { - D(fprintf(stderr, "%*c+ compare_op_bitwise_or_pair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "is_bitwise_or")); - _res = is_bitwise_or_var; + D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "power")); + _res = power_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s compare_op_bitwise_or_pair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "is_bitwise_or")); + D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "power")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, factor_type, _res); D(p->level--); return _res; } -// eq_bitwise_or: '==' bitwise_or -static CmpopExprPair* -eq_bitwise_or_rule(Parser *p) +// power: await_primary '**' factor | await_primary +static expr_ty +power_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - CmpopExprPair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // '==' bitwise_or + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // await_primary '**' factor if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> eq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or")); + D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor")); Token * _literal; expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 27)) // token='==' + (a = await_primary_rule(p)) // await_primary && - (a = bitwise_or_rule(p)) // bitwise_or + (_literal = _PyPegen_expect_token(p, 35)) // token='**' + && + (b = factor_rule(p)) // factor ) { - D(fprintf(stderr, "%*c+ eq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'==' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , Eq , a ); + D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_BinOp ( a , Pow , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12164,8 +12599,27 @@ eq_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s eq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'==' bitwise_or")); + D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary '**' factor")); + } + { // await_primary + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary")); + expr_ty await_primary_var; + if ( + (await_primary_var = await_primary_rule(p)) // await_primary + ) + { + D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary")); + _res = await_primary_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary")); } _res = NULL; done: @@ -12173,33 +12627,55 @@ eq_bitwise_or_rule(Parser *p) return _res; } -// noteq_bitwise_or: ('!=') bitwise_or -static CmpopExprPair* -noteq_bitwise_or_rule(Parser *p) +// await_primary: AWAIT primary | primary +static expr_ty +await_primary_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - CmpopExprPair* _res = NULL; + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, await_primary_type, &_res)) { + D(p->level--); + return _res; + } int _mark = p->mark; - { // ('!=') bitwise_or + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // AWAIT primary if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> noteq_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); - void *_tmp_107_var; + D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "AWAIT primary")); expr_ty a; + Token * await_var; if ( - (_tmp_107_var = _tmp_107_rule(p)) // '!=' + (await_var = _PyPegen_expect_token(p, AWAIT)) // token='AWAIT' && - (a = bitwise_or_rule(p)) // bitwise_or + (a = primary_rule(p)) // primary ) { - D(fprintf(stderr, "%*c+ noteq_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "('!=') bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , NotEq , a ); + D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "AWAIT primary")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12208,86 +12684,122 @@ noteq_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s noteq_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('!=') bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// lte_bitwise_or: '<=' bitwise_or -static CmpopExprPair* -lte_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "AWAIT primary")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // '<=' bitwise_or + { // primary if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or")); - Token * _literal; - expr_ty a; + D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary")); + expr_ty primary_var; if ( - (_literal = _PyPegen_expect_token(p, 29)) // token='<=' - && - (a = bitwise_or_rule(p)) // bitwise_or + (primary_var = primary_rule(p)) // primary ) { - D(fprintf(stderr, "%*c+ lte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<=' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , LtE , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary")); + _res = primary_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<=' bitwise_or")); + D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, await_primary_type, _res); D(p->level--); return _res; } -// lt_bitwise_or: '<' bitwise_or -static CmpopExprPair* -lt_bitwise_or_rule(Parser *p) +// Left-recursive +// primary: +// | primary '.' NAME +// | primary genexp +// | primary '(' arguments? ')' +// | primary '[' slices ']' +// | atom +static expr_ty primary_raw(Parser *); +static expr_ty +primary_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, primary_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_8 = _PyPegen_update_memo(p, _mark, primary_type, _res); + if (tmpvar_8) { + D(p->level--); + return _res; + } + p->mark = _mark; + p->in_raw_rule++; + void *_raw = primary_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; + } + p->mark = _resmark; + D(p->level--); + return _res; +} +static expr_ty +primary_raw(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - CmpopExprPair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // '<' bitwise_or + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // primary '.' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> lt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or")); + D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME")); Token * _literal; expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 20)) // token='<' + (a = primary_rule(p)) // primary && - (a = bitwise_or_rule(p)) // bitwise_or + (_literal = _PyPegen_expect_token(p, 23)) // token='.' + && + (b = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ lt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'<' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , Lt , a ); + D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12296,42 +12808,34 @@ lt_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s lt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'<' bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// gte_bitwise_or: '>=' bitwise_or -static CmpopExprPair* -gte_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '.' NAME")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // '>=' bitwise_or + { // primary genexp if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> gte_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or")); - Token * _literal; + D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp")); expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 30)) // token='>=' + (a = primary_rule(p)) // primary && - (a = bitwise_or_rule(p)) // bitwise_or + (b = genexp_rule(p)) // genexp ) { - D(fprintf(stderr, "%*c+ gte_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>=' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , GtE , a ); + D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12340,42 +12844,40 @@ gte_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s gte_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>=' bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// gt_bitwise_or: '>' bitwise_or -static CmpopExprPair* -gt_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary genexp")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // '>' bitwise_or + { // primary '(' arguments? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> gt_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or")); + D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'")); Token * _literal; + Token * _literal_1; expr_ty a; + void *b; if ( - (_literal = _PyPegen_expect_token(p, 21)) // token='>' + (a = primary_rule(p)) // primary && - (a = bitwise_or_rule(p)) // bitwise_or + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (b = arguments_rule(p), 1) // arguments? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ gt_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'>' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , Gt , a ); + D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12384,45 +12886,40 @@ gt_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s gt_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'>' bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// notin_bitwise_or: 'not' 'in' bitwise_or -static CmpopExprPair* -notin_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '(' arguments? ')'")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // 'not' 'in' bitwise_or + { // primary '[' slices ']' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> notin_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or")); - Token * _keyword; - Token * _keyword_1; + D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'")); + Token * _literal; + Token * _literal_1; expr_ty a; + expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 529)) // token='not' + (a = primary_rule(p)) // primary && - (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='in' + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (a = bitwise_or_rule(p)) // bitwise_or + (b = slices_rule(p)) // slices + && + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) { - D(fprintf(stderr, "%*c+ notin_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'not' 'in' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , NotIn , a ); + D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Subscript ( a , b , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12431,52 +12928,27 @@ notin_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s notin_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'not' 'in' bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// in_bitwise_or: 'in' bitwise_or -static CmpopExprPair* -in_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '[' slices ']'")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // 'in' bitwise_or + { // atom if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> in_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or")); - Token * _keyword; - expr_ty a; + D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom")); + expr_ty atom_var; if ( - (_keyword = _PyPegen_expect_token(p, 518)) // token='in' - && - (a = bitwise_or_rule(p)) // bitwise_or + (atom_var = atom_rule(p)) // atom ) { - D(fprintf(stderr, "%*c+ in_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'in' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , In , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom")); + _res = atom_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s in_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'in' bitwise_or")); + D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom")); } _res = NULL; done: @@ -12484,36 +12956,41 @@ in_bitwise_or_rule(Parser *p) return _res; } -// isnot_bitwise_or: 'is' 'not' bitwise_or -static CmpopExprPair* -isnot_bitwise_or_rule(Parser *p) +// slices: slice !',' | ','.slice+ ','? +static expr_ty +slices_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - CmpopExprPair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // 'is' 'not' bitwise_or + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // slice !',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> isnot_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or")); - Token * _keyword; - Token * _keyword_1; + D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','")); expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 530)) // token='is' - && - (_keyword_1 = _PyPegen_expect_token(p, 529)) // token='not' + (a = slice_rule(p)) // slice && - (a = bitwise_or_rule(p)) // bitwise_or + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12) // token=',' ) { - D(fprintf(stderr, "%*c+ isnot_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' 'not' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , IsNot , a ); + D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice !','")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12522,42 +12999,35 @@ isnot_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s isnot_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' 'not' bitwise_or")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// is_bitwise_or: 'is' bitwise_or -static CmpopExprPair* -is_bitwise_or_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice !','")); } - CmpopExprPair* _res = NULL; - int _mark = p->mark; - { // 'is' bitwise_or + { // ','.slice+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> is_bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or")); - Token * _keyword; - expr_ty a; + D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 530)) // token='is' + (a = (asdl_expr_seq*)_gather_85_rule(p)) // ','.slice+ && - (a = bitwise_or_rule(p)) // bitwise_or + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ is_bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'is' bitwise_or")); - _res = _PyPegen_cmpop_expr_pair ( p , Is , a ); + D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Tuple ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12566,8 +13036,8 @@ is_bitwise_or_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s is_bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'is' bitwise_or")); + D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.slice+ ','?")); } _res = NULL; done: @@ -12575,43 +13045,9 @@ is_bitwise_or_rule(Parser *p) return _res; } -// Left-recursive -// bitwise_or: bitwise_or '|' bitwise_xor | bitwise_xor -static expr_ty bitwise_or_raw(Parser *); -static expr_ty -bitwise_or_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, bitwise_or_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_2 = _PyPegen_update_memo(p, _mark, bitwise_or_type, _res); - if (tmpvar_2) { - D(p->level--); - return _res; - } - p->mark = _mark; - p->in_raw_rule++; - void *_raw = bitwise_or_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; - } - p->mark = _resmark; - D(p->level--); - return _res; -} +// slice: expression? ':' expression? [':' expression?] | named_expression static expr_ty -bitwise_or_raw(Parser *p) +slice_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -12629,24 +13065,27 @@ bitwise_or_raw(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // bitwise_or '|' bitwise_xor + { // expression? ':' expression? [':' expression?] if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor")); + D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); Token * _literal; - expr_ty a; - expr_ty b; + void *a; + void *b; + void *c; if ( - (a = bitwise_or_rule(p)) // bitwise_or + (a = expression_rule(p), 1) // expression? && - (_literal = _PyPegen_expect_token(p, 18)) // token='|' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (b = bitwise_xor_rule(p)) // bitwise_xor + (b = expression_rule(p), 1) // expression? + && + (c = _tmp_87_rule(p), 1) // [':' expression?] ) { - D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_or '|' bitwise_xor")); + D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -12656,7 +13095,7 @@ bitwise_or_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , BitOr , b , EXTRA ); + _res = _PyAST_Slice ( a , b , c , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12665,27 +13104,32 @@ bitwise_or_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_or '|' bitwise_xor")); + D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression? ':' expression? [':' expression?]")); } - { // bitwise_xor + { // named_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_or[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor")); - expr_ty bitwise_xor_var; + D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); + expr_ty a; if ( - (bitwise_xor_var = bitwise_xor_rule(p)) // bitwise_xor + (a = named_expression_rule(p)) // named_expression ) { - D(fprintf(stderr, "%*c+ bitwise_or[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor")); - _res = bitwise_xor_var; + D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_or[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor")); + D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); } _res = NULL; done: @@ -12693,43 +13137,19 @@ bitwise_or_raw(Parser *p) return _res; } -// Left-recursive -// bitwise_xor: bitwise_xor '^' bitwise_and | bitwise_and -static expr_ty bitwise_xor_raw(Parser *); -static expr_ty -bitwise_xor_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, bitwise_xor_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_3 = _PyPegen_update_memo(p, _mark, bitwise_xor_type, _res); - if (tmpvar_3) { - D(p->level--); - return _res; - } - p->mark = _mark; - p->in_raw_rule++; - void *_raw = bitwise_xor_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; - } - p->mark = _resmark; - D(p->level--); - return _res; -} +// atom: +// | NAME +// | 'True' +// | 'False' +// | 'None' +// | &STRING strings +// | NUMBER +// | &'(' (tuple | group | genexp) +// | &'[' (list | listcomp) +// | &'{' (dict | set | dictcomp | setcomp) +// | '...' static expr_ty -bitwise_xor_raw(Parser *p) +atom_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -12747,24 +13167,37 @@ bitwise_xor_raw(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // bitwise_xor '^' bitwise_and + { // NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); + expr_ty name_var; + if ( + (name_var = _PyPegen_name_token(p)) // NAME + ) + { + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + _res = name_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); + } + { // 'True' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); + Token * _keyword; if ( - (a = bitwise_xor_rule(p)) // bitwise_xor - && - (_literal = _PyPegen_expect_token(p, 32)) // token='^' - && - (b = bitwise_and_rule(p)) // bitwise_and + (_keyword = _PyPegen_expect_token(p, 526)) // token='True' ) { - D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_xor '^' bitwise_and")); + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -12774,7 +13207,7 @@ bitwise_xor_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , BitXor , b , EXTRA ); + _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12783,106 +13216,54 @@ bitwise_xor_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_xor '^' bitwise_and")); + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); } - { // bitwise_and + { // 'False' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_xor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and")); - expr_ty bitwise_and_var; + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); + Token * _keyword; if ( - (bitwise_and_var = bitwise_and_rule(p)) // bitwise_and + (_keyword = _PyPegen_expect_token(p, 527)) // token='False' ) { - D(fprintf(stderr, "%*c+ bitwise_xor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and")); - _res = bitwise_and_var; + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_xor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// Left-recursive -// bitwise_and: bitwise_and '&' shift_expr | shift_expr -static expr_ty bitwise_and_raw(Parser *); -static expr_ty -bitwise_and_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, bitwise_and_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_4 = _PyPegen_update_memo(p, _mark, bitwise_and_type, _res); - if (tmpvar_4) { - D(p->level--); - return _res; - } - p->mark = _mark; - p->in_raw_rule++; - void *_raw = bitwise_and_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; - } - p->mark = _resmark; - D(p->level--); - return _res; -} -static expr_ty -bitwise_and_raw(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // bitwise_and '&' shift_expr + { // 'None' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); + Token * _keyword; if ( - (a = bitwise_and_rule(p)) // bitwise_and - && - (_literal = _PyPegen_expect_token(p, 19)) // token='&' - && - (b = shift_expr_rule(p)) // shift_expr + (_keyword = _PyPegen_expect_token(p, 525)) // token='None' ) { - D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "bitwise_and '&' shift_expr")); + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -12892,7 +13273,7 @@ bitwise_and_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , BitAnd , b , EXTRA ); + _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -12901,106 +13282,124 @@ bitwise_and_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "bitwise_and '&' shift_expr")); + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); } - { // shift_expr + { // &STRING strings if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> bitwise_and[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr")); - expr_ty shift_expr_var; + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&STRING strings")); + expr_ty strings_var; if ( - (shift_expr_var = shift_expr_rule(p)) // shift_expr + _PyPegen_lookahead(1, _PyPegen_string_token, p) + && + (strings_var = strings_rule(p)) // strings ) { - D(fprintf(stderr, "%*c+ bitwise_and[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr")); - _res = shift_expr_var; + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&STRING strings")); + _res = strings_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s bitwise_and[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// Left-recursive -// shift_expr: shift_expr '<<' sum | shift_expr '>>' sum | sum -static expr_ty shift_expr_raw(Parser *); -static expr_ty -shift_expr_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, shift_expr_type, &_res)) { - D(p->level--); - return _res; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&STRING strings")); } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_5 = _PyPegen_update_memo(p, _mark, shift_expr_type, _res); - if (tmpvar_5) { + { // NUMBER + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; + } + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); + expr_ty number_var; + if ( + (number_var = _PyPegen_number_token(p)) // NUMBER + ) + { + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); + _res = number_var; + goto done; } p->mark = _mark; - p->in_raw_rule++; - void *_raw = shift_expr_raw(p); - p->in_raw_rule--; - if (p->error_indicator) + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + } + { // &'(' (tuple | group | genexp) + if (p->error_indicator) { + D(p->level--); return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; + } + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); + void *_tmp_88_var; + if ( + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7) // token='(' + && + (_tmp_88_var = _tmp_88_rule(p)) // tuple | group | genexp + ) + { + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); + _res = _tmp_88_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'(' (tuple | group | genexp)")); } - p->mark = _resmark; - D(p->level--); - return _res; -} -static expr_ty -shift_expr_raw(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + { // &'[' (list | listcomp) + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); + void *_tmp_89_var; + if ( + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9) // token='[' + && + (_tmp_89_var = _tmp_89_rule(p)) // list | listcomp + ) + { + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); + _res = _tmp_89_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'[' (list | listcomp)")); } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + { // &'{' (dict | set | dictcomp | setcomp) + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); + void *_tmp_90_var; + if ( + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25) // token='{' + && + (_tmp_90_var = _tmp_90_rule(p)) // dict | set | dictcomp | setcomp + ) + { + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); + _res = _tmp_90_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // shift_expr '<<' sum + { // '...' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum")); + D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); Token * _literal; - expr_ty a; - expr_ty b; if ( - (a = shift_expr_rule(p)) // shift_expr - && - (_literal = _PyPegen_expect_token(p, 33)) // token='<<' - && - (b = sum_rule(p)) // sum + (_literal = _PyPegen_expect_token(p, 52)) // token='...' ) { - D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '<<' sum")); + D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -13010,7 +13409,7 @@ shift_expr_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , LShift , b , EXTRA ); + _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13019,37 +13418,45 @@ shift_expr_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '<<' sum")); + D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); } - { // shift_expr '>>' sum + _res = NULL; + done: + D(p->level--); + return _res; +} + +// group: '(' (yield_expr | named_expression) ')' | invalid_group +static expr_ty +group_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + { // '(' (yield_expr | named_expression) ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum")); + D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); Token * _literal; - expr_ty a; - expr_ty b; + Token * _literal_1; + void *a; if ( - (a = shift_expr_rule(p)) // shift_expr + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_literal = _PyPegen_expect_token(p, 34)) // token='>>' + (a = _tmp_91_rule(p)) // yield_expr | named_expression && - (b = sum_rule(p)) // sum + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "shift_expr '>>' sum")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , RShift , b , EXTRA ); + D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13058,27 +13465,27 @@ shift_expr_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "shift_expr '>>' sum")); + D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); } - { // sum + if (p->call_invalid_rules) { // invalid_group if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> shift_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum")); - expr_ty sum_var; + D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group")); + void *invalid_group_var; if ( - (sum_var = sum_rule(p)) // sum + (invalid_group_var = invalid_group_rule(p)) // invalid_group ) { - D(fprintf(stderr, "%*c+ shift_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum")); - _res = sum_var; + D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_group")); + _res = invalid_group_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s shift_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum")); + D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_group")); } _res = NULL; done: @@ -13086,43 +13493,9 @@ shift_expr_raw(Parser *p) return _res; } -// Left-recursive -// sum: sum '+' term | sum '-' term | term -static expr_ty sum_raw(Parser *); -static expr_ty -sum_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, sum_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_6 = _PyPegen_update_memo(p, _mark, sum_type, _res); - if (tmpvar_6) { - D(p->level--); - return _res; - } - p->mark = _mark; - p->in_raw_rule++; - void *_raw = sum_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; - } - p->mark = _resmark; - D(p->level--); - return _res; -} +// lambdef: 'lambda' lambda_params? ':' expression static expr_ty -sum_raw(Parser *p) +lambdef_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -13140,63 +13513,27 @@ sum_raw(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // sum '+' term + { // 'lambda' lambda_params? ':' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '+' term")); + D(fprintf(stderr, "%*c> lambdef[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression")); + Token * _keyword; Token * _literal; - expr_ty a; + void *a; expr_ty b; if ( - (a = sum_rule(p)) // sum - && - (_literal = _PyPegen_expect_token(p, 14)) // token='+' + (_keyword = _PyPegen_expect_token(p, 530)) // token='lambda' && - (b = term_rule(p)) // term - ) - { - D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '+' term")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Add , b , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '+' term")); - } - { // sum '-' term - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "sum '-' term")); - Token * _literal; - expr_ty a; - expr_ty b; - if ( - (a = sum_rule(p)) // sum + (a = lambda_params_rule(p), 1) // lambda_params? && - (_literal = _PyPegen_expect_token(p, 15)) // token='-' + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (b = term_rule(p)) // term + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "sum '-' term")); + D(fprintf(stderr, "%*c+ lambdef[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'lambda' lambda_params? ':' expression")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -13206,7 +13543,7 @@ sum_raw(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Sub , b , EXTRA ); + _res = _PyAST_Lambda ( ( a ) ? a : CHECK ( arguments_ty , _PyPegen_empty_arguments ( p ) ) , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13215,27 +13552,8 @@ sum_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "sum '-' term")); - } - { // term - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> sum[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term")); - expr_ty term_var; - if ( - (term_var = term_rule(p)) // term - ) - { - D(fprintf(stderr, "%*c+ sum[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term")); - _res = term_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s sum[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term")); + D(fprintf(stderr, "%*c%s lambdef[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'lambda' lambda_params? ':' expression")); } _res = NULL; done: @@ -13243,94 +13561,99 @@ sum_raw(Parser *p) return _res; } -// Left-recursive -// term: -// | term '*' factor -// | term '/' factor -// | term '//' factor -// | term '%' factor -// | term '@' factor -// | factor -static expr_ty term_raw(Parser *); -static expr_ty -term_rule(Parser *p) +// lambda_params: invalid_lambda_parameters | lambda_parameters +static arguments_ty +lambda_params_rule(Parser *p) { D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, term_type, &_res)) { + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; } + arguments_ty _res = NULL; int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_7 = _PyPegen_update_memo(p, _mark, term_type, _res); - if (tmpvar_7) { + if (p->call_invalid_rules) { // invalid_lambda_parameters + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters")); + void *invalid_lambda_parameters_var; + if ( + (invalid_lambda_parameters_var = invalid_lambda_parameters_rule(p)) // invalid_lambda_parameters + ) + { + D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_parameters")); + _res = invalid_lambda_parameters_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_parameters")); + } + { // lambda_parameters + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; + } + D(fprintf(stderr, "%*c> lambda_params[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_parameters")); + arguments_ty lambda_parameters_var; + if ( + (lambda_parameters_var = lambda_parameters_rule(p)) // lambda_parameters + ) + { + D(fprintf(stderr, "%*c+ lambda_params[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_parameters")); + _res = lambda_parameters_var; + goto done; } p->mark = _mark; - p->in_raw_rule++; - void *_raw = term_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; + D(fprintf(stderr, "%*c%s lambda_params[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_parameters")); } - p->mark = _resmark; + _res = NULL; + done: D(p->level--); return _res; } -static expr_ty -term_raw(Parser *p) + +// lambda_parameters: +// | lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc? +// | lambda_slash_with_default lambda_param_with_default* lambda_star_etc? +// | lambda_param_no_default+ lambda_param_with_default* lambda_star_etc? +// | lambda_param_with_default+ lambda_star_etc? +// | lambda_star_etc +static arguments_ty +lambda_parameters_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + arguments_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // term '*' factor + { // lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '*' factor")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); + asdl_arg_seq* a; + asdl_arg_seq* b; + asdl_seq * c; + void *d; if ( - (a = term_rule(p)) // term + (a = lambda_slash_no_default_rule(p)) // lambda_slash_no_default && - (_literal = _PyPegen_expect_token(p, 16)) // token='*' + (b = (asdl_arg_seq*)_loop0_92_rule(p)) // lambda_param_no_default* && - (b = factor_rule(p)) // factor + (c = _loop0_93_rule(p)) // lambda_param_with_default* + && + (d = lambda_star_etc_rule(p), 1) // lambda_star_etc? ) { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '*' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Mult , b , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); + _res = _PyPegen_make_arguments ( p , a , NULL , b , c , d ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13339,37 +13662,28 @@ term_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '*' factor")); + D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_no_default lambda_param_no_default* lambda_param_with_default* lambda_star_etc?")); } - { // term '/' factor + { // lambda_slash_with_default lambda_param_with_default* lambda_star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '/' factor")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); + SlashWithDefault* a; + asdl_seq * b; + void *c; if ( - (a = term_rule(p)) // term + (a = lambda_slash_with_default_rule(p)) // lambda_slash_with_default && - (_literal = _PyPegen_expect_token(p, 17)) // token='/' + (b = _loop0_94_rule(p)) // lambda_param_with_default* && - (b = factor_rule(p)) // factor + (c = lambda_star_etc_rule(p), 1) // lambda_star_etc? ) { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '/' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Div , b , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , a , NULL , b , c ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13378,37 +13692,28 @@ term_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '/' factor")); + D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_slash_with_default lambda_param_with_default* lambda_star_etc?")); } - { // term '//' factor + { // lambda_param_no_default+ lambda_param_with_default* lambda_star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '//' factor")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); + asdl_arg_seq* a; + asdl_seq * b; + void *c; if ( - (a = term_rule(p)) // term + (a = (asdl_arg_seq*)_loop1_95_rule(p)) // lambda_param_no_default+ && - (_literal = _PyPegen_expect_token(p, 47)) // token='//' + (b = _loop0_96_rule(p)) // lambda_param_with_default* && - (b = factor_rule(p)) // factor + (c = lambda_star_etc_rule(p), 1) // lambda_star_etc? ) { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '//' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , FloorDiv , b , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , a , b , c ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13417,37 +13722,25 @@ term_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '//' factor")); + D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ lambda_param_with_default* lambda_star_etc?")); } - { // term '%' factor + { // lambda_param_with_default+ lambda_star_etc? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '%' factor")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); + asdl_seq * a; + void *b; if ( - (a = term_rule(p)) // term - && - (_literal = _PyPegen_expect_token(p, 24)) // token='%' + (a = _loop1_97_rule(p)) // lambda_param_with_default+ && - (b = factor_rule(p)) // factor + (b = lambda_star_etc_rule(p), 1) // lambda_star_etc? ) { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '%' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Mod , b , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13456,37 +13749,22 @@ term_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '%' factor")); + D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default+ lambda_star_etc?")); } - { // term '@' factor + { // lambda_star_etc if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "term '@' factor")); - Token * _literal; - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_parameters[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_star_etc")); + StarEtc* a; if ( - (a = term_rule(p)) // term - && - (_literal = _PyPegen_expect_token(p, 49)) // token='@' - && - (b = factor_rule(p)) // factor + (a = lambda_star_etc_rule(p)) // lambda_star_etc ) { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "term '@' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( expr_ty , 5 , "The '@' operator is" , _PyAST_BinOp ( a , MatMult , b , EXTRA ) ); + D(fprintf(stderr, "%*c+ lambda_parameters[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_star_etc")); + _res = _PyPegen_make_arguments ( p , NULL , NULL , NULL , NULL , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13495,27 +13773,8 @@ term_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "term '@' factor")); - } - { // factor - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> term[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "factor")); - expr_ty factor_var; - if ( - (factor_var = factor_rule(p)) // factor - ) - { - D(fprintf(stderr, "%*c+ term[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "factor")); - _res = factor_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s term[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "factor")); + D(fprintf(stderr, "%*c%s lambda_parameters[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_star_etc")); } _res = NULL; done: @@ -13523,55 +13782,38 @@ term_raw(Parser *p) return _res; } -// factor: '+' factor | '-' factor | '~' factor | power -static expr_ty -factor_rule(Parser *p) +// lambda_slash_no_default: +// | lambda_param_no_default+ '/' ',' +// | lambda_param_no_default+ '/' &':' +static asdl_arg_seq* +lambda_slash_no_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, factor_type, &_res)) { - D(p->level--); - return _res; - } + asdl_arg_seq* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '+' factor + { // lambda_param_no_default+ '/' ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+' factor")); + D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','")); Token * _literal; - expr_ty a; + Token * _literal_1; + asdl_arg_seq* a; if ( - (_literal = _PyPegen_expect_token(p, 14)) // token='+' + (a = (asdl_arg_seq*)_loop1_98_rule(p)) // lambda_param_no_default+ && - (a = factor_rule(p)) // factor + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( UAdd , a , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' ','")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13580,34 +13822,27 @@ factor_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+' factor")); + D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' ','")); } - { // '-' factor + { // lambda_param_no_default+ '/' &':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-' factor")); + D(fprintf(stderr, "%*c> lambda_slash_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'")); Token * _literal; - expr_ty a; + asdl_arg_seq* a; if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' + (a = (asdl_arg_seq*)_loop1_99_rule(p)) // lambda_param_no_default+ && - (a = factor_rule(p)) // factor + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' ) { - D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( USub , a , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_slash_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default+ '/' &':'")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13616,34 +13851,50 @@ factor_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-' factor")); + D(fprintf(stderr, "%*c%s lambda_slash_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default+ '/' &':'")); } - { // '~' factor + _res = NULL; + done: + D(p->level--); + return _res; +} + +// lambda_slash_with_default: +// | lambda_param_no_default* lambda_param_with_default+ '/' ',' +// | lambda_param_no_default* lambda_param_with_default+ '/' &':' +static SlashWithDefault* +lambda_slash_with_default_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + SlashWithDefault* _res = NULL; + int _mark = p->mark; + { // lambda_param_no_default* lambda_param_with_default+ '/' ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'~' factor")); + D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); Token * _literal; - expr_ty a; + Token * _literal_1; + asdl_seq * a; + asdl_seq * b; if ( - (_literal = _PyPegen_expect_token(p, 31)) // token='~' + (a = _loop0_100_rule(p)) // lambda_param_no_default* && - (a = factor_rule(p)) // factor + (b = _loop1_101_rule(p)) // lambda_param_with_default+ + && + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'~' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_UnaryOp ( Invert , a , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); + _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13652,83 +13903,84 @@ factor_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'~' factor")); + D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' ','")); } - { // power + { // lambda_param_no_default* lambda_param_with_default+ '/' &':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> factor[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "power")); - expr_ty power_var; + D(fprintf(stderr, "%*c> lambda_slash_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); + Token * _literal; + asdl_seq * a; + asdl_seq * b; if ( - (power_var = power_rule(p)) // power + (a = _loop0_102_rule(p)) // lambda_param_no_default* + && + (b = _loop1_103_rule(p)) // lambda_param_with_default+ + && + (_literal = _PyPegen_expect_token(p, 17)) // token='/' + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' ) { - D(fprintf(stderr, "%*c+ factor[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "power")); - _res = power_var; + D(fprintf(stderr, "%*c+ lambda_slash_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); + _res = _PyPegen_slash_with_default ( p , ( asdl_arg_seq * ) a , b ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s factor[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "power")); + D(fprintf(stderr, "%*c%s lambda_slash_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default* lambda_param_with_default+ '/' &':'")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, factor_type, _res); D(p->level--); return _res; } -// power: await_primary '**' factor | await_primary -static expr_ty -power_rule(Parser *p) +// lambda_star_etc: +// | '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds? +// | '*' ',' lambda_param_maybe_default+ lambda_kwds? +// | lambda_kwds +// | invalid_lambda_star_etc +static StarEtc* +lambda_star_etc_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + StarEtc* _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // await_primary '**' factor + { // '*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor")); + D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); Token * _literal; - expr_ty a; - expr_ty b; + arg_ty a; + asdl_seq * b; + void *c; if ( - (a = await_primary_rule(p)) // await_primary + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_literal = _PyPegen_expect_token(p, 35)) // token='**' + (a = lambda_param_no_default_rule(p)) // lambda_param_no_default && - (b = factor_rule(p)) // factor + (b = _loop0_104_rule(p)) // lambda_param_maybe_default* + && + (c = lambda_kwds_rule(p), 1) // lambda_kwds? ) { - D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary '**' factor")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_BinOp ( a , Pow , b , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); + _res = _PyPegen_star_etc ( p , a , b , c ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13737,83 +13989,55 @@ power_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary '**' factor")); + D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' lambda_param_no_default lambda_param_maybe_default* lambda_kwds?")); } - { // await_primary + { // '*' ',' lambda_param_maybe_default+ lambda_kwds? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> power[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "await_primary")); - expr_ty await_primary_var; + D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); + Token * _literal; + Token * _literal_1; + asdl_seq * b; + void *c; if ( - (await_primary_var = await_primary_rule(p)) // await_primary + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + && + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' + && + (b = _loop1_105_rule(p)) // lambda_param_maybe_default+ + && + (c = lambda_kwds_rule(p), 1) // lambda_kwds? ) { - D(fprintf(stderr, "%*c+ power[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "await_primary")); - _res = await_primary_var; + D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); + _res = _PyPegen_star_etc ( p , NULL , b , c ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s power[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "await_primary")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// await_primary: AWAIT primary | primary -static expr_ty -await_primary_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, await_primary_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' ',' lambda_param_maybe_default+ lambda_kwds?")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // AWAIT primary + { // lambda_kwds if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "AWAIT primary")); - expr_ty a; - Token * await_var; + D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_kwds")); + arg_ty a; if ( - (await_var = _PyPegen_expect_token(p, AWAIT)) // token='AWAIT' - && - (a = primary_rule(p)) // primary + (a = lambda_kwds_rule(p)) // lambda_kwds ) { - D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "AWAIT primary")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = CHECK_VERSION ( expr_ty , 5 , "Await expressions are" , _PyAST_Await ( a , EXTRA ) ); + D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_kwds")); + _res = _PyPegen_star_etc ( p , NULL , NULL , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13822,122 +14046,105 @@ await_primary_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "AWAIT primary")); + D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_kwds")); } - { // primary + if (p->call_invalid_rules) { // invalid_lambda_star_etc if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> await_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary")); - expr_ty primary_var; + D(fprintf(stderr, "%*c> lambda_star_etc[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc")); + void *invalid_lambda_star_etc_var; if ( - (primary_var = primary_rule(p)) // primary + (invalid_lambda_star_etc_var = invalid_lambda_star_etc_rule(p)) // invalid_lambda_star_etc ) { - D(fprintf(stderr, "%*c+ await_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary")); - _res = primary_var; + D(fprintf(stderr, "%*c+ lambda_star_etc[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_lambda_star_etc")); + _res = invalid_lambda_star_etc_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s await_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary")); + D(fprintf(stderr, "%*c%s lambda_star_etc[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_lambda_star_etc")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, await_primary_type, _res); D(p->level--); return _res; } -// Left-recursive -// primary: -// | primary '.' NAME -// | primary genexp -// | primary '(' arguments? ')' -// | primary '[' slices ']' -// | atom -static expr_ty primary_raw(Parser *); -static expr_ty -primary_rule(Parser *p) +// lambda_kwds: '**' lambda_param_no_default +static arg_ty +lambda_kwds_rule(Parser *p) { D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, primary_type, &_res)) { + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; } + arg_ty _res = NULL; int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_8 = _PyPegen_update_memo(p, _mark, primary_type, _res); - if (tmpvar_8) { + { // '**' lambda_param_no_default + if (p->error_indicator) { D(p->level--); - return _res; + return NULL; + } + D(fprintf(stderr, "%*c> lambda_kwds[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default")); + Token * _literal; + arg_ty a; + if ( + (_literal = _PyPegen_expect_token(p, 35)) // token='**' + && + (a = lambda_param_no_default_rule(p)) // lambda_param_no_default + ) + { + D(fprintf(stderr, "%*c+ lambda_kwds[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' lambda_param_no_default")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; } p->mark = _mark; - p->in_raw_rule++; - void *_raw = primary_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; + D(fprintf(stderr, "%*c%s lambda_kwds[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' lambda_param_no_default")); } - p->mark = _resmark; + _res = NULL; + done: D(p->level--); return _res; } -static expr_ty -primary_raw(Parser *p) + +// lambda_param_no_default: lambda_param ',' | lambda_param &':' +static arg_ty +lambda_param_no_default_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + arg_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // primary '.' NAME + { // lambda_param ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '.' NAME")); + D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param ','")); Token * _literal; - expr_ty a; - expr_ty b; + arg_ty a; if ( - (a = primary_rule(p)) // primary - && - (_literal = _PyPegen_expect_token(p, 23)) // token='.' + (a = lambda_param_rule(p)) // lambda_param && - (b = _PyPegen_name_token(p)) // NAME + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '.' NAME")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param ','")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13946,34 +14153,24 @@ primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '.' NAME")); + D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param ','")); } - { // primary genexp + { // lambda_param &':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary genexp")); - expr_ty a; - expr_ty b; + D(fprintf(stderr, "%*c> lambda_param_no_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param &':'")); + arg_ty a; if ( - (a = primary_rule(p)) // primary + (a = lambda_param_rule(p)) // lambda_param && - (b = genexp_rule(p)) // genexp + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' ) { - D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary genexp")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_param_no_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param &':'")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -13982,40 +14179,74 @@ primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary genexp")); + D(fprintf(stderr, "%*c%s lambda_param_no_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param &':'")); } - { // primary '(' arguments? ')' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// lambda_param_with_default: lambda_param default ',' | lambda_param default &':' +static NameDefaultPair* +lambda_param_with_default_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + NameDefaultPair* _res = NULL; + int _mark = p->mark; + { // lambda_param default ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'")); + D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default ','")); Token * _literal; - Token * _literal_1; - expr_ty a; - void *b; + arg_ty a; + expr_ty c; if ( - (a = primary_rule(p)) // primary - && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (a = lambda_param_rule(p)) // lambda_param && - (b = arguments_rule(p), 1) // arguments? + (c = default_rule(p)) // default && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '(' arguments? ')'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { + D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default ','")); + _res = _PyPegen_name_default_pair ( p , a , c , NULL ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; D(p->level--); return NULL; } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default ','")); + } + { // lambda_param default &':' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> lambda_param_with_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'")); + arg_ty a; + expr_ty c; + if ( + (a = lambda_param_rule(p)) // lambda_param + && + (c = default_rule(p)) // default + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' + ) + { + D(fprintf(stderr, "%*c+ lambda_param_with_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default &':'")); + _res = _PyPegen_name_default_pair ( p , a , c , NULL ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14024,40 +14255,45 @@ primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '(' arguments? ')'")); + D(fprintf(stderr, "%*c%s lambda_param_with_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default &':'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// lambda_param_maybe_default: lambda_param default? ',' | lambda_param default? &':' +static NameDefaultPair* +lambda_param_maybe_default_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; } - { // primary '[' slices ']' + NameDefaultPair* _res = NULL; + int _mark = p->mark; + { // lambda_param default? ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'")); + D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','")); Token * _literal; - Token * _literal_1; - expr_ty a; - expr_ty b; + arg_ty a; + void *c; if ( - (a = primary_rule(p)) // primary - && - (_literal = _PyPegen_expect_token(p, 9)) // token='[' + (a = lambda_param_rule(p)) // lambda_param && - (b = slices_rule(p)) // slices + (c = default_rule(p), 1) // default? && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "primary '[' slices ']'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Subscript ( a , b , Load , EXTRA ); + D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? ','")); + _res = _PyPegen_name_default_pair ( p , a , c , NULL ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14066,27 +14302,37 @@ primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "primary '[' slices ']'")); + D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? ','")); } - { // atom + { // lambda_param default? &':' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom")); - expr_ty atom_var; + D(fprintf(stderr, "%*c> lambda_param_maybe_default[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'")); + arg_ty a; + void *c; if ( - (atom_var = atom_rule(p)) // atom + (a = lambda_param_rule(p)) // lambda_param + && + (c = default_rule(p), 1) // default? + && + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 11) // token=':' ) { - D(fprintf(stderr, "%*c+ primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom")); - _res = atom_var; + D(fprintf(stderr, "%*c+ lambda_param_maybe_default[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "lambda_param default? &':'")); + _res = _PyPegen_name_default_pair ( p , a , c , NULL ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom")); + D(fprintf(stderr, "%*c%s lambda_param_maybe_default[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param default? &':'")); } _res = NULL; done: @@ -14094,16 +14340,16 @@ primary_raw(Parser *p) return _res; } -// slices: slice !',' | ','.slice+ ','? -static expr_ty -slices_rule(Parser *p) +// lambda_param: NAME +static arg_ty +lambda_param_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + arg_ty _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -14114,21 +14360,28 @@ slices_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // slice !',' + { // NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice !','")); + D(fprintf(stderr, "%*c> lambda_param[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); expr_ty a; if ( - (a = slice_rule(p)) // slice - && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12) // token=',' + (a = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice !','")); - _res = a; + D(fprintf(stderr, "%*c+ lambda_param[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_arg ( a -> v . Name . id , NULL , NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14137,35 +14390,43 @@ slices_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice !','")); + D(fprintf(stderr, "%*c%s lambda_param[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); } - { // ','.slice+ ','? + _res = NULL; + done: + D(p->level--); + return _res; +} + +// strings: STRING+ +static expr_ty +strings_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, strings_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + { // STRING+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slices[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_expr_seq* a; + D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING+")); + asdl_seq * a; if ( - (a = (asdl_expr_seq*)_gather_108_rule(p)) // ','.slice+ - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (a = _loop1_106_rule(p)) // STRING+ ) { - D(fprintf(stderr, "%*c+ slices[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.slice+ ','?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( a , Load , EXTRA ); + D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING+")); + _res = _PyPegen_concatenate_strings ( p , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14174,18 +14435,19 @@ slices_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slices[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.slice+ ','?")); + D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING+")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, strings_type, _res); D(p->level--); return _res; } -// slice: expression? ':' expression? [':' expression?] | named_expression +// list: '[' star_named_expressions? ']' static expr_ty -slice_rule(Parser *p) +list_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -14203,27 +14465,24 @@ slice_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // expression? ':' expression? [':' expression?] + { // '[' star_named_expressions? ']' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); + D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'")); Token * _literal; + Token * _literal_1; void *a; - void *b; - void *c; if ( - (a = expression_rule(p), 1) // expression? - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (b = expression_rule(p), 1) // expression? + (a = star_named_expressions_rule(p), 1) // star_named_expressions? && - (c = _tmp_110_rule(p), 1) // [':' expression?] + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) { - D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression? ':' expression? [':' expression?]")); + D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14233,31 +14492,7 @@ slice_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Slice ( a , b , c , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression? ':' expression? [':' expression?]")); - } - { // named_expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> slice[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); - expr_ty a; - if ( - (a = named_expression_rule(p)) // named_expression - ) - { - D(fprintf(stderr, "%*c+ slice[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); - _res = a; + _res = _PyAST_List ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14266,8 +14501,8 @@ slice_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s slice[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c%s list[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_named_expressions? ']'")); } _res = NULL; done: @@ -14275,19 +14510,9 @@ slice_rule(Parser *p) return _res; } -// atom: -// | NAME -// | 'True' -// | 'False' -// | 'None' -// | &STRING strings -// | NUMBER -// | &'(' (tuple | group | genexp) -// | &'[' (list | listcomp) -// | &'{' (dict | set | dictcomp | setcomp) -// | '...' +// tuple: '(' [star_named_expression ',' star_named_expressions?] ')' static expr_ty -atom_rule(Parser *p) +tuple_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -14305,37 +14530,24 @@ atom_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NAME - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); - expr_ty name_var; - if ( - (name_var = _PyPegen_name_token(p)) // NAME - ) - { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); - _res = name_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); - } - { // 'True' + { // '(' [star_named_expression ',' star_named_expressions?] ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); - Token * _keyword; + D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); + Token * _literal; + Token * _literal_1; + void *a; if ( - (_keyword = _PyPegen_expect_token(p, 524)) // token='True' + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (a = _tmp_107_rule(p), 1) // [star_named_expression ',' star_named_expressions?] + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14345,7 +14557,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_True , NULL , EXTRA ); + _res = _PyAST_Tuple ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14354,21 +14566,53 @@ atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'True'")); + D(fprintf(stderr, "%*c%s tuple[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// set: '{' star_named_expressions '}' +static expr_ty +set_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; } - { // 'False' + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '{' star_named_expressions '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); - Token * _keyword; + D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'")); + Token * _literal; + Token * _literal_1; + asdl_expr_seq* a; if ( - (_keyword = _PyPegen_expect_token(p, 525)) // token='False' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (a = star_named_expressions_rule(p)) // star_named_expressions + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14378,7 +14622,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_False , NULL , EXTRA ); + _res = _PyAST_Set ( a , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14387,21 +14631,53 @@ atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'False'")); + D(fprintf(stderr, "%*c%s set[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' star_named_expressions '}'")); } - { // 'None' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// dict: '{' double_starred_kvpairs? '}' | '{' invalid_double_starred_kvpairs '}' +static expr_ty +dict_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + expr_ty _res = NULL; + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '{' double_starred_kvpairs? '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); - Token * _keyword; + D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'")); + Token * _literal; + Token * _literal_1; + void *a; if ( - (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' + && + (a = double_starred_kvpairs_rule(p), 1) // double_starred_kvpairs? + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14411,7 +14687,7 @@ atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_None , NULL , EXTRA ); + _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14420,134 +14696,178 @@ atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'None'")); + D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'")); } - { // &STRING strings + { // '{' invalid_double_starred_kvpairs '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&STRING strings")); - expr_ty strings_var; + D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + Token * _literal; + Token * _literal_1; + void *invalid_double_starred_kvpairs_var; if ( - _PyPegen_lookahead(1, _PyPegen_string_token, p) + (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (strings_var = strings_rule(p)) // strings + (invalid_double_starred_kvpairs_var = invalid_double_starred_kvpairs_rule(p)) // invalid_double_starred_kvpairs + && + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&STRING strings")); - _res = strings_var; + D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + _res = _PyPegen_dummy_name(p, _literal, invalid_double_starred_kvpairs_var, _literal_1); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&STRING strings")); + D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); } - { // NUMBER - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NUMBER")); - expr_ty number_var; - if ( - (number_var = _PyPegen_number_token(p)) // NUMBER - ) - { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NUMBER")); - _res = number_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NUMBER")); + _res = NULL; + done: + D(p->level--); + return _res; +} + +// double_starred_kvpairs: ','.double_starred_kvpair+ ','? +static asdl_seq* +double_starred_kvpairs_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; } - { // &'(' (tuple | group | genexp) + asdl_seq* _res = NULL; + int _mark = p->mark; + { // ','.double_starred_kvpair+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); - void *_tmp_111_var; + D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_seq * a; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 7) // token='(' + (a = _gather_108_rule(p)) // ','.double_starred_kvpair+ && - (_tmp_111_var = _tmp_111_rule(p)) // tuple | group | genexp + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'(' (tuple | group | genexp)")); - _res = _tmp_111_var; + D(fprintf(stderr, "%*c+ double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'(' (tuple | group | genexp)")); + D(fprintf(stderr, "%*c%s double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ','?")); } - { // &'[' (list | listcomp) + _res = NULL; + done: + D(p->level--); + return _res; +} + +// double_starred_kvpair: '**' bitwise_or | kvpair +static KeyValuePair* +double_starred_kvpair_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + KeyValuePair* _res = NULL; + int _mark = p->mark; + { // '**' bitwise_or if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); - void *_tmp_112_var; + D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or")); + Token * _literal; + expr_ty a; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 9) // token='[' + (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - (_tmp_112_var = _tmp_112_rule(p)) // list | listcomp + (a = bitwise_or_rule(p)) // bitwise_or ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'[' (list | listcomp)")); - _res = _tmp_112_var; + D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or")); + _res = _PyPegen_key_value_pair ( p , NULL , a ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'[' (list | listcomp)")); + D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or")); } - { // &'{' (dict | set | dictcomp | setcomp) + { // kvpair if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); - void *_tmp_113_var; + D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair")); + KeyValuePair* kvpair_var; if ( - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 25) // token='{' - && - (_tmp_113_var = _tmp_113_rule(p)) // dict | set | dictcomp | setcomp + (kvpair_var = kvpair_rule(p)) // kvpair ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); - _res = _tmp_113_var; + D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kvpair")); + _res = kvpair_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "&'{' (dict | set | dictcomp | setcomp)")); + D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kvpair")); } - { // '...' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// kvpair: expression ':' expression +static KeyValuePair* +kvpair_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + KeyValuePair* _res = NULL; + int _mark = p->mark; + { // expression ':' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression")); Token * _literal; + expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 52)) // token='...' + (a = expression_rule(p)) // expression + && + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + && + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'...'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Constant ( Py_Ellipsis , NULL , EXTRA ); + D(fprintf(stderr, "%*c+ kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression")); + _res = _PyPegen_key_value_pair ( p , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14556,8 +14876,8 @@ atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'...'")); + D(fprintf(stderr, "%*c%s kvpair[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression")); } _res = NULL; done: @@ -14565,34 +14885,30 @@ atom_rule(Parser *p) return _res; } -// strings: STRING+ -static expr_ty -strings_rule(Parser *p) +// for_if_clauses: for_if_clause+ +static asdl_comprehension_seq* +for_if_clauses_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, strings_type, &_res)) { - D(p->level--); - return _res; - } + asdl_comprehension_seq* _res = NULL; int _mark = p->mark; - { // STRING+ + { // for_if_clause+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> strings[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING+")); - asdl_seq * a; + D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); + asdl_comprehension_seq* a; if ( - (a = _loop1_114_rule(p)) // STRING+ + (a = (asdl_comprehension_seq*)_loop1_110_rule(p)) // for_if_clause+ ) { - D(fprintf(stderr, "%*c+ strings[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "STRING+")); - _res = _PyPegen_concatenate_strings ( p , a ); + D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14601,64 +14917,60 @@ strings_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s strings[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING+")); + D(fprintf(stderr, "%*c%s for_if_clauses[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause+")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, strings_type, _res); D(p->level--); return _res; } -// list: '[' star_named_expressions? ']' -static expr_ty -list_rule(Parser *p) +// for_if_clause: +// | ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))* +// | 'for' star_targets 'in' ~ disjunction (('if' disjunction))* +// | invalid_for_target +static comprehension_ty +for_if_clause_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + comprehension_ty _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '[' star_named_expressions? ']' + { // ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))* if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> list[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'")); - Token * _literal; - Token * _literal_1; - void *a; + D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + int _cut_var = 0; + Token * _keyword; + Token * _keyword_1; + expr_ty a; + Token * async_var; + expr_ty b; + asdl_expr_seq* c; if ( - (_literal = _PyPegen_expect_token(p, 9)) // token='[' + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' && - (a = star_named_expressions_rule(p), 1) // star_named_expressions? + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + (a = star_targets_rule(p)) // star_targets + && + (_keyword_1 = _PyPegen_expect_token(p, 520)) // token='in' + && + (_cut_var = 1) + && + (b = disjunction_rule(p)) // disjunction + && + (c = (asdl_expr_seq*)_loop0_111_rule(p)) // (('if' disjunction))* ) { - D(fprintf(stderr, "%*c+ list[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_named_expressions? ']'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_List ( a , Load , EXTRA ); + D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14667,66 +14979,41 @@ list_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s list[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_named_expressions? ']'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// listcomp: '[' named_expression for_if_clauses ']' | invalid_comprehension -static expr_ty -listcomp_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + if (_cut_var) { + D(p->level--); + return NULL; + } } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '[' named_expression for_if_clauses ']' + { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))* if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'")); - Token * _literal; - Token * _literal_1; + D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + int _cut_var = 0; + Token * _keyword; + Token * _keyword_1; expr_ty a; - asdl_comprehension_seq* b; + expr_ty b; + asdl_expr_seq* c; if ( - (_literal = _PyPegen_expect_token(p, 9)) // token='[' + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' && - (a = named_expression_rule(p)) // named_expression + (a = star_targets_rule(p)) // star_targets && - (b = for_if_clauses_rule(p)) // for_if_clauses + (_keyword_1 = _PyPegen_expect_token(p, 520)) // token='in' && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + (_cut_var = 1) + && + (b = disjunction_rule(p)) // disjunction + && + (c = (asdl_expr_seq*)_loop0_112_rule(p)) // (('if' disjunction))* ) { - D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_ListComp ( a , b , EXTRA ); + D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14735,27 +15022,31 @@ listcomp_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' named_expression for_if_clauses ']'")); + D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); + if (_cut_var) { + D(p->level--); + return NULL; + } } - if (p->call_invalid_rules) { // invalid_comprehension + if (p->call_invalid_rules) { // invalid_for_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); - void *invalid_comprehension_var; + D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); + void *invalid_for_target_var; if ( - (invalid_comprehension_var = invalid_comprehension_rule(p)) // invalid_comprehension + (invalid_for_target_var = invalid_for_target_rule(p)) // invalid_for_target ) { - D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); - _res = invalid_comprehension_var; + D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); + _res = invalid_for_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension")); + D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target")); } _res = NULL; done: @@ -14763,9 +15054,9 @@ listcomp_rule(Parser *p) return _res; } -// tuple: '(' [star_named_expression ',' star_named_expressions?] ')' +// listcomp: '[' named_expression for_if_clauses ']' | invalid_comprehension static expr_ty -tuple_rule(Parser *p) +listcomp_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -14783,24 +15074,27 @@ tuple_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '(' [star_named_expression ',' star_named_expressions?] ')' + { // '[' named_expression for_if_clauses ']' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> tuple[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); + D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'")); Token * _literal; Token * _literal_1; - void *a; + expr_ty a; + asdl_comprehension_seq* b; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (a = _tmp_115_rule(p), 1) // [star_named_expression ',' star_named_expressions?] + (a = named_expression_rule(p)) // named_expression && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (b = for_if_clauses_rule(p)) // for_if_clauses + && + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) { - D(fprintf(stderr, "%*c+ tuple[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); + D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' named_expression for_if_clauses ']'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14810,54 +15104,7 @@ tuple_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( a , Load , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s tuple[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' [star_named_expression ',' star_named_expressions?] ')'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// group: '(' (yield_expr | named_expression) ')' | invalid_group -static expr_ty -group_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - { // '(' (yield_expr | named_expression) ')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); - Token * _literal; - Token * _literal_1; - void *a; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (a = _tmp_116_rule(p)) // yield_expr | named_expression - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' - ) - { - D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); - _res = a; + _res = _PyAST_ListComp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14866,27 +15113,27 @@ group_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (yield_expr | named_expression) ')'")); + D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' named_expression for_if_clauses ']'")); } - if (p->call_invalid_rules) { // invalid_group + if (p->call_invalid_rules) { // invalid_comprehension if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> group[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_group")); - void *invalid_group_var; + D(fprintf(stderr, "%*c> listcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + void *invalid_comprehension_var; if ( - (invalid_group_var = invalid_group_rule(p)) // invalid_group + (invalid_comprehension_var = invalid_comprehension_rule(p)) // invalid_comprehension ) { - D(fprintf(stderr, "%*c+ group[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_group")); - _res = invalid_group_var; + D(fprintf(stderr, "%*c+ listcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + _res = invalid_comprehension_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s group[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_group")); + D(fprintf(stderr, "%*c%s listcomp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension")); } _res = NULL; done: @@ -14894,11 +15141,9 @@ group_rule(Parser *p) return _res; } -// genexp: -// | '(' (assigment_expression | expression !':=') for_if_clauses ')' -// | invalid_comprehension +// setcomp: '{' named_expression for_if_clauses '}' | invalid_comprehension static expr_ty -genexp_rule(Parser *p) +setcomp_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -14916,27 +15161,27 @@ genexp_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '(' (assigment_expression | expression !':=') for_if_clauses ')' + { // '{' named_expression for_if_clauses '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); + D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'")); Token * _literal; Token * _literal_1; - void *a; + expr_ty a; asdl_comprehension_seq* b; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (a = _tmp_117_rule(p)) // assigment_expression | expression !':=' + (a = named_expression_rule(p)) // named_expression && (b = for_if_clauses_rule(p)) // for_if_clauses && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); + D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -14946,7 +15191,7 @@ genexp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_GeneratorExp ( a , b , EXTRA ); + _res = _PyAST_SetComp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -14955,26 +15200,26 @@ genexp_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); + D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' named_expression for_if_clauses '}'")); } if (p->call_invalid_rules) { // invalid_comprehension if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); void *invalid_comprehension_var; if ( (invalid_comprehension_var = invalid_comprehension_rule(p)) // invalid_comprehension ) { - D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); _res = invalid_comprehension_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension")); } _res = NULL; @@ -14983,9 +15228,11 @@ genexp_rule(Parser *p) return _res; } -// set: '{' star_named_expressions '}' +// genexp: +// | '(' (assigment_expression | expression !':=') for_if_clauses ')' +// | invalid_comprehension static expr_ty -set_rule(Parser *p) +genexp_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15003,24 +15250,27 @@ set_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' star_named_expressions '}' + { // '(' (assigment_expression | expression !':=') for_if_clauses ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> set[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'")); + D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); Token * _literal; Token * _literal_1; - asdl_expr_seq* a; + void *a; + asdl_comprehension_seq* b; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (a = star_named_expressions_rule(p)) // star_named_expressions + (a = _tmp_113_rule(p)) // assigment_expression | expression !':=' && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + (b = for_if_clauses_rule(p)) // for_if_clauses + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ set[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' star_named_expressions '}'")); + D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15030,7 +15280,7 @@ set_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Set ( a , EXTRA ); + _res = _PyAST_GeneratorExp ( a , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15039,8 +15289,27 @@ set_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s set[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' star_named_expressions '}'")); + D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' (assigment_expression | expression !':=') for_if_clauses ')'")); + } + if (p->call_invalid_rules) { // invalid_comprehension + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> genexp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + void *invalid_comprehension_var; + if ( + (invalid_comprehension_var = invalid_comprehension_rule(p)) // invalid_comprehension + ) + { + D(fprintf(stderr, "%*c+ genexp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); + _res = invalid_comprehension_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s genexp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension")); } _res = NULL; done: @@ -15048,9 +15317,9 @@ set_rule(Parser *p) return _res; } -// setcomp: '{' named_expression for_if_clauses '}' | invalid_comprehension +// dictcomp: '{' kvpair for_if_clauses '}' | invalid_dict_comprehension static expr_ty -setcomp_rule(Parser *p) +dictcomp_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15068,27 +15337,27 @@ setcomp_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' named_expression for_if_clauses '}' + { // '{' kvpair for_if_clauses '}' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'")); + D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'")); Token * _literal; Token * _literal_1; - expr_ty a; + KeyValuePair* a; asdl_comprehension_seq* b; if ( (_literal = _PyPegen_expect_token(p, 25)) // token='{' && - (a = named_expression_rule(p)) // named_expression + (a = kvpair_rule(p)) // kvpair && (b = for_if_clauses_rule(p)) // for_if_clauses && (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' ) { - D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' named_expression for_if_clauses '}'")); + D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15098,7 +15367,7 @@ setcomp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_SetComp ( a , b , EXTRA ); + _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15107,27 +15376,27 @@ setcomp_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' named_expression for_if_clauses '}'")); + D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' kvpair for_if_clauses '}'")); } - if (p->call_invalid_rules) { // invalid_comprehension + if (p->call_invalid_rules) { // invalid_dict_comprehension if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> setcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); - void *invalid_comprehension_var; + D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension")); + void *invalid_dict_comprehension_var; if ( - (invalid_comprehension_var = invalid_comprehension_rule(p)) // invalid_comprehension + (invalid_dict_comprehension_var = invalid_dict_comprehension_rule(p)) // invalid_dict_comprehension ) { - D(fprintf(stderr, "%*c+ setcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_comprehension")); - _res = invalid_comprehension_var; + D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension")); + _res = invalid_dict_comprehension_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s setcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_comprehension")); + D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dict_comprehension")); } _res = NULL; done: @@ -15135,9 +15404,9 @@ setcomp_rule(Parser *p) return _res; } -// dict: '{' double_starred_kvpairs? '}' | '{' invalid_double_starred_kvpairs '}' +// arguments: args ','? &')' | invalid_arguments static expr_ty -dict_rule(Parser *p) +arguments_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15145,44 +15414,30 @@ dict_rule(Parser *p) return NULL; } expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; + if (_PyPegen_is_memoized(p, arguments_type, &_res)) { D(p->level--); - return NULL; + return _res; } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' double_starred_kvpairs? '}' + int _mark = p->mark; + { // args ','? &')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'")); - Token * _literal; - Token * _literal_1; - void *a; + D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty a; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' + (a = args_rule(p)) // args && - (a = double_starred_kvpairs_rule(p), 1) // double_starred_kvpairs? + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' ) { - D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' double_starred_kvpairs? '}'")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Dict ( CHECK ( asdl_expr_seq * , _PyPegen_get_keys ( p , a ) ) , CHECK ( asdl_expr_seq * , _PyPegen_get_values ( p , a ) ) , EXTRA ); + D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','? &')'")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15191,43 +15446,40 @@ dict_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' double_starred_kvpairs? '}'")); + D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','? &')'")); } - { // '{' invalid_double_starred_kvpairs '}' + if (p->call_invalid_rules) { // invalid_arguments if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> dict[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); - Token * _literal; - Token * _literal_1; - void *invalid_double_starred_kvpairs_var; + D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments")); + void *invalid_arguments_var; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (invalid_double_starred_kvpairs_var = invalid_double_starred_kvpairs_rule(p)) // invalid_double_starred_kvpairs - && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + (invalid_arguments_var = invalid_arguments_rule(p)) // invalid_arguments ) { - D(fprintf(stderr, "%*c+ dict[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); - _res = _PyPegen_dummy_name(p, _literal, invalid_double_starred_kvpairs_var, _literal_1); + D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arguments")); + _res = invalid_arguments_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s dict[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' invalid_double_starred_kvpairs '}'")); + D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arguments")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, arguments_type, _res); D(p->level--); return _res; } -// dictcomp: '{' kvpair for_if_clauses '}' | invalid_dict_comprehension +// args: +// | ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs] +// | kwargs static expr_ty -dictcomp_rule(Parser *p) +args_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15245,27 +15497,54 @@ dictcomp_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '{' kvpair for_if_clauses '}' + { // ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs] if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'")); - Token * _literal; - Token * _literal_1; - KeyValuePair* a; - asdl_comprehension_seq* b; + D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); + asdl_expr_seq* a; + void *b; if ( - (_literal = _PyPegen_expect_token(p, 25)) // token='{' - && - (a = kvpair_rule(p)) // kvpair - && - (b = for_if_clauses_rule(p)) // for_if_clauses + (a = (asdl_expr_seq*)_gather_114_rule(p)) // ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ && - (_literal_1 = _PyPegen_expect_token(p, 26)) // token='}' + (b = _tmp_116_rule(p), 1) // [',' kwargs] ) { - D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'{' kvpair for_if_clauses '}'")); + D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); + } + { // kwargs + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs")); + asdl_seq* a; + if ( + (a = kwargs_rule(p)) // kwargs + ) + { + D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15275,7 +15554,7 @@ dictcomp_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_DictComp ( a -> key , a -> value , b , EXTRA ); + _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq * , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq * , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15284,27 +15563,8 @@ dictcomp_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'{' kvpair for_if_clauses '}'")); - } - if (p->call_invalid_rules) { // invalid_dict_comprehension - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> dictcomp[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension")); - void *invalid_dict_comprehension_var; - if ( - (invalid_dict_comprehension_var = invalid_dict_comprehension_rule(p)) // invalid_dict_comprehension - ) - { - D(fprintf(stderr, "%*c+ dictcomp[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_dict_comprehension")); - _res = invalid_dict_comprehension_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s dictcomp[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_dict_comprehension")); + D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs")); } _res = NULL; done: @@ -15312,9 +15572,12 @@ dictcomp_rule(Parser *p) return _res; } -// double_starred_kvpairs: ','.double_starred_kvpair+ ','? +// kwargs: +// | ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ +// | ','.kwarg_or_starred+ +// | ','.kwarg_or_double_starred+ static asdl_seq* -double_starred_kvpairs_rule(Parser *p) +kwargs_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15323,23 +15586,25 @@ double_starred_kvpairs_rule(Parser *p) } asdl_seq* _res = NULL; int _mark = p->mark; - { // ','.double_starred_kvpair+ ','? + { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> double_starred_kvpairs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings + D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); + Token * _literal; asdl_seq * a; + asdl_seq * b; if ( - (a = _gather_118_rule(p)) // ','.double_starred_kvpair+ + (a = _gather_117_rule(p)) // ','.kwarg_or_starred+ && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (b = _gather_119_rule(p)) // ','.kwarg_or_double_starred+ ) { - D(fprintf(stderr, "%*c+ double_starred_kvpairs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.double_starred_kvpair+ ','?")); - _res = a; + D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); + _res = _PyPegen_join_sequences ( p , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15348,71 +15613,46 @@ double_starred_kvpairs_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s double_starred_kvpairs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.double_starred_kvpair+ ','?")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// double_starred_kvpair: '**' bitwise_or | kvpair -static KeyValuePair* -double_starred_kvpair_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); } - KeyValuePair* _res = NULL; - int _mark = p->mark; - { // '**' bitwise_or + { // ','.kwarg_or_starred+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or")); - Token * _literal; - expr_ty a; + D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); + asdl_seq * _gather_121_var; if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (a = bitwise_or_rule(p)) // bitwise_or + (_gather_121_var = _gather_121_rule(p)) // ','.kwarg_or_starred+ ) { - D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' bitwise_or")); - _res = _PyPegen_key_value_pair ( p , NULL , a ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); + _res = _gather_121_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' bitwise_or")); + D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+")); } - { // kvpair + { // ','.kwarg_or_double_starred+ if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> double_starred_kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kvpair")); - KeyValuePair* kvpair_var; + D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); + asdl_seq * _gather_123_var; if ( - (kvpair_var = kvpair_rule(p)) // kvpair + (_gather_123_var = _gather_123_rule(p)) // ','.kwarg_or_double_starred+ ) { - D(fprintf(stderr, "%*c+ double_starred_kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kvpair")); - _res = kvpair_var; + D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); + _res = _gather_123_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s double_starred_kvpair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kvpair")); + D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_double_starred+")); } _res = NULL; done: @@ -15420,77 +15660,51 @@ double_starred_kvpair_rule(Parser *p) return _res; } -// kvpair: expression ':' expression -static KeyValuePair* -kvpair_rule(Parser *p) +// starred_expression: '*' expression +static expr_ty +starred_expression_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - KeyValuePair* _res = NULL; + expr_ty _res = NULL; int _mark = p->mark; - { // expression ':' expression + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // '*' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kvpair[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression ':' expression")); + D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression")); Token * _literal; expr_ty a; - expr_ty b; if ( - (a = expression_rule(p)) // expression - && - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (b = expression_rule(p)) // expression + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ kvpair[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression ':' expression")); - _res = _PyPegen_key_value_pair ( p , a , b ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s kvpair[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression ':' expression")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// for_if_clauses: for_if_clause+ -static asdl_comprehension_seq* -for_if_clauses_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_comprehension_seq* _res = NULL; - int _mark = p->mark; - { // for_if_clause+ - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> for_if_clauses[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); - asdl_comprehension_seq* a; - if ( - (a = (asdl_comprehension_seq*)_loop1_120_rule(p)) // for_if_clause+ - ) - { - D(fprintf(stderr, "%*c+ for_if_clauses[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "for_if_clause+")); - _res = a; + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Starred ( a , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15499,8 +15713,8 @@ for_if_clauses_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_if_clauses[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause+")); + D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression")); } _res = NULL; done: @@ -15508,94 +15722,73 @@ for_if_clauses_rule(Parser *p) return _res; } -// for_if_clause: -// | ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))* -// | 'for' star_targets 'in' ~ disjunction (('if' disjunction))* -// | invalid_for_target -static comprehension_ty -for_if_clause_rule(Parser *p) +// kwarg_or_starred: invalid_kwarg | NAME '=' expression | starred_expression +static KeywordOrStarred* +kwarg_or_starred_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - comprehension_ty _res = NULL; + KeywordOrStarred* _res = NULL; int _mark = p->mark; - { // ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))* + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + if (p->call_invalid_rules) { // invalid_kwarg if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - int _cut_var = 0; - Token * _keyword; - Token * _keyword_1; - expr_ty a; - Token * async_var; - expr_ty b; - asdl_expr_seq* c; + D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); + void *invalid_kwarg_var; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' - && - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' - && - (a = star_targets_rule(p)) // star_targets - && - (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='in' - && - (_cut_var = 1) - && - (b = disjunction_rule(p)) // disjunction - && - (c = (asdl_expr_seq*)_loop0_121_rule(p)) // (('if' disjunction))* + (invalid_kwarg_var = invalid_kwarg_rule(p)) // invalid_kwarg ) { - D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - _res = CHECK_VERSION ( comprehension_ty , 6 , "Async comprehensions are" , _PyAST_comprehension ( a , b , c , 1 , p -> arena ) ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); + _res = invalid_kwarg_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC 'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - if (_cut_var) { - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg")); } - { // 'for' star_targets 'in' ~ disjunction (('if' disjunction))* + { // NAME '=' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - int _cut_var = 0; - Token * _keyword; - Token * _keyword_1; + D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + Token * _literal; expr_ty a; expr_ty b; - asdl_expr_seq* c; if ( - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' - && - (a = star_targets_rule(p)) // star_targets - && - (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='in' - && - (_cut_var = 1) + (a = _PyPegen_name_token(p)) // NAME && - (b = disjunction_rule(p)) // disjunction + (_literal = _PyPegen_expect_token(p, 22)) // token='=' && - (c = (asdl_expr_seq*)_loop0_122_rule(p)) // (('if' disjunction))* + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - _res = _PyAST_comprehension ( a , b , c , 0 , p -> arena ); + D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15604,31 +15797,32 @@ for_if_clause_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for' star_targets 'in' ~ disjunction (('if' disjunction))*")); - if (_cut_var) { - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression")); } - if (p->call_invalid_rules) { // invalid_for_target + { // starred_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> for_if_clause[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); - void *invalid_for_target_var; + D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); + expr_ty a; if ( - (invalid_for_target_var = invalid_for_target_rule(p)) // invalid_for_target + (a = starred_expression_rule(p)) // starred_expression ) { - D(fprintf(stderr, "%*c+ for_if_clause[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_for_target")); - _res = invalid_for_target_var; + D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); + _res = _PyPegen_keyword_or_starred ( p , a , 0 ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s for_if_clause[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_for_target")); + D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); } _res = NULL; done: @@ -15636,16 +15830,16 @@ for_if_clause_rule(Parser *p) return _res; } -// yield_expr: 'yield' 'from' expression | 'yield' star_expressions? -static expr_ty -yield_expr_rule(Parser *p) +// kwarg_or_double_starred: invalid_kwarg | NAME '=' expression | '**' expression +static KeywordOrStarred* +kwarg_or_double_starred_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + KeywordOrStarred* _res = NULL; int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -15656,24 +15850,43 @@ yield_expr_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // 'yield' 'from' expression + if (p->call_invalid_rules) { // invalid_kwarg if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression")); - Token * _keyword; - Token * _keyword_1; + D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); + void *invalid_kwarg_var; + if ( + (invalid_kwarg_var = invalid_kwarg_rule(p)) // invalid_kwarg + ) + { + D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); + _res = invalid_kwarg_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg")); + } + { // NAME '=' expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + Token * _literal; expr_ty a; + expr_ty b; if ( - (_keyword = _PyPegen_expect_token(p, 504)) // token='yield' + (a = _PyPegen_name_token(p)) // NAME && - (_keyword_1 = _PyPegen_expect_token(p, 514)) // token='from' + (_literal = _PyPegen_expect_token(p, 22)) // token='=' && - (a = expression_rule(p)) // expression + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' 'from' expression")); + D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15683,7 +15896,7 @@ yield_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_YieldFrom ( a , EXTRA ); + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15692,24 +15905,24 @@ yield_expr_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' 'from' expression")); + D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression")); } - { // 'yield' star_expressions? + { // '**' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> yield_expr[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?")); - Token * _keyword; - void *a; + D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression")); + Token * _literal; + expr_ty a; if ( - (_keyword = _PyPegen_expect_token(p, 504)) // token='yield' + (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - (a = star_expressions_rule(p), 1) // star_expressions? + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ yield_expr[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'yield' star_expressions?")); + D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15719,7 +15932,7 @@ yield_expr_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Yield ( a , EXTRA ); + _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15728,8 +15941,8 @@ yield_expr_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s yield_expr[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'yield' star_expressions?")); + D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression")); } _res = NULL; done: @@ -15737,9 +15950,9 @@ yield_expr_rule(Parser *p) return _res; } -// arguments: args ','? &')' | invalid_arguments +// star_targets: star_target !',' | star_target ((',' star_target))* ','? static expr_ty -arguments_rule(Parser *p) +star_targets_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -15747,29 +15960,30 @@ arguments_rule(Parser *p) return NULL; } expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, arguments_type, &_res)) { + int _mark = p->mark; + if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { + p->error_indicator = 1; D(p->level--); - return _res; + return NULL; } - int _mark = p->mark; - { // args ','? &')' + int _start_lineno = p->tokens[_mark]->lineno; + UNUSED(_start_lineno); // Only used by EXTRA macro + int _start_col_offset = p->tokens[_mark]->col_offset; + UNUSED(_start_col_offset); // Only used by EXTRA macro + { // star_target !',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "args ','? &')'")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings + D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','")); expr_ty a; if ( - (a = args_rule(p)) // args - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (a = star_target_rule(p)) // star_target && - _PyPegen_lookahead_with_int(1, _PyPegen_expect_token, p, 8) // token=')' + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12) // token=',' ) { - D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "args ','? &')'")); + D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target !','")); _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -15779,72 +15993,28 @@ arguments_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "args ','? &')'")); - } - if (p->call_invalid_rules) { // invalid_arguments - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> arguments[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_arguments")); - void *invalid_arguments_var; - if ( - (invalid_arguments_var = invalid_arguments_rule(p)) // invalid_arguments - ) - { - D(fprintf(stderr, "%*c+ arguments[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_arguments")); - _res = invalid_arguments_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s arguments[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_arguments")); - } - _res = NULL; - done: - _PyPegen_insert_memo(p, _mark, arguments_type, _res); - D(p->level--); - return _res; -} - -// args: -// | ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs] -// | kwargs -static expr_ty -args_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target !','")); } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs] + { // star_target ((',' star_target))* ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); - asdl_expr_seq* a; - void *b; + D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty a; + asdl_seq * b; if ( - (a = (asdl_expr_seq*)_gather_123_rule(p)) // ','.(starred_expression | (assigment_expression | expression !':=') !'=')+ + (a = star_target_rule(p)) // star_target + && + (b = _loop0_125_rule(p)) // ((',' star_target))* && - (b = _tmp_125_rule(p), 1) // [',' kwargs] + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); + D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -15854,7 +16024,7 @@ args_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_collect_call_seqs ( p , a , b , EXTRA ); + _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15863,31 +16033,43 @@ args_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.(starred_expression | (assigment_expression | expression !':=') !'=')+ [',' kwargs]")); + D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))* ','?")); } - { // kwargs + _res = NULL; + done: + D(p->level--); + return _res; +} + +// star_targets_list_seq: ','.star_target+ ','? +static asdl_expr_seq* +star_targets_list_seq_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_expr_seq* _res = NULL; + int _mark = p->mark; + { // ','.star_target+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> args[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwargs")); - asdl_seq* a; + D(fprintf(stderr, "%*c> star_targets_list_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + asdl_expr_seq* a; if ( - (a = kwargs_rule(p)) // kwargs + (a = (asdl_expr_seq*)_gather_126_rule(p)) // ','.star_target+ + && + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ args[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwargs")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( _PyPegen_dummy_name ( p ) , CHECK_NULL_ALLOWED ( asdl_expr_seq * , _PyPegen_seq_extract_starred_exprs ( p , a ) ) , CHECK_NULL_ALLOWED ( asdl_keyword_seq * , _PyPegen_seq_delete_starred_exprs ( p , a ) ) , EXTRA ); + D(fprintf(stderr, "%*c+ star_targets_list_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?")); + _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15896,8 +16078,8 @@ args_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s args[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwargs")); + D(fprintf(stderr, "%*c%s star_targets_list_seq[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_target+ ','?")); } _res = NULL; done: @@ -15905,39 +16087,37 @@ args_rule(Parser *p) return _res; } -// kwargs: -// | ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ -// | ','.kwarg_or_starred+ -// | ','.kwarg_or_double_starred+ -static asdl_seq* -kwargs_rule(Parser *p) +// star_targets_tuple_seq: star_target ((',' star_target))+ ','? | star_target ',' +static asdl_expr_seq* +star_targets_tuple_seq_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq* _res = NULL; + asdl_expr_seq* _res = NULL; int _mark = p->mark; - { // ','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+ + { // star_target ((',' star_target))+ ','? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); - Token * _literal; - asdl_seq * a; + D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?")); + void *_opt_var; + UNUSED(_opt_var); // Silence compiler warnings + expr_ty a; asdl_seq * b; if ( - (a = _gather_126_rule(p)) // ','.kwarg_or_starred+ + (a = star_target_rule(p)) // star_target && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (b = _loop1_128_rule(p)) // ((',' star_target))+ && - (b = _gather_128_rule(p)) // ','.kwarg_or_double_starred+ + (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) { - D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); - _res = _PyPegen_join_sequences ( p , a , b ); + D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?")); + _res = ( asdl_expr_seq * ) _PyPegen_seq_insert_in_front ( p , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -15946,46 +16126,35 @@ kwargs_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+ ',' ','.kwarg_or_double_starred+")); - } - { // ','.kwarg_or_starred+ - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); - asdl_seq * _gather_130_var; - if ( - (_gather_130_var = _gather_130_rule(p)) // ','.kwarg_or_starred+ - ) - { - D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_starred+")); - _res = _gather_130_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_starred+")); + D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))+ ','?")); } - { // ','.kwarg_or_double_starred+ + { // star_target ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwargs[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); - asdl_seq * _gather_132_var; + D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ','")); + Token * _literal; + expr_ty a; if ( - (_gather_132_var = _gather_132_rule(p)) // ','.kwarg_or_double_starred+ + (a = star_target_rule(p)) // star_target + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ kwargs[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.kwarg_or_double_starred+")); - _res = _gather_132_var; + D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ','")); + _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwargs[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.kwarg_or_double_starred+")); + D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ','")); } _res = NULL; done: @@ -15993,9 +16162,9 @@ kwargs_rule(Parser *p) return _res; } -// starred_expression: '*' expression +// star_target: '*' (!'*' star_target) | target_with_star_atom static expr_ty -starred_expression_rule(Parser *p) +star_target_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -16003,6 +16172,10 @@ starred_expression_rule(Parser *p) return NULL; } expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, star_target_type, &_res)) { + D(p->level--); + return _res; + } int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -16013,21 +16186,21 @@ starred_expression_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '*' expression + { // '*' (!'*' star_target) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> starred_expression[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression")); + D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)")); Token * _literal; - expr_ty a; + void *a; if ( (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (a = expression_rule(p)) // expression + (a = _tmp_129_rule(p)) // !'*' star_target ) { - D(fprintf(stderr, "%*c+ starred_expression[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression")); + D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16037,7 +16210,7 @@ starred_expression_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Starred ( a , Load , EXTRA ); + _res = _PyAST_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16046,25 +16219,52 @@ starred_expression_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s starred_expression[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression")); + D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (!'*' star_target)")); + } + { // target_with_star_atom + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_with_star_atom")); + expr_ty target_with_star_atom_var; + if ( + (target_with_star_atom_var = target_with_star_atom_rule(p)) // target_with_star_atom + ) + { + D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_with_star_atom")); + _res = target_with_star_atom_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_with_star_atom")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, star_target_type, _res); D(p->level--); return _res; } -// kwarg_or_starred: invalid_kwarg | NAME '=' expression | starred_expression -static KeywordOrStarred* -kwarg_or_starred_rule(Parser *p) +// target_with_star_atom: +// | t_primary '.' NAME !t_lookahead +// | t_primary '[' slices ']' !t_lookahead +// | star_atom +static expr_ty +target_with_star_atom_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - KeywordOrStarred* _res = NULL; + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, target_with_star_atom_type, &_res)) { + D(p->level--); + return _res; + } int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -16075,43 +16275,26 @@ kwarg_or_starred_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_kwarg - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); - void *invalid_kwarg_var; - if ( - (invalid_kwarg_var = invalid_kwarg_rule(p)) // invalid_kwarg - ) - { - D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); - _res = invalid_kwarg_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg")); - } - { // NAME '=' expression + { // t_primary '.' NAME !t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); Token * _literal; expr_ty a; expr_ty b; if ( - (a = _PyPegen_name_token(p)) // NAME + (a = t_primary_rule(p)) // t_primary && - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + (_literal = _PyPegen_expect_token(p, 23)) // token='.' && - (b = expression_rule(p)) // expression + (b = _PyPegen_name_token(p)) // NAME + && + _PyPegen_lookahead(0, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16121,31 +16304,7 @@ kwarg_or_starred_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression")); - } - { // starred_expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> kwarg_or_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "starred_expression")); - expr_ty a; - if ( - (a = starred_expression_rule(p)) // starred_expression - ) - { - D(fprintf(stderr, "%*c+ kwarg_or_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "starred_expression")); - _res = _PyPegen_keyword_or_starred ( p , a , 0 ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16154,72 +16313,32 @@ kwarg_or_starred_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "starred_expression")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// kwarg_or_double_starred: invalid_kwarg | NAME '=' expression | '**' expression -static KeywordOrStarred* -kwarg_or_double_starred_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - KeywordOrStarred* _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - if (p->call_invalid_rules) { // invalid_kwarg - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); - void *invalid_kwarg_var; - if ( - (invalid_kwarg_var = invalid_kwarg_rule(p)) // invalid_kwarg - ) - { - D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_kwarg")); - _res = invalid_kwarg_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_kwarg")); + D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead")); } - { // NAME '=' expression + { // t_primary '[' slices ']' !t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); Token * _literal; + Token * _literal_1; expr_ty a; expr_ty b; if ( - (a = _PyPegen_name_token(p)) // NAME + (a = t_primary_rule(p)) // t_primary && - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (b = expression_rule(p)) // expression + (b = slices_rule(p)) // slices + && + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + && + _PyPegen_lookahead(0, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME '=' expression")); + D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16229,7 +16348,7 @@ kwarg_or_double_starred_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( a -> v . Name . id , b , EXTRA ) ) , 1 ); + _res = _PyAST_Subscript ( a , b , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16238,54 +16357,42 @@ kwarg_or_double_starred_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME '=' expression")); + D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); } - { // '**' expression + { // star_atom if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> kwarg_or_double_starred[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression")); - Token * _literal; - expr_ty a; + D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_atom")); + expr_ty star_atom_var; if ( - (_literal = _PyPegen_expect_token(p, 35)) // token='**' - && - (a = expression_rule(p)) // expression + (star_atom_var = star_atom_rule(p)) // star_atom ) { - D(fprintf(stderr, "%*c+ kwarg_or_double_starred[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyPegen_keyword_or_starred ( p , CHECK ( keyword_ty , _PyAST_keyword ( NULL , a , EXTRA ) ) , 1 ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_atom")); + _res = star_atom_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s kwarg_or_double_starred[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression")); + D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_atom")); } _res = NULL; done: + _PyPegen_insert_memo(p, _mark, target_with_star_atom_type, _res); D(p->level--); return _res; } -// star_targets: star_target !',' | star_target ((',' star_target))* ','? +// star_atom: +// | NAME +// | '(' target_with_star_atom ')' +// | '(' star_targets_tuple_seq? ')' +// | '[' star_targets_list_seq? ']' static expr_ty -star_targets_rule(Parser *p) +star_atom_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -16303,21 +16410,19 @@ star_targets_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // star_target !',' + { // NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target !','")); + D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); expr_ty a; if ( - (a = star_target_rule(p)) // star_target - && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 12) // token=',' + (a = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target !','")); - _res = a; + D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + _res = _PyPegen_set_expr_context ( p , a , Store ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16326,38 +16431,28 @@ star_targets_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target !','")); + D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); } - { // star_target ((',' star_target))* ','? + { // '(' target_with_star_atom ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_targets[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings + D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'")); + Token * _literal; + Token * _literal_1; expr_ty a; - asdl_seq * b; if ( - (a = star_target_rule(p)) // star_target + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (b = _loop0_134_rule(p)) // ((',' star_target))* + (a = target_with_star_atom_rule(p)) // target_with_star_atom && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ star_targets[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))* ','?")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( CHECK ( asdl_expr_seq * , _PyPegen_seq_insert_in_front ( p , a , b ) ) , Store , EXTRA ); + D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'")); + _res = _PyPegen_set_expr_context ( p , a , Store ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16366,91 +16461,37 @@ star_targets_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_targets[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))* ','?")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// star_targets_list_seq: ','.star_target+ ','? -static asdl_expr_seq* -star_targets_list_seq_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' target_with_star_atom ')'")); } - asdl_expr_seq* _res = NULL; - int _mark = p->mark; - { // ','.star_target+ ','? + { // '(' star_targets_tuple_seq? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_targets_list_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - asdl_expr_seq* a; + D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); + Token * _literal; + Token * _literal_1; + void *a; if ( - (a = (asdl_expr_seq*)_gather_135_rule(p)) // ','.star_target+ + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? + (a = star_targets_tuple_seq_rule(p), 1) // star_targets_tuple_seq? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ star_targets_list_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.star_target+ ','?")); - _res = a; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; + D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { D(p->level--); return NULL; } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s star_targets_list_seq[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.star_target+ ','?")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// star_targets_tuple_seq: star_target ((',' star_target))+ ','? | star_target ',' -static asdl_expr_seq* -star_targets_tuple_seq_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_expr_seq* _res = NULL; - int _mark = p->mark; - { // star_target ((',' star_target))+ ','? - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?")); - void *_opt_var; - UNUSED(_opt_var); // Silence compiler warnings - expr_ty a; - asdl_seq * b; - if ( - (a = star_target_rule(p)) // star_target - && - (b = _loop1_137_rule(p)) // ((',' star_target))+ - && - (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? - ) - { - D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ((',' star_target))+ ','?")); - _res = ( asdl_expr_seq * ) _PyPegen_seq_insert_in_front ( p , a , b ); + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Tuple ( a , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16459,25 +16500,37 @@ star_targets_tuple_seq_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ((',' star_target))+ ','?")); + D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); } - { // star_target ',' + { // '[' star_targets_list_seq? ']' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_targets_tuple_seq[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target ','")); + D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'")); Token * _literal; - expr_ty a; + Token * _literal_1; + void *a; if ( - (a = star_target_rule(p)) // star_target + (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (a = star_targets_list_seq_rule(p), 1) // star_targets_list_seq? + && + (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' ) { - D(fprintf(stderr, "%*c+ star_targets_tuple_seq[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target ','")); - _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); + D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_List ( a , Store , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16486,8 +16539,8 @@ star_targets_tuple_seq_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_targets_tuple_seq[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target ','")); + D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_targets_list_seq? ']'")); } _res = NULL; done: @@ -16495,9 +16548,9 @@ star_targets_tuple_seq_rule(Parser *p) return _res; } -// star_target: '*' (!'*' star_target) | target_with_star_atom +// single_target: single_subscript_attribute_target | NAME | '(' single_target ')' static expr_ty -star_target_rule(Parser *p) +single_target_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -16505,45 +16558,39 @@ star_target_rule(Parser *p) return NULL; } expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, star_target_type, &_res)) { - D(p->level--); - return _res; - } int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // '*' (!'*' star_target) + { // single_subscript_attribute_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)")); - Token * _literal; - void *a; + D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + expr_ty single_subscript_attribute_target_var; + if ( + (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target + ) + { + D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + _res = single_subscript_attribute_target_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); + } + { // NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); + expr_ty a; if ( - (_literal = _PyPegen_expect_token(p, 16)) // token='*' - && - (a = _tmp_138_rule(p)) // !'*' star_target + (a = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' (!'*' star_target)")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Starred ( CHECK ( expr_ty , _PyPegen_set_expr_context ( p , a , Store ) ) , Store , EXTRA ); + D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); + _res = _PyPegen_set_expr_context ( p , a , Store ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16552,41 +16599,50 @@ star_target_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' (!'*' star_target)")); + D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); } - { // target_with_star_atom + { // '(' single_target ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "target_with_star_atom")); - expr_ty target_with_star_atom_var; + D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + Token * _literal; + Token * _literal_1; + expr_ty a; if ( - (target_with_star_atom_var = target_with_star_atom_rule(p)) // target_with_star_atom + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (a = single_target_rule(p)) // single_target + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ star_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "target_with_star_atom")); - _res = target_with_star_atom_var; + D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + _res = a; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "target_with_star_atom")); + D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); } _res = NULL; done: - _PyPegen_insert_memo(p, _mark, star_target_type, _res); D(p->level--); return _res; } -// target_with_star_atom: +// single_subscript_attribute_target: // | t_primary '.' NAME !t_lookahead // | t_primary '[' slices ']' !t_lookahead -// | star_atom static expr_ty -target_with_star_atom_rule(Parser *p) +single_subscript_attribute_target_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -16594,10 +16650,6 @@ target_with_star_atom_rule(Parser *p) return NULL; } expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, target_with_star_atom_type, &_res)) { - D(p->level--); - return _res; - } int _mark = p->mark; if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { p->error_indicator = 1; @@ -16613,7 +16665,7 @@ target_with_star_atom_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); + D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); Token * _literal; expr_ty a; expr_ty b; @@ -16627,7 +16679,7 @@ target_with_star_atom_rule(Parser *p) _PyPegen_lookahead(0, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); + D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16646,7 +16698,7 @@ target_with_star_atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead")); } { // t_primary '[' slices ']' !t_lookahead @@ -16654,7 +16706,7 @@ target_with_star_atom_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); + D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); Token * _literal; Token * _literal_1; expr_ty a; @@ -16671,7 +16723,7 @@ target_with_star_atom_rule(Parser *p) _PyPegen_lookahead(0, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); + D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16690,42 +16742,57 @@ target_with_star_atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); } - { // star_atom - if (p->error_indicator) { + _res = NULL; + done: + D(p->level--); + return _res; +} + +// Left-recursive +// t_primary: +// | t_primary '.' NAME &t_lookahead +// | t_primary '[' slices ']' &t_lookahead +// | t_primary genexp &t_lookahead +// | t_primary '(' arguments? ')' &t_lookahead +// | atom &t_lookahead +static expr_ty t_primary_raw(Parser *); +static expr_ty +t_primary_rule(Parser *p) +{ + D(p->level++); + expr_ty _res = NULL; + if (_PyPegen_is_memoized(p, t_primary_type, &_res)) { + D(p->level--); + return _res; + } + int _mark = p->mark; + int _resmark = p->mark; + while (1) { + int tmpvar_9 = _PyPegen_update_memo(p, _mark, t_primary_type, _res); + if (tmpvar_9) { D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> target_with_star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_atom")); - expr_ty star_atom_var; - if ( - (star_atom_var = star_atom_rule(p)) // star_atom - ) - { - D(fprintf(stderr, "%*c+ target_with_star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_atom")); - _res = star_atom_var; - goto done; + return _res; } p->mark = _mark; - D(fprintf(stderr, "%*c%s target_with_star_atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_atom")); + p->in_raw_rule++; + void *_raw = t_primary_raw(p); + p->in_raw_rule--; + if (p->error_indicator) + return NULL; + if (_raw == NULL || p->mark <= _resmark) + break; + _resmark = p->mark; + _res = _raw; } - _res = NULL; - done: - _PyPegen_insert_memo(p, _mark, target_with_star_atom_type, _res); + p->mark = _resmark; D(p->level--); return _res; } - -// star_atom: -// | NAME -// | '(' target_with_star_atom ')' -// | '(' star_targets_tuple_seq? ')' -// | '[' star_targets_list_seq? ']' static expr_ty -star_atom_rule(Parser *p) +t_primary_raw(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -16743,78 +16810,26 @@ star_atom_rule(Parser *p) UNUSED(_start_lineno); // Only used by EXTRA macro int _start_col_offset = p->tokens[_mark]->col_offset; UNUSED(_start_col_offset); // Only used by EXTRA macro - { // NAME - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); - expr_ty a; - if ( - (a = _PyPegen_name_token(p)) // NAME - ) - { - D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); - _res = _PyPegen_set_expr_context ( p , a , Store ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); - } - { // '(' target_with_star_atom ')' + { // t_primary '.' NAME &t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'")); + D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead")); Token * _literal; - Token * _literal_1; expr_ty a; + expr_ty b; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (a = target_with_star_atom_rule(p)) // target_with_star_atom + (a = t_primary_rule(p)) // t_primary && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' - ) - { - D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' target_with_star_atom ')'")); - _res = _PyPegen_set_expr_context ( p , a , Store ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' target_with_star_atom ')'")); - } - { // '(' star_targets_tuple_seq? ')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); - Token * _literal; - Token * _literal_1; - void *a; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (_literal = _PyPegen_expect_token(p, 23)) // token='.' && - (a = star_targets_tuple_seq_rule(p), 1) // star_targets_tuple_seq? + (b = _PyPegen_name_token(p)) // NAME && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + _PyPegen_lookahead(1, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); + D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16824,7 +16839,7 @@ star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Tuple ( a , Store , EXTRA ); + _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16833,27 +16848,32 @@ star_atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' star_targets_tuple_seq? ')'")); + D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME &t_lookahead")); } - { // '[' star_targets_list_seq? ']' + { // t_primary '[' slices ']' &t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> star_atom[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'")); + D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); Token * _literal; Token * _literal_1; - void *a; + expr_ty a; + expr_ty b; if ( + (a = t_primary_rule(p)) // t_primary + && (_literal = _PyPegen_expect_token(p, 9)) // token='[' && - (a = star_targets_list_seq_rule(p), 1) // star_targets_list_seq? + (b = slices_rule(p)) // slices && (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + && + _PyPegen_lookahead(1, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ star_atom[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'[' star_targets_list_seq? ']'")); + D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); if (_token == NULL) { D(p->level--); @@ -16863,7 +16883,7 @@ star_atom_rule(Parser *p) UNUSED(_end_lineno); // Only used by EXTRA macro int _end_col_offset = _token->end_col_offset; UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_List ( a , Store , EXTRA ); + _res = _PyAST_Subscript ( a , b , Load , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16872,58 +16892,80 @@ star_atom_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s star_atom[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'[' star_targets_list_seq? ']'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// single_target: single_subscript_attribute_target | NAME | '(' single_target ')' -static expr_ty -single_target_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); } - expr_ty _res = NULL; - int _mark = p->mark; - { // single_subscript_attribute_target + { // t_primary genexp &t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); - expr_ty single_subscript_attribute_target_var; + D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead")); + expr_ty a; + expr_ty b; if ( - (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target + (a = t_primary_rule(p)) // t_primary + && + (b = genexp_rule(p)) // genexp + && + _PyPegen_lookahead(1, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); - _res = single_subscript_attribute_target_var; + D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); + D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary genexp &t_lookahead")); } - { // NAME + { // t_primary '(' arguments? ')' &t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME")); + D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); + Token * _literal; + Token * _literal_1; expr_ty a; + void *b; if ( - (a = _PyPegen_name_token(p)) // NAME + (a = t_primary_rule(p)) // t_primary + && + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + && + (b = arguments_rule(p), 1) // arguments? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + && + _PyPegen_lookahead(1, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME")); - _res = _PyPegen_set_expr_context ( p , a , Store ); + D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); + Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); + if (_token == NULL) { + D(p->level--); + return NULL; + } + int _end_lineno = _token->end_lineno; + UNUSED(_end_lineno); // Only used by EXTRA macro + int _end_col_offset = _token->end_col_offset; + UNUSED(_end_col_offset); // Only used by EXTRA macro + _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -16932,27 +16974,23 @@ single_target_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME")); + D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); } - { // '(' single_target ')' + { // atom &t_lookahead if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> single_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); - Token * _literal; - Token * _literal_1; + D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead")); expr_ty a; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (a = single_target_rule(p)) // single_target + (a = atom_rule(p)) // atom && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + _PyPegen_lookahead(1, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ single_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead")); _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -16962,8 +17000,8 @@ single_target_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s single_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom &t_lookahead")); } _res = NULL; done: @@ -16971,112 +17009,73 @@ single_target_rule(Parser *p) return _res; } -// single_subscript_attribute_target: -// | t_primary '.' NAME !t_lookahead -// | t_primary '[' slices ']' !t_lookahead -static expr_ty -single_subscript_attribute_target_rule(Parser *p) +// t_lookahead: '(' | '[' | '.' +static void * +t_lookahead_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - expr_ty _res = NULL; + void * _res = NULL; int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // t_primary '.' NAME !t_lookahead + { // '(' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); + D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); Token * _literal; - expr_ty a; - expr_ty b; if ( - (a = t_primary_rule(p)) // t_primary - && - (_literal = _PyPegen_expect_token(p, 23)) // token='.' - && - (b = _PyPegen_name_token(p)) // NAME - && - _PyPegen_lookahead(0, t_lookahead_rule, p) + (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME !t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Attribute ( a , b -> v . Name . id , Store , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME !t_lookahead")); + D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } - { // t_primary '[' slices ']' !t_lookahead + { // '[' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> single_subscript_attribute_target[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); + D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); Token * _literal; - Token * _literal_1; - expr_ty a; - expr_ty b; if ( - (a = t_primary_rule(p)) // t_primary - && (_literal = _PyPegen_expect_token(p, 9)) // token='[' - && - (b = slices_rule(p)) // slices - && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' - && - _PyPegen_lookahead(0, t_lookahead_rule, p) ) { - D(fprintf(stderr, "%*c+ single_subscript_attribute_target[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Subscript ( a , b , Store , EXTRA ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s single_subscript_attribute_target[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' !t_lookahead")); + D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); + } + { // '.' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 23)) // token='.' + ) + { + D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } _res = NULL; done: @@ -17105,7 +17104,7 @@ del_targets_rule(Parser *p) UNUSED(_opt_var); // Silence compiler warnings asdl_expr_seq* a; if ( - (a = (asdl_expr_seq*)_gather_139_rule(p)) // ','.del_target+ + (a = (asdl_expr_seq*)_gather_130_rule(p)) // ','.del_target+ && (_opt_var = _PyPegen_expect_token(p, 12), 1) // ','? ) @@ -17425,95 +17424,55 @@ del_t_atom_rule(Parser *p) return _res; } -// Left-recursive -// t_primary: -// | t_primary '.' NAME &t_lookahead -// | t_primary '[' slices ']' &t_lookahead -// | t_primary genexp &t_lookahead -// | t_primary '(' arguments? ')' &t_lookahead -// | atom &t_lookahead -static expr_ty t_primary_raw(Parser *); -static expr_ty -t_primary_rule(Parser *p) -{ - D(p->level++); - expr_ty _res = NULL; - if (_PyPegen_is_memoized(p, t_primary_type, &_res)) { - D(p->level--); - return _res; - } - int _mark = p->mark; - int _resmark = p->mark; - while (1) { - int tmpvar_9 = _PyPegen_update_memo(p, _mark, t_primary_type, _res); - if (tmpvar_9) { - D(p->level--); - return _res; - } - p->mark = _mark; - p->in_raw_rule++; - void *_raw = t_primary_raw(p); - p->in_raw_rule--; - if (p->error_indicator) - return NULL; - if (_raw == NULL || p->mark <= _resmark) - break; - _resmark = p->mark; - _res = _raw; - } - p->mark = _resmark; - D(p->level--); - return _res; -} -static expr_ty -t_primary_raw(Parser *p) +// type_expressions: +// | ','.expression+ ',' '*' expression ',' '**' expression +// | ','.expression+ ',' '*' expression +// | ','.expression+ ',' '**' expression +// | '*' expression ',' '**' expression +// | '*' expression +// | '**' expression +// | ','.expression+ +static asdl_expr_seq* +type_expressions_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; - } - expr_ty _res = NULL; - int _mark = p->mark; - if (p->mark == p->fill && _PyPegen_fill_token(p) < 0) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - int _start_lineno = p->tokens[_mark]->lineno; - UNUSED(_start_lineno); // Only used by EXTRA macro - int _start_col_offset = p->tokens[_mark]->col_offset; - UNUSED(_start_col_offset); // Only used by EXTRA macro - { // t_primary '.' NAME &t_lookahead + } + asdl_expr_seq* _res = NULL; + int _mark = p->mark; + { // ','.expression+ ',' '*' expression ',' '**' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead")); + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); Token * _literal; - expr_ty a; + Token * _literal_1; + Token * _literal_2; + Token * _literal_3; + asdl_seq * a; expr_ty b; + expr_ty c; if ( - (a = t_primary_rule(p)) // t_primary + (a = _gather_132_rule(p)) // ','.expression+ && - (_literal = _PyPegen_expect_token(p, 23)) // token='.' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (b = _PyPegen_name_token(p)) // NAME + (_literal_1 = _PyPegen_expect_token(p, 16)) // token='*' && - _PyPegen_lookahead(1, t_lookahead_rule, p) + (b = expression_rule(p)) // expression + && + (_literal_2 = _PyPegen_expect_token(p, 12)) // token=',' + && + (_literal_3 = _PyPegen_expect_token(p, 35)) // token='**' + && + (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '.' NAME &t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Attribute ( a , b -> v . Name . id , Load , EXTRA ); + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_seq_append_to_end ( p , a , b ) ) , c ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17522,42 +17481,31 @@ t_primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '.' NAME &t_lookahead")); + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression ',' '**' expression")); } - { // t_primary '[' slices ']' &t_lookahead + { // ','.expression+ ',' '*' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression")); Token * _literal; Token * _literal_1; - expr_ty a; + asdl_seq * a; expr_ty b; if ( - (a = t_primary_rule(p)) // t_primary - && - (_literal = _PyPegen_expect_token(p, 9)) // token='[' + (a = _gather_134_rule(p)) // ','.expression+ && - (b = slices_rule(p)) // slices + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (_literal_1 = _PyPegen_expect_token(p, 10)) // token=']' + (_literal_1 = _PyPegen_expect_token(p, 16)) // token='*' && - _PyPegen_lookahead(1, t_lookahead_rule, p) + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Subscript ( a , b , Load , EXTRA ); + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '*' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17566,36 +17514,31 @@ t_primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '[' slices ']' &t_lookahead")); + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '*' expression")); } - { // t_primary genexp &t_lookahead + { // ','.expression+ ',' '**' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead")); - expr_ty a; + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression")); + Token * _literal; + Token * _literal_1; + asdl_seq * a; expr_ty b; if ( - (a = t_primary_rule(p)) // t_primary + (a = _gather_136_rule(p)) // ','.expression+ && - (b = genexp_rule(p)) // genexp + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - _PyPegen_lookahead(1, t_lookahead_rule, p) + (_literal_1 = _PyPegen_expect_token(p, 35)) // token='**' + && + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary genexp &t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { - D(p->level--); - return NULL; - } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( a , CHECK ( asdl_expr_seq * , ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , b ) ) , NULL , EXTRA ); + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+ ',' '**' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , a , b ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17604,42 +17547,61 @@ t_primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary genexp &t_lookahead")); + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+ ',' '**' expression")); } - { // t_primary '(' arguments? ')' &t_lookahead + { // '*' expression ',' '**' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression")); Token * _literal; Token * _literal_1; + Token * _literal_2; expr_ty a; - void *b; + expr_ty b; if ( - (a = t_primary_rule(p)) // t_primary + (_literal = _PyPegen_expect_token(p, 16)) // token='*' && - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (a = expression_rule(p)) // expression && - (b = arguments_rule(p), 1) // arguments? + (_literal_1 = _PyPegen_expect_token(p, 12)) // token=',' && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (_literal_2 = _PyPegen_expect_token(p, 35)) // token='**' && - _PyPegen_lookahead(1, t_lookahead_rule, p) + (b = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); - Token *_token = _PyPegen_get_last_nonnwhitespace_token(p); - if (_token == NULL) { + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression ',' '**' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_seq_append_to_end ( p , CHECK ( asdl_seq * , _PyPegen_singleton_seq ( p , a ) ) , b ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; D(p->level--); return NULL; } - int _end_lineno = _token->end_lineno; - UNUSED(_end_lineno); // Only used by EXTRA macro - int _end_col_offset = _token->end_col_offset; - UNUSED(_end_col_offset); // Only used by EXTRA macro - _res = _PyAST_Call ( a , ( b ) ? ( ( expr_ty ) b ) -> v . Call . args : NULL , ( b ) ? ( ( expr_ty ) b ) -> v . Call . keywords : NULL , EXTRA ); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression ',' '**' expression")); + } + { // '*' expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'*' expression")); + Token * _literal; + expr_ty a; + if ( + (_literal = _PyPegen_expect_token(p, 16)) // token='*' + && + (a = expression_rule(p)) // expression + ) + { + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'*' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -17648,23 +17610,48 @@ t_primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "t_primary '(' arguments? ')' &t_lookahead")); + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'*' expression")); } - { // atom &t_lookahead + { // '**' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_primary[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead")); + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'**' expression")); + Token * _literal; expr_ty a; if ( - (a = atom_rule(p)) // atom + (_literal = _PyPegen_expect_token(p, 35)) // token='**' && - _PyPegen_lookahead(1, t_lookahead_rule, p) + (a = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ t_primary[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "atom &t_lookahead")); + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'**' expression")); + _res = ( asdl_expr_seq * ) _PyPegen_singleton_seq ( p , a ); + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'**' expression")); + } + { // ','.expression+ + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> type_expressions[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','.expression+")); + asdl_expr_seq* a; + if ( + (a = (asdl_expr_seq*)_gather_138_rule(p)) // ','.expression+ + ) + { + D(fprintf(stderr, "%*c+ type_expressions[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','.expression+")); _res = a; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -17674,8 +17661,8 @@ t_primary_raw(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_primary[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "atom &t_lookahead")); + D(fprintf(stderr, "%*c%s type_expressions[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','.expression+")); } _res = NULL; done: @@ -17683,73 +17670,86 @@ t_primary_raw(Parser *p) return _res; } -// t_lookahead: '(' | '[' | '.' -static void * -t_lookahead_rule(Parser *p) +// func_type_comment: +// | NEWLINE TYPE_COMMENT &(NEWLINE INDENT) +// | invalid_double_type_comments +// | TYPE_COMMENT +static Token* +func_type_comment_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + Token* _res = NULL; int _mark = p->mark; - { // '(' + { // NEWLINE TYPE_COMMENT &(NEWLINE INDENT) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); - Token * _literal; + D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); + Token * newline_var; + Token * t; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + (t = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT' + && + _PyPegen_lookahead(1, _tmp_140_rule, p) ) { - D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); - _res = _literal; + D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); + _res = t; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); + D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE TYPE_COMMENT &(NEWLINE INDENT)")); } - { // '[' + if (p->call_invalid_rules) { // invalid_double_type_comments if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'['")); - Token * _literal; + D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments")); + void *invalid_double_type_comments_var; if ( - (_literal = _PyPegen_expect_token(p, 9)) // token='[' + (invalid_double_type_comments_var = invalid_double_type_comments_rule(p)) // invalid_double_type_comments ) { - D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'['")); - _res = _literal; + D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "invalid_double_type_comments")); + _res = invalid_double_type_comments_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'['")); + D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "invalid_double_type_comments")); } - { // '.' + { // TYPE_COMMENT if (p->error_indicator) { D(p->level--); return NULL; - } - D(fprintf(stderr, "%*c> t_lookahead[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); - Token * _literal; + } + D(fprintf(stderr, "%*c> func_type_comment[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT")); + Token * type_comment_var; if ( - (_literal = _PyPegen_expect_token(p, 23)) // token='.' + (type_comment_var = _PyPegen_expect_token(p, TYPE_COMMENT)) // token='TYPE_COMMENT' ) { - D(fprintf(stderr, "%*c+ t_lookahead[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); - _res = _literal; + D(fprintf(stderr, "%*c+ func_type_comment[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "TYPE_COMMENT")); + _res = type_comment_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s t_lookahead[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); + D(fprintf(stderr, "%*c%s func_type_comment[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "TYPE_COMMENT")); } _res = NULL; done: @@ -18087,7 +18087,7 @@ expression_without_invalid_rule(Parser *p) && (b = disjunction_rule(p)) // disjunction && - (_keyword_1 = _PyPegen_expect_token(p, 516)) // token='else' + (_keyword_1 = _PyPegen_expect_token(p, 518)) // token='else' && (c = expression_rule(p)) // expression ) @@ -19349,7 +19349,7 @@ invalid_with_item_rule(Parser *p) if ( (expression_var = expression_rule(p)) // expression && - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (a = expression_rule(p)) // expression && @@ -19399,7 +19399,7 @@ invalid_for_target_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' && (a = star_expressions_rule(p)) // star_expressions ) @@ -19574,7 +19574,7 @@ invalid_with_stmt_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' && (_gather_161_var = _gather_161_rule(p)) // ','.(expression ['as' star_target])+ && @@ -19607,7 +19607,7 @@ invalid_with_stmt_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && @@ -19662,7 +19662,7 @@ invalid_with_stmt_indent_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (a = _PyPegen_expect_token(p, 519)) // token='with' + (a = _PyPegen_expect_token(p, 521)) // token='with' && (_gather_165_var = _gather_165_rule(p)) // ','.(expression ['as' star_target])+ && @@ -19705,7 +19705,7 @@ invalid_with_stmt_indent_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (a = _PyPegen_expect_token(p, 519)) // token='with' + (a = _PyPegen_expect_token(p, 521)) // token='with' && (_literal = _PyPegen_expect_token(p, 7)) // token='(' && @@ -19850,7 +19850,7 @@ invalid_except_stmt_rule(Parser *p) expr_ty a; expr_ty expressions_var; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (_keyword = _PyPegen_expect_token(p, 523)) // token='except' && (a = expression_rule(p)) // expression && @@ -19888,7 +19888,7 @@ invalid_except_stmt_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 521)) // token='except' + (a = _PyPegen_expect_token(p, 523)) // token='except' && (expression_var = expression_rule(p)) // expression && @@ -19919,7 +19919,7 @@ invalid_except_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 521)) // token='except' + (a = _PyPegen_expect_token(p, 523)) // token='except' && (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) @@ -19964,7 +19964,7 @@ invalid_finally_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 522)) // token='finally' + (a = _PyPegen_expect_token(p, 524)) // token='finally' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20018,7 +20018,7 @@ invalid_except_stmt_indent_rule(Parser *p) expr_ty expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 521)) // token='except' + (a = _PyPegen_expect_token(p, 523)) // token='except' && (expression_var = expression_rule(p)) // expression && @@ -20054,7 +20054,7 @@ invalid_except_stmt_indent_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 521)) // token='except' + (a = _PyPegen_expect_token(p, 523)) // token='except' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20279,7 +20279,7 @@ invalid_as_pattern_rule(Parser *p) if ( (or_pattern_var = or_pattern_rule(p)) // or_pattern && - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (a = _PyPegen_expect_soft_keyword(p, "_")) // soft_keyword='"_"' ) @@ -20309,7 +20309,7 @@ invalid_as_pattern_rule(Parser *p) if ( (or_pattern_var = or_pattern_rule(p)) // or_pattern && - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && _PyPegen_lookahead_with_name(0, _PyPegen_name_token, p) && @@ -20541,7 +20541,7 @@ invalid_elif_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (_keyword = _PyPegen_expect_token(p, 515)) // token='elif' + (_keyword = _PyPegen_expect_token(p, 517)) // token='elif' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -20572,7 +20572,7 @@ invalid_elif_stmt_rule(Parser *p) expr_ty named_expression_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 515)) // token='elif' + (a = _PyPegen_expect_token(p, 517)) // token='elif' && (named_expression_var = named_expression_rule(p)) // named_expression && @@ -20623,7 +20623,7 @@ invalid_else_stmt_rule(Parser *p) Token * a; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 516)) // token='else' + (a = _PyPegen_expect_token(p, 518)) // token='else' && (_literal = _PyPegen_expect_token(p, 11)) // token=':' && @@ -20763,11 +20763,11 @@ invalid_for_stmt_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (a = _PyPegen_expect_token(p, 517)) // token='for' + (a = _PyPegen_expect_token(p, 519)) // token='for' && (star_targets_var = star_targets_rule(p)) // star_targets && - (_keyword = _PyPegen_expect_token(p, 518)) // token='in' + (_keyword = _PyPegen_expect_token(p, 520)) // token='in' && (star_expressions_var = star_expressions_rule(p)) // star_expressions && @@ -20830,7 +20830,7 @@ invalid_def_raw_rule(Parser *p) if ( (_opt_var = _PyPegen_expect_token(p, ASYNC), 1) // ASYNC? && - (a = _PyPegen_expect_token(p, 526)) // token='def' + (a = _PyPegen_expect_token(p, 516)) // token='def' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -20892,7 +20892,7 @@ invalid_class_def_raw_rule(Parser *p) expr_ty name_var; Token * newline_var; if ( - (a = _PyPegen_expect_token(p, 527)) // token='class' + (a = _PyPegen_expect_token(p, 515)) // token='class' && (name_var = _PyPegen_name_token(p)) // NAME && @@ -21266,9 +21266,9 @@ _loop0_2_rule(Parser *p) return _seq; } -// _loop0_4: ',' expression +// _loop1_3: statement static asdl_seq * -_loop0_4_rule(Parser *p) +_loop1_3_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -21287,18 +21287,89 @@ _loop0_4_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' expression + { // statement + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _loop1_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement")); + asdl_stmt_seq* statement_var; + while ( + (statement_var = statement_rule(p)) // statement + ) + { + _res = statement_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop1_3[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_3_type, _seq); + D(p->level--); + return _seq; +} + +// _loop0_5: ';' simple_stmt +static asdl_seq * +_loop0_5_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ';' simple_stmt if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _loop0_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt")); Token * _literal; - expr_ty elem; + stmt_ty elem; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 13)) // token=';' && - (elem = expression_rule(p)) // expression + (elem = simple_stmt_rule(p)) // simple_stmt ) { _res = elem; @@ -21323,8 +21394,8 @@ _loop0_4_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_4[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c%s _loop0_5[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -21336,14 +21407,14 @@ _loop0_4_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_4_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_5_type, _seq); D(p->level--); return _seq; } -// _gather_3: expression _loop0_4 +// _gather_4: simple_stmt _loop0_5 static asdl_seq * -_gather_3_rule(Parser *p) +_gather_4_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -21352,27 +21423,27 @@ _gather_3_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // expression _loop0_4 + { // simple_stmt _loop0_5 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_3[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_4")); - expr_ty elem; + D(fprintf(stderr, "%*c> _gather_4[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_5")); + stmt_ty elem; asdl_seq * seq; if ( - (elem = expression_rule(p)) // expression + (elem = simple_stmt_rule(p)) // simple_stmt && - (seq = _loop0_4_rule(p)) // _loop0_4 + (seq = _loop0_5_rule(p)) // _loop0_5 ) { - D(fprintf(stderr, "%*c+ _gather_3[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_4")); + D(fprintf(stderr, "%*c+ _gather_4[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_5")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_3[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_4")); + D(fprintf(stderr, "%*c%s _gather_4[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_5")); } _res = NULL; done: @@ -21380,113 +21451,238 @@ _gather_3_rule(Parser *p) return _res; } -// _loop0_6: ',' expression -static asdl_seq * -_loop0_6_rule(Parser *p) +// _tmp_6: 'import' | 'from' +static void * +_tmp_6_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); + { // 'import' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 513)) // token='import' + ) + { + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'")); + } + { // 'from' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 514)) // token='from' + ) + { + D(fprintf(stderr, "%*c+ _tmp_6[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_6[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_7: 'def' | '@' | ASYNC +static void * +_tmp_7_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { D(p->level--); return NULL; } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // ',' expression + void * _res = NULL; + int _mark = p->mark; + { // 'def' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 516)) // token='def' + ) + { + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'")); + } + { // '@' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_6[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); Token * _literal; - expr_ty elem; - while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = expression_rule(p)) // expression + if ( + (_literal = _PyPegen_expect_token(p, 49)) // token='@' ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); + } + { // ASYNC + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); + Token * async_var; + if ( + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + ) + { + D(fprintf(stderr, "%*c+ _tmp_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); + _res = async_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_7[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_8: 'class' | '@' +static void * +_tmp_8_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'class' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 515)) // token='class' + ) + { + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'")); + } + { // '@' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 49)) // token='@' + ) + { + D(fprintf(stderr, "%*c+ _tmp_8[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); + _res = _literal; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_6[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_8[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_6_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _gather_5: expression _loop0_6 -static asdl_seq * -_gather_5_rule(Parser *p) +// _tmp_9: 'with' | ASYNC +static void * +_tmp_9_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // expression _loop0_6 + { // 'with' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_5[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_6")); - expr_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); + Token * _keyword; if ( - (elem = expression_rule(p)) // expression - && - (seq = _loop0_6_rule(p)) // _loop0_6 + (_keyword = _PyPegen_expect_token(p, 521)) // token='with' ) { - D(fprintf(stderr, "%*c+ _gather_5[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_6")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); + _res = _keyword; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'")); + } + { // ASYNC + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); + Token * async_var; + if ( + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + ) + { + D(fprintf(stderr, "%*c+ _tmp_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); + _res = async_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_5[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_6")); + D(fprintf(stderr, "%*c%s _tmp_9[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); } _res = NULL; done: @@ -21494,113 +21690,98 @@ _gather_5_rule(Parser *p) return _res; } -// _loop0_8: ',' expression -static asdl_seq * -_loop0_8_rule(Parser *p) +// _tmp_10: 'for' | ASYNC +static void * +_tmp_10_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // ',' expression + { // 'for' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_8[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); - Token * _literal; - expr_ty elem; - while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = expression_rule(p)) // expression + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); + Token * _keyword; + if ( + (_keyword = _PyPegen_expect_token(p, 519)) // token='for' ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); + _res = _keyword; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_8[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'")); } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // ASYNC + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); + Token * async_var; + if ( + (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + ) + { + D(fprintf(stderr, "%*c+ _tmp_10[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); + _res = async_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_10[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_8_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _gather_7: expression _loop0_8 -static asdl_seq * -_gather_7_rule(Parser *p) +// _tmp_11: '=' annotated_rhs +static void * +_tmp_11_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // expression _loop0_8 + { // '=' annotated_rhs if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_7[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_8")); - expr_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + Token * _literal; + expr_ty d; if ( - (elem = expression_rule(p)) // expression + (_literal = _PyPegen_expect_token(p, 22)) // token='=' && - (seq = _loop0_8_rule(p)) // _loop0_8 + (d = annotated_rhs_rule(p)) // annotated_rhs ) { - D(fprintf(stderr, "%*c+ _gather_7[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_8")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_11[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + _res = d; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_7[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_8")); + D(fprintf(stderr, "%*c%s _tmp_11[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); } _res = NULL; done: @@ -21608,113 +21789,65 @@ _gather_7_rule(Parser *p) return _res; } -// _loop0_10: ',' expression -static asdl_seq * -_loop0_10_rule(Parser *p) +// _tmp_12: '(' single_target ')' | single_subscript_attribute_target +static void * +_tmp_12_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // ',' expression + { // '(' single_target ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_10[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); Token * _literal; - expr_ty elem; - while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + Token * _literal_1; + expr_ty b; + if ( + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (elem = expression_rule(p)) // expression + (b = single_target_rule(p)) // single_target + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - _res = elem; + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); + _res = b; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; - PyMem_Free(_children); D(p->level--); return NULL; } - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_10[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_10_type, _seq); - D(p->level--); - return _seq; -} - -// _gather_9: expression _loop0_10 -static asdl_seq * -_gather_9_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); } - asdl_seq * _res = NULL; - int _mark = p->mark; - { // expression _loop0_10 + { // single_subscript_attribute_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_9[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_10")); - expr_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + expr_ty single_subscript_attribute_target_var; if ( - (elem = expression_rule(p)) // expression - && - (seq = _loop0_10_rule(p)) // _loop0_10 + (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target ) { - D(fprintf(stderr, "%*c+ _gather_9[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_10")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); + _res = single_subscript_attribute_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_9[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_10")); + D(fprintf(stderr, "%*c%s _tmp_12[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); } _res = NULL; done: @@ -21722,80 +21855,53 @@ _gather_9_rule(Parser *p) return _res; } -// _loop1_11: statement -static asdl_seq * -_loop1_11_rule(Parser *p) +// _tmp_13: '=' annotated_rhs +static void * +_tmp_13_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // statement + { // '=' annotated_rhs if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_11[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "statement")); - asdl_stmt_seq* statement_var; - while ( - (statement_var = statement_rule(p)) // statement - ) - { - _res = statement_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; + D(fprintf(stderr, "%*c> _tmp_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + Token * _literal; + expr_ty d; + if ( + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + && + (d = annotated_rhs_rule(p)) // annotated_rhs + ) + { + D(fprintf(stderr, "%*c+ _tmp_13[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + _res = d; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; } - _children[_n++] = _res; - _mark = p->mark; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_11[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "statement")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_13[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_11_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_13: ';' simple_stmt +// _loop1_14: (star_targets '=') static asdl_seq * -_loop0_13_rule(Parser *p) +_loop1_14_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -21814,27 +21920,18 @@ _loop0_13_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ';' simple_stmt + { // (star_targets '=') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_13[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';' simple_stmt")); - Token * _literal; - stmt_ty elem; + D(fprintf(stderr, "%*c> _loop1_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); + void *_tmp_179_var; while ( - (_literal = _PyPegen_expect_token(p, 13)) // token=';' - && - (elem = simple_stmt_rule(p)) // simple_stmt + (_tmp_179_var = _tmp_179_rule(p)) // star_targets '=' ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = _tmp_179_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -21850,8 +21947,13 @@ _loop0_13_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_13[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';' simple_stmt")); + D(fprintf(stderr, "%*c%s _loop1_14[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -21863,43 +21965,59 @@ _loop0_13_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_13_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_14_type, _seq); D(p->level--); return _seq; } -// _gather_12: simple_stmt _loop0_13 -static asdl_seq * -_gather_12_rule(Parser *p) +// _tmp_15: yield_expr | star_expressions +static void * +_tmp_15_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // simple_stmt _loop0_13 + { // yield_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_12[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_13")); - stmt_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + expr_ty yield_expr_var; if ( - (elem = simple_stmt_rule(p)) // simple_stmt - && - (seq = _loop0_13_rule(p)) // _loop0_13 + (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _gather_12[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "simple_stmt _loop0_13")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + _res = yield_expr_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); + } + { // star_expressions + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + expr_ty star_expressions_var; + if ( + (star_expressions_var = star_expressions_rule(p)) // star_expressions + ) + { + D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_12[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "simple_stmt _loop0_13")); + D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; done: @@ -21907,9 +22025,9 @@ _gather_12_rule(Parser *p) return _res; } -// _tmp_14: 'import' | 'from' +// _tmp_16: yield_expr | star_expressions static void * -_tmp_14_rule(Parser *p) +_tmp_16_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -21918,43 +22036,43 @@ _tmp_14_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'import' + { // yield_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'import'")); - Token * _keyword; + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + expr_ty yield_expr_var; if ( - (_keyword = _PyPegen_expect_token(p, 513)) // token='import' + (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - D(fprintf(stderr, "%*c+ _tmp_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'import'")); - _res = _keyword; + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + _res = yield_expr_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_14[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'import'")); + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } - { // 'from' + { // star_expressions if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_14[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from'")); - Token * _keyword; + D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); + expr_ty star_expressions_var; if ( - (_keyword = _PyPegen_expect_token(p, 514)) // token='from' + (star_expressions_var = star_expressions_rule(p)) // star_expressions ) { - D(fprintf(stderr, "%*c+ _tmp_14[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from'")); - _res = _keyword; + D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); + _res = star_expressions_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_14[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from'")); + D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); } _res = NULL; done: @@ -21962,9 +22080,9 @@ _tmp_14_rule(Parser *p) return _res; } -// _tmp_15: 'def' | '@' | ASYNC +// _tmp_17: 'from' expression static void * -_tmp_15_rule(Parser *p) +_tmp_17_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -21973,62 +22091,146 @@ _tmp_15_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'def' + { // 'from' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression")); Token * _keyword; + expr_ty z; if ( - (_keyword = _PyPegen_expect_token(p, 526)) // token='def' + (_keyword = _PyPegen_expect_token(p, 514)) // token='from' + && + (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'def'")); - _res = _keyword; + D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' expression")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'def'")); + D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' expression")); } - { // '@' + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_19: ',' NAME +static asdl_seq * +_loop0_19_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _loop0_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 49)) // token='@' + expr_ty elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); - _res = _literal; - goto done; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c%s _loop0_19[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); } - { // ASYNC + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_19_type, _seq); + D(p->level--); + return _seq; +} + +// _gather_18: NAME _loop0_19 +static asdl_seq * +_gather_18_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // NAME _loop0_19 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_15[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); - Token * async_var; + D(fprintf(stderr, "%*c> _gather_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_19")); + expr_ty elem; + asdl_seq * seq; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + (elem = _PyPegen_name_token(p)) // NAME + && + (seq = _loop0_19_rule(p)) // _loop0_19 ) { - D(fprintf(stderr, "%*c+ _tmp_15[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); - _res = async_var; + D(fprintf(stderr, "%*c+ _gather_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_19")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_15[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); + D(fprintf(stderr, "%*c%s _gather_18[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_19")); } _res = NULL; done: @@ -22036,109 +22238,113 @@ _tmp_15_rule(Parser *p) return _res; } -// _tmp_16: 'class' | '@' -static void * -_tmp_16_rule(Parser *p) +// _loop0_21: ',' NAME +static asdl_seq * +_loop0_21_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // 'class' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'class'")); - Token * _keyword; - if ( - (_keyword = _PyPegen_expect_token(p, 527)) // token='class' - ) - { - D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'class'")); - _res = _keyword; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'class'")); + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - { // '@' + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_16[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c> _loop0_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 49)) // token='@' + expr_ty elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_16[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'@'")); - _res = _literal; - goto done; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_16[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'@'")); + D(fprintf(stderr, "%*c%s _loop0_21[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_21_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_17: 'with' | ASYNC -static void * -_tmp_17_rule(Parser *p) +// _gather_20: NAME _loop0_21 +static asdl_seq * +_gather_20_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - { // 'with' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'with'")); - Token * _keyword; - if ( - (_keyword = _PyPegen_expect_token(p, 519)) // token='with' - ) - { - D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'with'")); - _res = _keyword; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'with'")); - } - { // ASYNC + { // NAME _loop0_21 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_17[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); - Token * async_var; + D(fprintf(stderr, "%*c> _gather_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_21")); + expr_ty elem; + asdl_seq * seq; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + (elem = _PyPegen_name_token(p)) // NAME + && + (seq = _loop0_21_rule(p)) // _loop0_21 ) { - D(fprintf(stderr, "%*c+ _tmp_17[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); - _res = async_var; + D(fprintf(stderr, "%*c+ _gather_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_21")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_17[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); + D(fprintf(stderr, "%*c%s _gather_20[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_21")); } _res = NULL; done: @@ -22146,9 +22352,9 @@ _tmp_17_rule(Parser *p) return _res; } -// _tmp_18: 'for' | ASYNC +// _tmp_22: ';' | NEWLINE static void * -_tmp_18_rule(Parser *p) +_tmp_22_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22157,43 +22363,43 @@ _tmp_18_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'for' + { // ';' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'for'")); - Token * _keyword; + D(fprintf(stderr, "%*c> _tmp_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); + Token * _literal; if ( - (_keyword = _PyPegen_expect_token(p, 517)) // token='for' + (_literal = _PyPegen_expect_token(p, 13)) // token=';' ) { - D(fprintf(stderr, "%*c+ _tmp_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'for'")); - _res = _keyword; + D(fprintf(stderr, "%*c+ _tmp_22[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_18[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'for'")); + D(fprintf(stderr, "%*c%s _tmp_22[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'")); } - { // ASYNC + { // NEWLINE if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_18[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "ASYNC")); - Token * async_var; + D(fprintf(stderr, "%*c> _tmp_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + Token * newline_var; if ( - (async_var = _PyPegen_expect_token(p, ASYNC)) // token='ASYNC' + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' ) { - D(fprintf(stderr, "%*c+ _tmp_18[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "ASYNC")); - _res = async_var; + D(fprintf(stderr, "%*c+ _tmp_22[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); + _res = newline_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_18[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "ASYNC")); + D(fprintf(stderr, "%*c%s _tmp_22[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); } _res = NULL; done: @@ -22201,9 +22407,9 @@ _tmp_18_rule(Parser *p) return _res; } -// _tmp_19: '=' annotated_rhs +// _tmp_23: ',' expression static void * -_tmp_19_rule(Parser *p) +_tmp_23_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22212,22 +22418,22 @@ _tmp_19_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // '=' annotated_rhs + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_19[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; - expr_ty d; + expr_ty z; if ( - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (d = annotated_rhs_rule(p)) // annotated_rhs + (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_19[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); - _res = d; + D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -22236,8 +22442,8 @@ _tmp_19_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_19[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; done: @@ -22245,119 +22451,146 @@ _tmp_19_rule(Parser *p) return _res; } -// _tmp_20: '(' single_target ')' | single_subscript_attribute_target -static void * -_tmp_20_rule(Parser *p) +// _loop0_24: ('.' | '...') +static asdl_seq * +_loop0_24_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // '(' single_target ')' + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ('.' | '...') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); - Token * _literal; - Token * _literal_1; - expr_ty b; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (b = single_target_rule(p)) // single_target - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + D(fprintf(stderr, "%*c> _loop0_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_180_var; + while ( + (_tmp_180_var = _tmp_180_rule(p)) // '.' | '...' ) { - D(fprintf(stderr, "%*c+ _tmp_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' single_target ')'")); - _res = b; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; + _res = _tmp_180_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; } - goto done; + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_20[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' single_target ')'")); + D(fprintf(stderr, "%*c%s _loop0_24[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } - { // single_subscript_attribute_target - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_20[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); - expr_ty single_subscript_attribute_target_var; - if ( - (single_subscript_attribute_target_var = single_subscript_attribute_target_rule(p)) // single_subscript_attribute_target - ) - { - D(fprintf(stderr, "%*c+ _tmp_20[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "single_subscript_attribute_target")); - _res = single_subscript_attribute_target_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_20[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "single_subscript_attribute_target")); + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - _res = NULL; - done: + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_24_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_21: '=' annotated_rhs -static void * -_tmp_21_rule(Parser *p) +// _loop1_25: ('.' | '...') +static asdl_seq * +_loop1_25_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // '=' annotated_rhs + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ('.' | '...') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_21[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); - Token * _literal; - expr_ty d; - if ( - (_literal = _PyPegen_expect_token(p, 22)) // token='=' - && - (d = annotated_rhs_rule(p)) // annotated_rhs + D(fprintf(stderr, "%*c> _loop1_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); + void *_tmp_181_var; + while ( + (_tmp_181_var = _tmp_181_rule(p)) // '.' | '...' ) { - D(fprintf(stderr, "%*c+ _tmp_21[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'=' annotated_rhs")); - _res = d; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; + _res = _tmp_181_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; } - goto done; + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_21[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'=' annotated_rhs")); + D(fprintf(stderr, "%*c%s _loop1_25[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); } - _res = NULL; - done: + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_25_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop1_22: (star_targets '=') +// _loop0_27: ',' import_from_as_name static asdl_seq * -_loop1_22_rule(Parser *p) +_loop0_27_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22376,18 +22609,27 @@ _loop1_22_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // (star_targets '=') + { // ',' import_from_as_name if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_22[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(star_targets '=')")); - void *_tmp_179_var; + D(fprintf(stderr, "%*c> _loop0_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); + Token * _literal; + alias_ty elem; while ( - (_tmp_179_var = _tmp_179_rule(p)) // star_targets '=' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = import_from_as_name_rule(p)) // import_from_as_name ) { - _res = _tmp_179_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22403,13 +22645,8 @@ _loop1_22_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_22[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(star_targets '=')")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_27[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -22421,59 +22658,43 @@ _loop1_22_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_22_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_27_type, _seq); D(p->level--); return _seq; } -// _tmp_23: yield_expr | star_expressions -static void * -_tmp_23_rule(Parser *p) +// _gather_26: import_from_as_name _loop0_27 +static asdl_seq * +_gather_26_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - { // yield_expr - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); - expr_ty yield_expr_var; - if ( - (yield_expr_var = yield_expr_rule(p)) // yield_expr - ) - { - D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); - _res = yield_expr_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); - } - { // star_expressions + { // import_from_as_name _loop0_27 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_23[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); - expr_ty star_expressions_var; + D(fprintf(stderr, "%*c> _gather_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_27")); + alias_ty elem; + asdl_seq * seq; if ( - (star_expressions_var = star_expressions_rule(p)) // star_expressions + (elem = import_from_as_name_rule(p)) // import_from_as_name + && + (seq = _loop0_27_rule(p)) // _loop0_27 ) { - D(fprintf(stderr, "%*c+ _tmp_23[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); - _res = star_expressions_var; + D(fprintf(stderr, "%*c+ _gather_26[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_27")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_23[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c%s _gather_26[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_27")); } _res = NULL; done: @@ -22481,9 +22702,9 @@ _tmp_23_rule(Parser *p) return _res; } -// _tmp_24: yield_expr | star_expressions +// _tmp_28: 'as' NAME static void * -_tmp_24_rule(Parser *p) +_tmp_28_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22492,43 +22713,32 @@ _tmp_24_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // yield_expr - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); - expr_ty yield_expr_var; - if ( - (yield_expr_var = yield_expr_rule(p)) // yield_expr - ) - { - D(fprintf(stderr, "%*c+ _tmp_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); - _res = yield_expr_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_24[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); - } - { // star_expressions + { // 'as' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_24[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_expressions")); - expr_ty star_expressions_var; + D(fprintf(stderr, "%*c> _tmp_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty z; if ( - (star_expressions_var = star_expressions_rule(p)) // star_expressions + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' + && + (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _tmp_24[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_expressions")); - _res = star_expressions_var; + D(fprintf(stderr, "%*c+ _tmp_28[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_24[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_expressions")); + D(fprintf(stderr, "%*c%s _tmp_28[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; done: @@ -22536,9 +22746,9 @@ _tmp_24_rule(Parser *p) return _res; } -// _loop0_26: ',' NAME +// _loop0_30: ',' dotted_as_name static asdl_seq * -_loop0_26_rule(Parser *p) +_loop0_30_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22557,18 +22767,18 @@ _loop0_26_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' NAME + { // ',' dotted_as_name if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_26[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c> _loop0_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); Token * _literal; - expr_ty elem; + alias_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _PyPegen_name_token(p)) // NAME + (elem = dotted_as_name_rule(p)) // dotted_as_name ) { _res = elem; @@ -22593,8 +22803,8 @@ _loop0_26_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_26[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c%s _loop0_30[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -22606,14 +22816,14 @@ _loop0_26_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_26_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_30_type, _seq); D(p->level--); return _seq; } -// _gather_25: NAME _loop0_26 +// _gather_29: dotted_as_name _loop0_30 static asdl_seq * -_gather_25_rule(Parser *p) +_gather_29_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22622,27 +22832,71 @@ _gather_25_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // NAME _loop0_26 + { // dotted_as_name _loop0_30 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_25[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_26")); - expr_ty elem; + D(fprintf(stderr, "%*c> _gather_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_30")); + alias_ty elem; asdl_seq * seq; if ( - (elem = _PyPegen_name_token(p)) // NAME + (elem = dotted_as_name_rule(p)) // dotted_as_name && - (seq = _loop0_26_rule(p)) // _loop0_26 + (seq = _loop0_30_rule(p)) // _loop0_30 ) { - D(fprintf(stderr, "%*c+ _gather_25[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_26")); + D(fprintf(stderr, "%*c+ _gather_29[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_30")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_25[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_26")); + D(fprintf(stderr, "%*c%s _gather_29[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_30")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_31: 'as' NAME +static void * +_tmp_31_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // 'as' NAME + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty z; + if ( + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' + && + (z = _PyPegen_name_token(p)) // NAME + ) + { + D(fprintf(stderr, "%*c+ _tmp_31[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_31[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); } _res = NULL; done: @@ -22650,9 +22904,9 @@ _gather_25_rule(Parser *p) return _res; } -// _loop0_28: ',' NAME +// _loop1_32: ('@' named_expression NEWLINE) static asdl_seq * -_loop0_28_rule(Parser *p) +_loop1_32_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22671,27 +22925,18 @@ _loop0_28_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' NAME + { // ('@' named_expression NEWLINE) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_28[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' NAME")); - Token * _literal; - expr_ty elem; + D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); + void *_tmp_182_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = _PyPegen_name_token(p)) // NAME + (_tmp_182_var = _tmp_182_rule(p)) // '@' named_expression NEWLINE ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = _tmp_182_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22707,8 +22952,13 @@ _loop0_28_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_28[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' NAME")); + D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -22720,43 +22970,51 @@ _loop0_28_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_28_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_32_type, _seq); D(p->level--); return _seq; } -// _gather_27: NAME _loop0_28 -static asdl_seq * -_gather_27_rule(Parser *p) +// _tmp_33: '(' arguments? ')' +static void * +_tmp_33_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // NAME _loop0_28 + { // '(' arguments? ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_27[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NAME _loop0_28")); - expr_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + Token * _literal; + Token * _literal_1; + void *z; if ( - (elem = _PyPegen_name_token(p)) // NAME + (_literal = _PyPegen_expect_token(p, 7)) // token='(' && - (seq = _loop0_28_rule(p)) // _loop0_28 + (z = arguments_rule(p), 1) // arguments? + && + (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _gather_27[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NAME _loop0_28")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_33[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_27[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NAME _loop0_28")); + D(fprintf(stderr, "%*c%s _tmp_33[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); } _res = NULL; done: @@ -22764,9 +23022,9 @@ _gather_27_rule(Parser *p) return _res; } -// _tmp_29: ',' expression +// _tmp_34: '->' expression static void * -_tmp_29_rule(Parser *p) +_tmp_34_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22775,21 +23033,21 @@ _tmp_29_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ',' expression + { // '->' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_29[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; expr_ty z; if ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 51)) // token='->' && (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_29[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_34[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); _res = z; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -22799,8 +23057,8 @@ _tmp_29_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_29[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c%s _tmp_34[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; done: @@ -22808,9 +23066,9 @@ _tmp_29_rule(Parser *p) return _res; } -// _tmp_30: ';' | NEWLINE +// _tmp_35: '->' expression static void * -_tmp_30_rule(Parser *p) +_tmp_35_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22819,43 +23077,32 @@ _tmp_30_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ';' + { // '->' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "';'")); + D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); Token * _literal; + expr_ty z; if ( - (_literal = _PyPegen_expect_token(p, 13)) // token=';' - ) - { - D(fprintf(stderr, "%*c+ _tmp_30[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "';'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_30[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "';'")); - } - { // NEWLINE - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_30[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE")); - Token * newline_var; - if ( - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + (_literal = _PyPegen_expect_token(p, 51)) // token='->' + && + (z = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_30[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE")); - _res = newline_var; + D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_30[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE")); + D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); } _res = NULL; done: @@ -22863,9 +23110,9 @@ _tmp_30_rule(Parser *p) return _res; } -// _loop0_31: ('.' | '...') +// _loop0_36: param_no_default static asdl_seq * -_loop0_31_rule(Parser *p) +_loop0_36_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22884,18 +23131,18 @@ _loop0_31_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('.' | '...') + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_31[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_180_var; + D(fprintf(stderr, "%*c> _loop0_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; while ( - (_tmp_180_var = _tmp_180_rule(p)) // '.' | '...' + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - _res = _tmp_180_var; + _res = param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22911,8 +23158,8 @@ _loop0_31_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_31[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); + D(fprintf(stderr, "%*c%s _loop0_36[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -22924,14 +23171,14 @@ _loop0_31_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_31_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_36_type, _seq); D(p->level--); return _seq; } -// _loop1_32: ('.' | '...') +// _loop0_37: param_with_default static asdl_seq * -_loop1_32_rule(Parser *p) +_loop0_37_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -22950,18 +23197,18 @@ _loop1_32_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('.' | '...') + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_32[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('.' | '...')")); - void *_tmp_181_var; + D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; while ( - (_tmp_181_var = _tmp_181_rule(p)) // '.' | '...' + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - _res = _tmp_181_var; + _res = param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -22977,13 +23224,8 @@ _loop1_32_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_32[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('.' | '...')")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_37[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -22995,14 +23237,14 @@ _loop1_32_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_32_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_37_type, _seq); D(p->level--); return _seq; } -// _loop0_34: ',' import_from_as_name +// _loop0_38: param_with_default static asdl_seq * -_loop0_34_rule(Parser *p) +_loop0_38_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23021,27 +23263,18 @@ _loop0_34_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' import_from_as_name + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_34[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' import_from_as_name")); - Token * _literal; - alias_ty elem; + D(fprintf(stderr, "%*c> _loop0_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = import_from_as_name_rule(p)) // import_from_as_name + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23057,8 +23290,8 @@ _loop0_34_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_34[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' import_from_as_name")); + D(fprintf(stderr, "%*c%s _loop0_38[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23070,97 +23303,14 @@ _loop0_34_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_34_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_38_type, _seq); D(p->level--); return _seq; } -// _gather_33: import_from_as_name _loop0_34 -static asdl_seq * -_gather_33_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_seq * _res = NULL; - int _mark = p->mark; - { // import_from_as_name _loop0_34 - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _gather_33[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_34")); - alias_ty elem; - asdl_seq * seq; - if ( - (elem = import_from_as_name_rule(p)) // import_from_as_name - && - (seq = _loop0_34_rule(p)) // _loop0_34 - ) - { - D(fprintf(stderr, "%*c+ _gather_33[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "import_from_as_name _loop0_34")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_33[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "import_from_as_name _loop0_34")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_35: 'as' NAME -static void * -_tmp_35_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // 'as' NAME - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_35[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - Token * _keyword; - expr_ty z; - if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' - && - (z = _PyPegen_name_token(p)) // NAME - ) - { - D(fprintf(stderr, "%*c+ _tmp_35[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_35[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _loop0_37: ',' dotted_as_name +// _loop1_39: param_no_default static asdl_seq * -_loop0_37_rule(Parser *p) +_loop1_39_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23179,27 +23329,18 @@ _loop0_37_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' dotted_as_name + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_37[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' dotted_as_name")); - Token * _literal; - alias_ty elem; + D(fprintf(stderr, "%*c> _loop1_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = dotted_as_name_rule(p)) // dotted_as_name + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23215,8 +23356,13 @@ _loop0_37_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_37[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' dotted_as_name")); + D(fprintf(stderr, "%*c%s _loop1_39[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23228,95 +23374,12 @@ _loop0_37_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_37_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_39_type, _seq); D(p->level--); return _seq; } -// _gather_36: dotted_as_name _loop0_37 -static asdl_seq * -_gather_36_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_seq * _res = NULL; - int _mark = p->mark; - { // dotted_as_name _loop0_37 - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _gather_36[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_37")); - alias_ty elem; - asdl_seq * seq; - if ( - (elem = dotted_as_name_rule(p)) // dotted_as_name - && - (seq = _loop0_37_rule(p)) // _loop0_37 - ) - { - D(fprintf(stderr, "%*c+ _gather_36[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dotted_as_name _loop0_37")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_36[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dotted_as_name _loop0_37")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_38: 'as' NAME -static void * -_tmp_38_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // 'as' NAME - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_38[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - Token * _keyword; - expr_ty z; - if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' - && - (z = _PyPegen_name_token(p)) // NAME - ) - { - D(fprintf(stderr, "%*c+ _tmp_38[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_38[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _loop0_40: ',' with_item +// _loop0_40: param_with_default static asdl_seq * _loop0_40_rule(Parser *p) { @@ -23337,27 +23400,18 @@ _loop0_40_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' with_item + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); - Token * _literal; - withitem_ty elem; + D(fprintf(stderr, "%*c> _loop0_40[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = with_item_rule(p)) // with_item + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23374,7 +23428,7 @@ _loop0_40_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_40[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23391,48 +23445,80 @@ _loop0_40_rule(Parser *p) return _seq; } -// _gather_39: with_item _loop0_40 +// _loop1_41: param_with_default static asdl_seq * -_gather_39_rule(Parser *p) +_loop1_41_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // with_item _loop0_40 + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_39[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_40")); - withitem_ty elem; - asdl_seq * seq; - if ( - (elem = with_item_rule(p)) // with_item - && - (seq = _loop0_40_rule(p)) // _loop0_40 + D(fprintf(stderr, "%*c> _loop1_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; + while ( + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - D(fprintf(stderr, "%*c+ _gather_39[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_40")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; + _res = param_with_default_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_39[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_40")); + D(fprintf(stderr, "%*c%s _loop1_41[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - _res = NULL; - done: + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_41_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop0_42: ',' with_item +// _loop1_42: param_no_default static asdl_seq * -_loop0_42_rule(Parser *p) +_loop1_42_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23451,27 +23537,18 @@ _loop0_42_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' with_item + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); - Token * _literal; - withitem_ty elem; + D(fprintf(stderr, "%*c> _loop1_42[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = with_item_rule(p)) // with_item + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23487,8 +23564,13 @@ _loop0_42_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_42[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c%s _loop1_42[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23500,51 +23582,83 @@ _loop0_42_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_42_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_42_type, _seq); D(p->level--); return _seq; } -// _gather_41: with_item _loop0_42 +// _loop1_43: param_no_default static asdl_seq * -_gather_41_rule(Parser *p) +_loop1_43_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // with_item _loop0_42 + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_41[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_42")); - withitem_ty elem; - asdl_seq * seq; - if ( - (elem = with_item_rule(p)) // with_item - && - (seq = _loop0_42_rule(p)) // _loop0_42 + D(fprintf(stderr, "%*c> _loop1_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; + while ( + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _gather_41[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_42")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; + _res = param_no_default_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_41[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_42")); + D(fprintf(stderr, "%*c%s _loop1_43[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } - _res = NULL; - done: + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_43_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop0_44: ',' with_item +// _loop0_44: param_no_default static asdl_seq * _loop0_44_rule(Parser *p) { @@ -23565,27 +23679,18 @@ _loop0_44_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' with_item + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); - Token * _literal; - withitem_ty elem; + D(fprintf(stderr, "%*c> _loop0_44[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = with_item_rule(p)) // with_item + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23602,7 +23707,7 @@ _loop0_44_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_44[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23619,48 +23724,9 @@ _loop0_44_rule(Parser *p) return _seq; } -// _gather_43: with_item _loop0_44 -static asdl_seq * -_gather_43_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - asdl_seq * _res = NULL; - int _mark = p->mark; - { // with_item _loop0_44 - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _gather_43[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_44")); - withitem_ty elem; - asdl_seq * seq; - if ( - (elem = with_item_rule(p)) // with_item - && - (seq = _loop0_44_rule(p)) // _loop0_44 - ) - { - D(fprintf(stderr, "%*c+ _gather_43[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_44")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_43[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_44")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _loop0_46: ',' with_item +// _loop1_45: param_with_default static asdl_seq * -_loop0_46_rule(Parser *p) +_loop1_45_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23679,27 +23745,18 @@ _loop0_46_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' with_item + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); - Token * _literal; - withitem_ty elem; + D(fprintf(stderr, "%*c> _loop1_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = with_item_rule(p)) // with_item + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23715,8 +23772,13 @@ _loop0_46_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); + D(fprintf(stderr, "%*c%s _loop1_45[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -23728,127 +23790,80 @@ _loop0_46_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_46_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_45_type, _seq); D(p->level--); return _seq; } -// _gather_45: with_item _loop0_46 +// _loop0_46: param_no_default static asdl_seq * -_gather_45_rule(Parser *p) +_loop0_46_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // with_item _loop0_46 - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _gather_45[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_46")); - withitem_ty elem; - asdl_seq * seq; - if ( - (elem = with_item_rule(p)) // with_item - && - (seq = _loop0_46_rule(p)) // _loop0_46 - ) - { - D(fprintf(stderr, "%*c+ _gather_45[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_46")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_45[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_46")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_47: ',' | ')' | ':' -static void * -_tmp_47_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); D(p->level--); return NULL; } - void * _res = NULL; - int _mark = p->mark; - { // ',' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - ) - { - D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); - } - { // ')' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 8)) // token=')' - ) - { - D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); - } - { // ':' + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 11)) // token=':' + D(fprintf(stderr, "%*c> _loop0_46[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); + arg_ty param_no_default_var; + while ( + (param_no_default_var = param_no_default_rule(p)) // param_no_default ) { - D(fprintf(stderr, "%*c+ _tmp_47[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); - _res = _literal; - goto done; + _res = param_no_default_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_47[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); + D(fprintf(stderr, "%*c%s _loop0_46[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_46_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop1_48: except_block +// _loop1_47: param_with_default static asdl_seq * -_loop1_48_rule(Parser *p) +_loop1_47_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23867,18 +23882,18 @@ _loop1_48_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // except_block + { // param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); - excepthandler_ty except_block_var; + D(fprintf(stderr, "%*c> _loop1_47[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); + NameDefaultPair* param_with_default_var; while ( - (except_block_var = except_block_rule(p)) // except_block + (param_with_default_var = param_with_default_rule(p)) // param_with_default ) { - _res = except_block_var; + _res = param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -23894,8 +23909,8 @@ _loop1_48_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_48[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); + D(fprintf(stderr, "%*c%s _loop1_47[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -23912,58 +23927,80 @@ _loop1_48_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_48_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_47_type, _seq); D(p->level--); return _seq; } -// _tmp_49: 'as' NAME -static void * -_tmp_49_rule(Parser *p) +// _loop0_48: param_maybe_default +static asdl_seq * +_loop0_48_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // 'as' NAME + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // param_maybe_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - Token * _keyword; - expr_ty z; - if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' - && - (z = _PyPegen_name_token(p)) // NAME + D(fprintf(stderr, "%*c> _loop0_48[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + NameDefaultPair* param_maybe_default_var; + while ( + (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default ) { - D(fprintf(stderr, "%*c+ _tmp_49[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; + _res = param_maybe_default_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; } - goto done; + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_49[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + D(fprintf(stderr, "%*c%s _loop0_48[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_48_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop1_50: case_block +// _loop1_49: param_maybe_default static asdl_seq * -_loop1_50_rule(Parser *p) +_loop1_49_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -23982,18 +24019,18 @@ _loop1_50_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // case_block + { // param_maybe_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); - match_case_ty case_block_var; + D(fprintf(stderr, "%*c> _loop1_49[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); + NameDefaultPair* param_maybe_default_var; while ( - (case_block_var = case_block_rule(p)) // case_block + (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default ) { - _res = case_block_var; + _res = param_maybe_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24009,8 +24046,8 @@ _loop1_50_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_50[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block")); + D(fprintf(stderr, "%*c%s _loop1_49[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -24027,14 +24064,14 @@ _loop1_50_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_50_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_49_type, _seq); D(p->level--); return _seq; } -// _loop0_52: '|' closed_pattern +// _loop0_51: ',' with_item static asdl_seq * -_loop0_52_rule(Parser *p) +_loop0_51_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24053,18 +24090,18 @@ _loop0_52_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // '|' closed_pattern + { // ',' with_item if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); + D(fprintf(stderr, "%*c> _loop0_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; - pattern_ty elem; + withitem_ty elem; while ( - (_literal = _PyPegen_expect_token(p, 18)) // token='|' + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = closed_pattern_rule(p)) // closed_pattern + (elem = with_item_rule(p)) // with_item ) { _res = elem; @@ -24089,8 +24126,8 @@ _loop0_52_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_52[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern")); + D(fprintf(stderr, "%*c%s _loop0_51[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -24102,14 +24139,14 @@ _loop0_52_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_52_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_51_type, _seq); D(p->level--); return _seq; } -// _gather_51: closed_pattern _loop0_52 +// _gather_50: with_item _loop0_51 static asdl_seq * -_gather_51_rule(Parser *p) +_gather_50_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24118,82 +24155,27 @@ _gather_51_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // closed_pattern _loop0_52 + { // with_item _loop0_51 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_51[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_52")); - pattern_ty elem; + D(fprintf(stderr, "%*c> _gather_50[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_51")); + withitem_ty elem; asdl_seq * seq; if ( - (elem = closed_pattern_rule(p)) // closed_pattern + (elem = with_item_rule(p)) // with_item && - (seq = _loop0_52_rule(p)) // _loop0_52 + (seq = _loop0_51_rule(p)) // _loop0_51 ) { - D(fprintf(stderr, "%*c+ _gather_51[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_52")); + D(fprintf(stderr, "%*c+ _gather_50[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_51")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_51[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_52")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_53: '+' | '-' -static void * -_tmp_53_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // '+' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 14)) // token='+' - ) - { - D(fprintf(stderr, "%*c+ _tmp_53[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_53[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); - } - { // '-' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' - ) - { - D(fprintf(stderr, "%*c+ _tmp_53[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_53[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); + D(fprintf(stderr, "%*c%s _gather_50[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_51")); } _res = NULL; done: @@ -24201,202 +24183,113 @@ _tmp_53_rule(Parser *p) return _res; } -// _tmp_54: '+' | '-' -static void * -_tmp_54_rule(Parser *p) +// _loop0_53: ',' with_item +static asdl_seq * +_loop0_53_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // '+' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 14)) // token='+' - ) - { - D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); - } - { // '-' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 15)) // token='-' - ) - { - D(fprintf(stderr, "%*c+ _tmp_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_54[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_55: '.' | '(' | '=' -static void * -_tmp_55_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); D(p->level--); return NULL; } - void * _res = NULL; - int _mark = p->mark; - { // '.' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 23)) // token='.' - ) - { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); - } - { // '(' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - ) - { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); - } - { // '=' + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ',' with_item if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c> _loop0_53[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + withitem_ty elem; + while ( + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = with_item_rule(p)) // with_item ) { - D(fprintf(stderr, "%*c+ _tmp_55[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); - _res = _literal; - goto done; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_55[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c%s _loop0_53[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_53_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_56: '.' | '(' | '=' -static void * -_tmp_56_rule(Parser *p) +// _gather_52: with_item _loop0_53 +static asdl_seq * +_gather_52_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - { // '.' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 23)) // token='.' - ) - { - D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); - } - { // '(' - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); - Token * _literal; - if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - ) - { - D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); - _res = _literal; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); - } - { // '=' + { // with_item _loop0_53 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); - Token * _literal; + D(fprintf(stderr, "%*c> _gather_52[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_53")); + withitem_ty elem; + asdl_seq * seq; if ( - (_literal = _PyPegen_expect_token(p, 22)) // token='=' + (elem = with_item_rule(p)) // with_item + && + (seq = _loop0_53_rule(p)) // _loop0_53 ) { - D(fprintf(stderr, "%*c+ _tmp_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); - _res = _literal; + D(fprintf(stderr, "%*c+ _gather_52[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_53")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_56[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); + D(fprintf(stderr, "%*c%s _gather_52[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_53")); } _res = NULL; done: @@ -24404,9 +24297,9 @@ _tmp_56_rule(Parser *p) return _res; } -// _loop0_58: ',' maybe_star_pattern +// _loop0_55: ',' with_item static asdl_seq * -_loop0_58_rule(Parser *p) +_loop0_55_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24425,18 +24318,18 @@ _loop0_58_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' maybe_star_pattern + { // ',' with_item if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); + D(fprintf(stderr, "%*c> _loop0_55[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; - pattern_ty elem; + withitem_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern + (elem = with_item_rule(p)) // with_item ) { _res = elem; @@ -24461,8 +24354,8 @@ _loop0_58_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_58[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern")); + D(fprintf(stderr, "%*c%s _loop0_55[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -24474,14 +24367,14 @@ _loop0_58_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_58_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_55_type, _seq); D(p->level--); return _seq; } -// _gather_57: maybe_star_pattern _loop0_58 +// _gather_54: with_item _loop0_55 static asdl_seq * -_gather_57_rule(Parser *p) +_gather_54_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24490,27 +24383,27 @@ _gather_57_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // maybe_star_pattern _loop0_58 + { // with_item _loop0_55 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_58")); - pattern_ty elem; + D(fprintf(stderr, "%*c> _gather_54[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_55")); + withitem_ty elem; asdl_seq * seq; if ( - (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern + (elem = with_item_rule(p)) // with_item && - (seq = _loop0_58_rule(p)) // _loop0_58 + (seq = _loop0_55_rule(p)) // _loop0_55 ) { - D(fprintf(stderr, "%*c+ _gather_57[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_58")); + D(fprintf(stderr, "%*c+ _gather_54[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_55")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_57[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_58")); + D(fprintf(stderr, "%*c%s _gather_54[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_55")); } _res = NULL; done: @@ -24518,9 +24411,9 @@ _gather_57_rule(Parser *p) return _res; } -// _loop0_60: ',' key_value_pattern +// _loop0_57: ',' with_item static asdl_seq * -_loop0_60_rule(Parser *p) +_loop0_57_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24539,18 +24432,18 @@ _loop0_60_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' key_value_pattern + { // ',' with_item if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); + D(fprintf(stderr, "%*c> _loop0_57[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' with_item")); Token * _literal; - KeyPatternPair* elem; + withitem_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = key_value_pattern_rule(p)) // key_value_pattern + (elem = with_item_rule(p)) // with_item ) { _res = elem; @@ -24575,8 +24468,8 @@ _loop0_60_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_60[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern")); + D(fprintf(stderr, "%*c%s _loop0_57[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' with_item")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -24588,14 +24481,14 @@ _loop0_60_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_60_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_57_type, _seq); D(p->level--); return _seq; } -// _gather_59: key_value_pattern _loop0_60 +// _gather_56: with_item _loop0_57 static asdl_seq * -_gather_59_rule(Parser *p) +_gather_56_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24604,27 +24497,27 @@ _gather_59_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // key_value_pattern _loop0_60 + { // with_item _loop0_57 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_60")); - KeyPatternPair* elem; + D(fprintf(stderr, "%*c> _gather_56[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "with_item _loop0_57")); + withitem_ty elem; asdl_seq * seq; if ( - (elem = key_value_pattern_rule(p)) // key_value_pattern + (elem = with_item_rule(p)) // with_item && - (seq = _loop0_60_rule(p)) // _loop0_60 + (seq = _loop0_57_rule(p)) // _loop0_57 ) { - D(fprintf(stderr, "%*c+ _gather_59[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_60")); + D(fprintf(stderr, "%*c+ _gather_56[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "with_item _loop0_57")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_59[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_60")); + D(fprintf(stderr, "%*c%s _gather_56[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "with_item _loop0_57")); } _res = NULL; done: @@ -24632,9 +24525,9 @@ _gather_59_rule(Parser *p) return _res; } -// _tmp_61: literal_expr | attr +// _tmp_58: ',' | ')' | ':' static void * -_tmp_61_rule(Parser *p) +_tmp_58_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24643,43 +24536,62 @@ _tmp_61_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // literal_expr + { // ',' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); - expr_ty literal_expr_var; + D(fprintf(stderr, "%*c> _tmp_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "','")); + Token * _literal; if ( - (literal_expr_var = literal_expr_rule(p)) // literal_expr + (_literal = _PyPegen_expect_token(p, 12)) // token=',' ) { - D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); - _res = literal_expr_var; + D(fprintf(stderr, "%*c+ _tmp_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "','")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_61[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr")); + D(fprintf(stderr, "%*c%s _tmp_58[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "','")); } - { // attr + { // ')' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); - expr_ty attr_var; + D(fprintf(stderr, "%*c> _tmp_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "')'")); + Token * _literal; if ( - (attr_var = attr_rule(p)) // attr + (_literal = _PyPegen_expect_token(p, 8)) // token=')' ) { - D(fprintf(stderr, "%*c+ _tmp_61[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); - _res = attr_var; + D(fprintf(stderr, "%*c+ _tmp_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "')'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_61[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); + D(fprintf(stderr, "%*c%s _tmp_58[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "')'")); + } + { // ':' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_58[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 11)) // token=':' + ) + { + D(fprintf(stderr, "%*c+ _tmp_58[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_58[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':'")); } _res = NULL; done: @@ -24687,9 +24599,9 @@ _tmp_61_rule(Parser *p) return _res; } -// _loop0_63: ',' pattern +// _loop1_59: except_block static asdl_seq * -_loop0_63_rule(Parser *p) +_loop1_59_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24708,27 +24620,18 @@ _loop0_63_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' pattern + { // except_block if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); - Token * _literal; - pattern_ty elem; + D(fprintf(stderr, "%*c> _loop1_59[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "except_block")); + excepthandler_ty except_block_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = pattern_rule(p)) // pattern + (except_block_var = except_block_rule(p)) // except_block ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = except_block_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -24744,8 +24647,13 @@ _loop0_63_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_63[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern")); + D(fprintf(stderr, "%*c%s _loop1_59[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "except_block")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -24757,53 +24665,129 @@ _loop0_63_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_63_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_59_type, _seq); D(p->level--); return _seq; } -// _gather_62: pattern _loop0_63 -static asdl_seq * -_gather_62_rule(Parser *p) +// _tmp_60: 'as' NAME +static void * +_tmp_60_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // pattern _loop0_63 + { // 'as' NAME if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_63")); - pattern_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_60[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + Token * _keyword; + expr_ty z; if ( - (elem = pattern_rule(p)) // pattern + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && - (seq = _loop0_63_rule(p)) // _loop0_63 + (z = _PyPegen_name_token(p)) // NAME ) { - D(fprintf(stderr, "%*c+ _gather_62[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_63")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_60[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'as' NAME")); + _res = z; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_62[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_63")); + D(fprintf(stderr, "%*c%s _tmp_60[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'as' NAME")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop1_61: case_block +static asdl_seq * +_loop1_61_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void *_res = NULL; + int _mark = p->mark; + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // case_block + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _loop1_61[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "case_block")); + match_case_ty case_block_var; + while ( + (case_block_var = case_block_rule(p)) // case_block + ) + { + _res = case_block_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _loop1_61[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "case_block")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - _res = NULL; - done: + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_61_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop0_65: ',' keyword_pattern +// _loop0_63: '|' closed_pattern static asdl_seq * -_loop0_65_rule(Parser *p) +_loop0_63_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24822,18 +24806,18 @@ _loop0_65_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' keyword_pattern + { // '|' closed_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); + D(fprintf(stderr, "%*c> _loop0_63[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'|' closed_pattern")); Token * _literal; - KeyPatternPair* elem; + pattern_ty elem; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + (_literal = _PyPegen_expect_token(p, 18)) // token='|' && - (elem = keyword_pattern_rule(p)) // keyword_pattern + (elem = closed_pattern_rule(p)) // closed_pattern ) { _res = elem; @@ -24858,8 +24842,8 @@ _loop0_65_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_65[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern")); + D(fprintf(stderr, "%*c%s _loop0_63[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'|' closed_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -24871,14 +24855,14 @@ _loop0_65_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_65_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_63_type, _seq); D(p->level--); return _seq; } -// _gather_64: keyword_pattern _loop0_65 +// _gather_62: closed_pattern _loop0_63 static asdl_seq * -_gather_64_rule(Parser *p) +_gather_62_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24887,27 +24871,27 @@ _gather_64_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // keyword_pattern _loop0_65 + { // closed_pattern _loop0_63 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_65")); - KeyPatternPair* elem; + D(fprintf(stderr, "%*c> _gather_62[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_63")); + pattern_ty elem; asdl_seq * seq; if ( - (elem = keyword_pattern_rule(p)) // keyword_pattern + (elem = closed_pattern_rule(p)) // closed_pattern && - (seq = _loop0_65_rule(p)) // _loop0_65 + (seq = _loop0_63_rule(p)) // _loop0_63 ) { - D(fprintf(stderr, "%*c+ _gather_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_65")); + D(fprintf(stderr, "%*c+ _gather_62[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "closed_pattern _loop0_63")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_64[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_65")); + D(fprintf(stderr, "%*c%s _gather_62[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "closed_pattern _loop0_63")); } _res = NULL; done: @@ -24915,9 +24899,9 @@ _gather_64_rule(Parser *p) return _res; } -// _tmp_66: 'from' expression +// _tmp_64: '+' | '-' static void * -_tmp_66_rule(Parser *p) +_tmp_64_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -24926,76 +24910,43 @@ _tmp_66_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // 'from' expression + { // '+' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'from' expression")); - Token * _keyword; - expr_ty z; + D(fprintf(stderr, "%*c> _tmp_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); + Token * _literal; if ( - (_keyword = _PyPegen_expect_token(p, 514)) // token='from' - && - (z = expression_rule(p)) // expression + (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'from' expression")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ _tmp_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'from' expression")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_67: '->' expression -static void * -_tmp_67_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_64[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } - void * _res = NULL; - int _mark = p->mark; - { // '->' expression + { // '-' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_64[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); Token * _literal; - expr_ty z; if ( - (_literal = _PyPegen_expect_token(p, 51)) // token='->' - && - (z = expression_rule(p)) // expression + (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ _tmp_64[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c%s _tmp_64[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); } _res = NULL; done: @@ -25003,9 +24954,9 @@ _tmp_67_rule(Parser *p) return _res; } -// _tmp_68: '->' expression +// _tmp_65: '+' | '-' static void * -_tmp_68_rule(Parser *p) +_tmp_65_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25014,350 +24965,201 @@ _tmp_68_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // '->' expression + { // '+' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'->' expression")); + D(fprintf(stderr, "%*c> _tmp_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'+'")); Token * _literal; - expr_ty z; if ( - (_literal = _PyPegen_expect_token(p, 51)) // token='->' - && - (z = expression_rule(p)) // expression + (_literal = _PyPegen_expect_token(p, 14)) // token='+' ) { - D(fprintf(stderr, "%*c+ _tmp_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'->' expression")); - _res = z; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } + D(fprintf(stderr, "%*c+ _tmp_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'+'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_68[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'->' expression")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_69: NEWLINE INDENT -static void * -_tmp_69_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_65[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'+'")); } - void * _res = NULL; - int _mark = p->mark; - { // NEWLINE INDENT + { // '-' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); - Token * indent_var; - Token * newline_var; + D(fprintf(stderr, "%*c> _tmp_65[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'-'")); + Token * _literal; if ( - (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' - && - (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + (_literal = _PyPegen_expect_token(p, 15)) // token='-' ) { - D(fprintf(stderr, "%*c+ _tmp_69[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); - _res = _PyPegen_dummy_name(p, newline_var, indent_var); + D(fprintf(stderr, "%*c+ _tmp_65[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'-'")); + _res = _literal; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_69[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _loop0_70: param_no_default -static asdl_seq * -_loop0_70_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void *_res = NULL; - int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // param_no_default - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _loop0_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; - while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default - ) - { - _res = param_no_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_70[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_70_type, _seq); - D(p->level--); - return _seq; -} - -// _loop0_71: param_with_default -static asdl_seq * -_loop0_71_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void *_res = NULL; - int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // param_with_default - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _loop0_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; - while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default - ) - { - _res = param_with_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_71[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_71_type, _seq); + D(fprintf(stderr, "%*c%s _tmp_65[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'-'")); + } + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_72: param_with_default -static asdl_seq * -_loop0_72_rule(Parser *p) +// _tmp_66: '.' | '(' | '=' +static void * +_tmp_66_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // '.' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 23)) // token='.' + ) + { + D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // param_with_default + { // '(' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; - while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default + D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 7)) // token='(' ) { - _res = param_with_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + _res = _literal; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_72[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // '=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_66[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_66[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_66[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_72_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop1_73: param_no_default -static asdl_seq * -_loop1_73_rule(Parser *p) +// _tmp_67: '.' | '(' | '=' +static void * +_tmp_67_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // param_no_default + { // '.' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; - while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default + D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'.'")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 23)) // token='.' ) { - _res = param_no_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'.'")); + _res = _literal; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_73[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'.'")); } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + { // '(' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'('")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 7)) // token='(' + ) + { + D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'('")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'('")); } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // '=' + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_67[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'='")); + Token * _literal; + if ( + (_literal = _PyPegen_expect_token(p, 22)) // token='=' + ) + { + D(fprintf(stderr, "%*c+ _tmp_67[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'='")); + _res = _literal; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_67[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'='")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_73_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_74: param_with_default +// _loop0_69: ',' maybe_star_pattern static asdl_seq * -_loop0_74_rule(Parser *p) +_loop0_69_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25376,18 +25178,27 @@ _loop0_74_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_with_default + { // ',' maybe_star_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; + D(fprintf(stderr, "%*c> _loop0_69[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' maybe_star_pattern")); + Token * _literal; + pattern_ty elem; while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern ) { - _res = param_with_default_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25403,8 +25214,8 @@ _loop0_74_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c%s _loop0_69[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' maybe_star_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25416,85 +25227,53 @@ _loop0_74_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_74_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_69_type, _seq); D(p->level--); return _seq; } -// _loop1_75: param_with_default +// _gather_68: maybe_star_pattern _loop0_69 static asdl_seq * -_loop1_75_rule(Parser *p) +_gather_68_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // param_with_default + { // maybe_star_pattern _loop0_69 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; - while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default + D(fprintf(stderr, "%*c> _gather_68[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_69")); + pattern_ty elem; + asdl_seq * seq; + if ( + (elem = maybe_star_pattern_rule(p)) // maybe_star_pattern + && + (seq = _loop0_69_rule(p)) // _loop0_69 ) { - _res = param_with_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _gather_68[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "maybe_star_pattern _loop0_69")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_75[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_68[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "maybe_star_pattern _loop0_69")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_75_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop1_76: param_no_default +// _loop0_71: ',' key_value_pattern static asdl_seq * -_loop1_76_rule(Parser *p) +_loop0_71_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25513,18 +25292,27 @@ _loop1_76_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_no_default + { // ',' key_value_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; + D(fprintf(stderr, "%*c> _loop0_71[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' key_value_pattern")); + Token * _literal; + KeyPatternPair* elem; while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = key_value_pattern_rule(p)) // key_value_pattern ) { - _res = param_no_default_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25540,13 +25328,8 @@ _loop1_76_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_76[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_71[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' key_value_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25558,14 +25341,108 @@ _loop1_76_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_76_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_71_type, _seq); D(p->level--); return _seq; } -// _loop1_77: param_no_default +// _gather_70: key_value_pattern _loop0_71 static asdl_seq * -_loop1_77_rule(Parser *p) +_gather_70_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // key_value_pattern _loop0_71 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_70[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_71")); + KeyPatternPair* elem; + asdl_seq * seq; + if ( + (elem = key_value_pattern_rule(p)) // key_value_pattern + && + (seq = _loop0_71_rule(p)) // _loop0_71 + ) + { + D(fprintf(stderr, "%*c+ _gather_70[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "key_value_pattern _loop0_71")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_70[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "key_value_pattern _loop0_71")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_72: literal_expr | attr +static void * +_tmp_72_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // literal_expr + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "literal_expr")); + expr_ty literal_expr_var; + if ( + (literal_expr_var = literal_expr_rule(p)) // literal_expr + ) + { + D(fprintf(stderr, "%*c+ _tmp_72[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "literal_expr")); + _res = literal_expr_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_72[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "literal_expr")); + } + { // attr + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_72[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "attr")); + expr_ty attr_var; + if ( + (attr_var = attr_rule(p)) // attr + ) + { + D(fprintf(stderr, "%*c+ _tmp_72[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "attr")); + _res = attr_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_72[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "attr")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_74: ',' pattern +static asdl_seq * +_loop0_74_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25584,18 +25461,27 @@ _loop1_77_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_no_default + { // ',' pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; + D(fprintf(stderr, "%*c> _loop0_74[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' pattern")); + Token * _literal; + pattern_ty elem; while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = pattern_rule(p)) // pattern ) { - _res = param_no_default_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25611,13 +25497,8 @@ _loop1_77_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_77[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_74[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25629,14 +25510,53 @@ _loop1_77_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_77_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_74_type, _seq); D(p->level--); return _seq; } -// _loop0_78: param_no_default +// _gather_73: pattern _loop0_74 +static asdl_seq * +_gather_73_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // pattern _loop0_74 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_73[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "pattern _loop0_74")); + pattern_ty elem; + asdl_seq * seq; + if ( + (elem = pattern_rule(p)) // pattern + && + (seq = _loop0_74_rule(p)) // _loop0_74 + ) + { + D(fprintf(stderr, "%*c+ _gather_73[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "pattern _loop0_74")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_73[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "pattern _loop0_74")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_76: ',' keyword_pattern static asdl_seq * -_loop0_78_rule(Parser *p) +_loop0_76_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25655,18 +25575,27 @@ _loop0_78_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_no_default + { // ',' keyword_pattern if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; + D(fprintf(stderr, "%*c> _loop0_76[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' keyword_pattern")); + Token * _literal; + KeyPatternPair* elem; while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = keyword_pattern_rule(p)) // keyword_pattern ) { - _res = param_no_default_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25682,8 +25611,8 @@ _loop0_78_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_78[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c%s _loop0_76[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' keyword_pattern")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25695,14 +25624,53 @@ _loop0_78_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_78_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_76_type, _seq); D(p->level--); return _seq; } -// _loop1_79: param_with_default +// _gather_75: keyword_pattern _loop0_76 static asdl_seq * -_loop1_79_rule(Parser *p) +_gather_75_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // keyword_pattern _loop0_76 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_75[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_76")); + KeyPatternPair* elem; + asdl_seq * seq; + if ( + (elem = keyword_pattern_rule(p)) // keyword_pattern + && + (seq = _loop0_76_rule(p)) // _loop0_76 + ) + { + D(fprintf(stderr, "%*c+ _gather_75[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "keyword_pattern _loop0_76")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_75[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "keyword_pattern _loop0_76")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop1_77: (',' expression) +static asdl_seq * +_loop1_77_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25721,18 +25689,18 @@ _loop1_79_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_with_default + { // (',' expression) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; + D(fprintf(stderr, "%*c> _loop1_77[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); + void *_tmp_183_var; while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default + (_tmp_183_var = _tmp_183_rule(p)) // ',' expression ) { - _res = param_with_default_var; + _res = _tmp_183_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25748,8 +25716,8 @@ _loop1_79_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_79[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); + D(fprintf(stderr, "%*c%s _loop1_77[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -25766,14 +25734,14 @@ _loop1_79_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_79_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_77_type, _seq); D(p->level--); return _seq; } -// _loop0_80: param_no_default +// _loop1_78: (',' star_expression) static asdl_seq * -_loop0_80_rule(Parser *p) +_loop1_78_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25792,18 +25760,18 @@ _loop0_80_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_no_default + { // (',' star_expression) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_no_default")); - arg_ty param_no_default_var; + D(fprintf(stderr, "%*c> _loop1_78[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); + void *_tmp_184_var; while ( - (param_no_default_var = param_no_default_rule(p)) // param_no_default + (_tmp_184_var = _tmp_184_rule(p)) // ',' star_expression ) { - _res = param_no_default_var; + _res = _tmp_184_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25819,8 +25787,13 @@ _loop0_80_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_80[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_no_default")); + D(fprintf(stderr, "%*c%s _loop1_78[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25832,14 +25805,14 @@ _loop0_80_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_80_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_78_type, _seq); D(p->level--); return _seq; } -// _loop1_81: param_with_default +// _loop0_80: ',' star_named_expression static asdl_seq * -_loop1_81_rule(Parser *p) +_loop0_80_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25858,18 +25831,27 @@ _loop1_81_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_with_default + { // ',' star_named_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_with_default")); - NameDefaultPair* param_with_default_var; + D(fprintf(stderr, "%*c> _loop0_80[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); + Token * _literal; + expr_ty elem; while ( - (param_with_default_var = param_with_default_rule(p)) // param_with_default + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = star_named_expression_rule(p)) // star_named_expression ) { - _res = param_with_default_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25885,13 +25867,8 @@ _loop1_81_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_81[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_with_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_80[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25903,14 +25880,53 @@ _loop1_81_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_81_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_80_type, _seq); D(p->level--); return _seq; } -// _loop0_82: param_maybe_default +// _gather_79: star_named_expression _loop0_80 +static asdl_seq * +_gather_79_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // star_named_expression _loop0_80 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_79[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_80")); + expr_ty elem; + asdl_seq * seq; + if ( + (elem = star_named_expression_rule(p)) // star_named_expression + && + (seq = _loop0_80_rule(p)) // _loop0_80 + ) + { + D(fprintf(stderr, "%*c+ _gather_79[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_80")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_79[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_80")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop1_81: ('or' conjunction) static asdl_seq * -_loop0_82_rule(Parser *p) +_loop1_81_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25929,18 +25945,18 @@ _loop0_82_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_maybe_default + { // ('or' conjunction) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); - NameDefaultPair* param_maybe_default_var; + D(fprintf(stderr, "%*c> _loop1_81[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); + void *_tmp_185_var; while ( - (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default + (_tmp_185_var = _tmp_185_rule(p)) // 'or' conjunction ) { - _res = param_maybe_default_var; + _res = _tmp_185_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -25956,8 +25972,13 @@ _loop0_82_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_82[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c%s _loop1_81[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -25969,14 +25990,14 @@ _loop0_82_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_82_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_81_type, _seq); D(p->level--); return _seq; } -// _loop1_83: param_maybe_default +// _loop1_82: ('and' inversion) static asdl_seq * -_loop1_83_rule(Parser *p) +_loop1_82_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -25995,18 +26016,18 @@ _loop1_83_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // param_maybe_default + { // ('and' inversion) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "param_maybe_default")); - NameDefaultPair* param_maybe_default_var; + D(fprintf(stderr, "%*c> _loop1_82[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); + void *_tmp_186_var; while ( - (param_maybe_default_var = param_maybe_default_rule(p)) // param_maybe_default + (_tmp_186_var = _tmp_186_rule(p)) // 'and' inversion ) { - _res = param_maybe_default_var; + _res = _tmp_186_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26022,8 +26043,8 @@ _loop1_83_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "param_maybe_default")); + D(fprintf(stderr, "%*c%s _loop1_82[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -26040,14 +26061,14 @@ _loop1_83_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_83_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_82_type, _seq); D(p->level--); return _seq; } -// _loop1_84: ('@' named_expression NEWLINE) +// _loop1_83: compare_op_bitwise_or_pair static asdl_seq * -_loop1_84_rule(Parser *p) +_loop1_83_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26066,18 +26087,18 @@ _loop1_84_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('@' named_expression NEWLINE) + { // compare_op_bitwise_or_pair if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('@' named_expression NEWLINE)")); - void *_tmp_182_var; + D(fprintf(stderr, "%*c> _loop1_83[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); + CmpopExprPair* compare_op_bitwise_or_pair_var; while ( - (_tmp_182_var = _tmp_182_rule(p)) // '@' named_expression NEWLINE + (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p)) // compare_op_bitwise_or_pair ) { - _res = _tmp_182_var; + _res = compare_op_bitwise_or_pair_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26093,8 +26114,8 @@ _loop1_84_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_84[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('@' named_expression NEWLINE)")); + D(fprintf(stderr, "%*c%s _loop1_83[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -26111,14 +26132,14 @@ _loop1_84_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_84_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_83_type, _seq); D(p->level--); return _seq; } -// _tmp_85: '(' arguments? ')' +// _tmp_84: '!=' static void * -_tmp_85_rule(Parser *p) +_tmp_84_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26127,25 +26148,19 @@ _tmp_85_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // '(' arguments? ')' + { // '!=' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); - Token * _literal; - Token * _literal_1; - void *z; + D(fprintf(stderr, "%*c> _tmp_84[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); + Token * tok; if ( - (_literal = _PyPegen_expect_token(p, 7)) // token='(' - && - (z = arguments_rule(p), 1) // arguments? - && - (_literal_1 = _PyPegen_expect_token(p, 8)) // token=')' + (tok = _PyPegen_expect_token(p, 28)) // token='!=' ) { - D(fprintf(stderr, "%*c+ _tmp_85[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'(' arguments? ')'")); - _res = z; + D(fprintf(stderr, "%*c+ _tmp_84[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); + _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -26154,8 +26169,8 @@ _tmp_85_rule(Parser *p) goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_85[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'(' arguments? ')'")); + D(fprintf(stderr, "%*c%s _tmp_84[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='")); } _res = NULL; done: @@ -26163,9 +26178,9 @@ _tmp_85_rule(Parser *p) return _res; } -// _loop1_86: (',' star_expression) +// _loop0_86: ',' slice static asdl_seq * -_loop1_86_rule(Parser *p) +_loop0_86_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26184,18 +26199,27 @@ _loop1_86_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // (',' star_expression) + { // ',' slice if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_expression)")); - void *_tmp_183_var; + D(fprintf(stderr, "%*c> _loop0_86[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' slice")); + Token * _literal; + expr_ty elem; while ( - (_tmp_183_var = _tmp_183_rule(p)) // ',' star_expression + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = slice_rule(p)) // slice ) { - _res = _tmp_183_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26211,13 +26235,8 @@ _loop1_86_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_86[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_expression)")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_86[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' slice")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -26229,118 +26248,216 @@ _loop1_86_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_86_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_86_type, _seq); D(p->level--); return _seq; } -// _loop0_88: ',' star_named_expression +// _gather_85: slice _loop0_86 static asdl_seq * -_loop0_88_rule(Parser *p) +_gather_85_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); + { // slice _loop0_86 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_85[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice _loop0_86")); + expr_ty elem; + asdl_seq * seq; + if ( + (elem = slice_rule(p)) // slice + && + (seq = _loop0_86_rule(p)) // _loop0_86 + ) + { + D(fprintf(stderr, "%*c+ _gather_85[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice _loop0_86")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_85[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice _loop0_86")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_87: ':' expression? +static void * +_tmp_87_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { D(p->level--); return NULL; } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // ',' star_named_expression + void * _res = NULL; + int _mark = p->mark; + { // ':' expression? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_named_expression")); + D(fprintf(stderr, "%*c> _tmp_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); Token * _literal; - expr_ty elem; - while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' + void *d; + if ( + (_literal = _PyPegen_expect_token(p, 11)) // token=':' && - (elem = star_named_expression_rule(p)) // star_named_expression + (d = expression_rule(p), 1) // expression? ) { - _res = elem; + D(fprintf(stderr, "%*c+ _tmp_87[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); + _res = d; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; - PyMem_Free(_children); D(p->level--); return NULL; } - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_87[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_88: tuple | group | genexp +static void * +_tmp_88_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // tuple + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); + expr_ty tuple_var; + if ( + (tuple_var = tuple_rule(p)) // tuple + ) + { + D(fprintf(stderr, "%*c+ _tmp_88[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); + _res = tuple_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_88[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); + } + { // group + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); + expr_ty group_var; + if ( + (group_var = group_rule(p)) // group + ) + { + D(fprintf(stderr, "%*c+ _tmp_88[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); + _res = group_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_88[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group")); + } + { // genexp + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_88[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); + expr_ty genexp_var; + if ( + (genexp_var = genexp_rule(p)) // genexp + ) + { + D(fprintf(stderr, "%*c+ _tmp_88[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); + _res = genexp_var; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_88[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_named_expression")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_88[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_88_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _gather_87: star_named_expression _loop0_88 -static asdl_seq * -_gather_87_rule(Parser *p) +// _tmp_89: list | listcomp +static void * +_tmp_89_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // star_named_expression _loop0_88 + { // list if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_87[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_88")); - expr_ty elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); + expr_ty list_var; if ( - (elem = star_named_expression_rule(p)) // star_named_expression - && - (seq = _loop0_88_rule(p)) // _loop0_88 + (list_var = list_rule(p)) // list ) { - D(fprintf(stderr, "%*c+ _gather_87[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression _loop0_88")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); + _res = list_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); + } + { // listcomp + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); + expr_ty listcomp_var; + if ( + (listcomp_var = listcomp_rule(p)) // listcomp + ) + { + D(fprintf(stderr, "%*c+ _tmp_89[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); + _res = listcomp_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_87[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression _loop0_88")); + D(fprintf(stderr, "%*c%s _tmp_89[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp")); } _res = NULL; done: @@ -26348,210 +26465,155 @@ _gather_87_rule(Parser *p) return _res; } -// _loop1_89: (',' expression) -static asdl_seq * -_loop1_89_rule(Parser *p) +// _tmp_90: dict | set | dictcomp | setcomp +static void * +_tmp_90_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // (',' expression) + { // dict if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_89[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' expression)")); - void *_tmp_184_var; - while ( - (_tmp_184_var = _tmp_184_rule(p)) // ',' expression + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); + expr_ty dict_var; + if ( + (dict_var = dict_rule(p)) // dict ) { - _res = _tmp_184_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); + _res = dict_var; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_89[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' expression)")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_89_type, _seq); - D(p->level--); - return _seq; -} - -// _loop0_90: lambda_param_no_default -static asdl_seq * -_loop0_90_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict")); } - void *_res = NULL; - int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // set + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); + expr_ty set_var; + if ( + (set_var = set_rule(p)) // set + ) + { + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); + _res = set_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set")); } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // lambda_param_no_default + { // dictcomp if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); - arg_ty lambda_param_no_default_var; - while ( - (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); + expr_ty dictcomp_var; + if ( + (dictcomp_var = dictcomp_rule(p)) // dictcomp ) { - _res = lambda_param_no_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); + _res = dictcomp_var; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_90[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp")); } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // setcomp + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_90[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); + expr_ty setcomp_var; + if ( + (setcomp_var = setcomp_rule(p)) // setcomp + ) + { + D(fprintf(stderr, "%*c+ _tmp_90[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); + _res = setcomp_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_90[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_90_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_91: lambda_param_with_default -static asdl_seq * -_loop0_91_rule(Parser *p) +// _tmp_91: yield_expr | named_expression +static void * +_tmp_91_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + void * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // lambda_param_with_default + { // yield_expr if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); - NameDefaultPair* lambda_param_with_default_var; - while ( - (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default + D(fprintf(stderr, "%*c> _tmp_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); + expr_ty yield_expr_var; + if ( + (yield_expr_var = yield_expr_rule(p)) // yield_expr ) { - _res = lambda_param_with_default_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _tmp_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); + _res = yield_expr_var; + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_91[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); + D(fprintf(stderr, "%*c%s _tmp_91[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + { // named_expression + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_91[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); + expr_ty named_expression_var; + if ( + (named_expression_var = named_expression_rule(p)) // named_expression + ) + { + D(fprintf(stderr, "%*c+ _tmp_91[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); + _res = named_expression_var; + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_91[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_91_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_92: lambda_param_with_default +// _loop0_92: lambda_param_no_default static asdl_seq * _loop0_92_rule(Parser *p) { @@ -26572,18 +26634,18 @@ _loop0_92_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_with_default + { // lambda_param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); - NameDefaultPair* lambda_param_with_default_var; + D(fprintf(stderr, "%*c> _loop0_92[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + arg_ty lambda_param_no_default_var; while ( - (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default + (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - _res = lambda_param_with_default_var; + _res = lambda_param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26600,7 +26662,7 @@ _loop0_92_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_92[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -26617,9 +26679,9 @@ _loop0_92_rule(Parser *p) return _seq; } -// _loop1_93: lambda_param_no_default +// _loop0_93: lambda_param_with_default static asdl_seq * -_loop1_93_rule(Parser *p) +_loop0_93_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26638,18 +26700,18 @@ _loop1_93_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_no_default + { // lambda_param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); - arg_ty lambda_param_no_default_var; + D(fprintf(stderr, "%*c> _loop0_93[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + NameDefaultPair* lambda_param_with_default_var; while ( - (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default + (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default ) { - _res = lambda_param_no_default_var; + _res = lambda_param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26665,13 +26727,8 @@ _loop1_93_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_93[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_93[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -26683,7 +26740,7 @@ _loop1_93_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_93_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_93_type, _seq); D(p->level--); return _seq; } @@ -26754,7 +26811,7 @@ _loop0_94_rule(Parser *p) return _seq; } -// _loop1_95: lambda_param_with_default +// _loop1_95: lambda_param_no_default static asdl_seq * _loop1_95_rule(Parser *p) { @@ -26775,18 +26832,18 @@ _loop1_95_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_with_default + { // lambda_param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); - NameDefaultPair* lambda_param_with_default_var; + D(fprintf(stderr, "%*c> _loop1_95[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + arg_ty lambda_param_no_default_var; while ( - (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default + (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - _res = lambda_param_with_default_var; + _res = lambda_param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26803,7 +26860,7 @@ _loop1_95_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_95[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -26825,9 +26882,9 @@ _loop1_95_rule(Parser *p) return _seq; } -// _loop1_96: lambda_param_no_default +// _loop0_96: lambda_param_with_default static asdl_seq * -_loop1_96_rule(Parser *p) +_loop0_96_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26846,18 +26903,18 @@ _loop1_96_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_no_default + { // lambda_param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); - arg_ty lambda_param_no_default_var; + D(fprintf(stderr, "%*c> _loop0_96[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + NameDefaultPair* lambda_param_with_default_var; while ( - (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default + (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default ) { - _res = lambda_param_no_default_var; + _res = lambda_param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26873,13 +26930,8 @@ _loop1_96_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_96[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_96[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -26891,12 +26943,12 @@ _loop1_96_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_96_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_96_type, _seq); D(p->level--); return _seq; } -// _loop1_97: lambda_param_no_default +// _loop1_97: lambda_param_with_default static asdl_seq * _loop1_97_rule(Parser *p) { @@ -26917,18 +26969,18 @@ _loop1_97_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_no_default + { // lambda_param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); - arg_ty lambda_param_no_default_var; + D(fprintf(stderr, "%*c> _loop1_97[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + NameDefaultPair* lambda_param_with_default_var; while ( - (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default + (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default ) { - _res = lambda_param_no_default_var; + _res = lambda_param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -26945,7 +26997,7 @@ _loop1_97_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_97[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -26967,9 +27019,9 @@ _loop1_97_rule(Parser *p) return _seq; } -// _loop0_98: lambda_param_no_default +// _loop1_98: lambda_param_no_default static asdl_seq * -_loop0_98_rule(Parser *p) +_loop1_98_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -26993,7 +27045,7 @@ _loop0_98_rule(Parser *p) D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + D(fprintf(stderr, "%*c> _loop1_98[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); arg_ty lambda_param_no_default_var; while ( (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default @@ -27015,9 +27067,14 @@ _loop0_98_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_98[%d-%d]: %s failed!\n", p->level, ' ', + D(fprintf(stderr, "%*c%s _loop1_98[%d-%d]: %s failed!\n", p->level, ' ', p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { PyMem_Free(_children); @@ -27028,12 +27085,12 @@ _loop0_98_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_98_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_98_type, _seq); D(p->level--); return _seq; } -// _loop1_99: lambda_param_with_default +// _loop1_99: lambda_param_no_default static asdl_seq * _loop1_99_rule(Parser *p) { @@ -27054,18 +27111,18 @@ _loop1_99_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_with_default + { // lambda_param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); - NameDefaultPair* lambda_param_with_default_var; + D(fprintf(stderr, "%*c> _loop1_99[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + arg_ty lambda_param_no_default_var; while ( - (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default + (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - _res = lambda_param_with_default_var; + _res = lambda_param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27082,7 +27139,7 @@ _loop1_99_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_99[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -27241,7 +27298,7 @@ _loop1_101_rule(Parser *p) return _seq; } -// _loop0_102: lambda_param_maybe_default +// _loop0_102: lambda_param_no_default static asdl_seq * _loop0_102_rule(Parser *p) { @@ -27262,18 +27319,18 @@ _loop0_102_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_maybe_default + { // lambda_param_no_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); - NameDefaultPair* lambda_param_maybe_default_var; + D(fprintf(stderr, "%*c> _loop0_102[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_no_default")); + arg_ty lambda_param_no_default_var; while ( - (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default + (lambda_param_no_default_var = lambda_param_no_default_rule(p)) // lambda_param_no_default ) { - _res = lambda_param_maybe_default_var; + _res = lambda_param_no_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27290,7 +27347,7 @@ _loop0_102_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_102[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_no_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -27307,7 +27364,7 @@ _loop0_102_rule(Parser *p) return _seq; } -// _loop1_103: lambda_param_maybe_default +// _loop1_103: lambda_param_with_default static asdl_seq * _loop1_103_rule(Parser *p) { @@ -27328,18 +27385,18 @@ _loop1_103_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // lambda_param_maybe_default + { // lambda_param_with_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); - NameDefaultPair* lambda_param_maybe_default_var; + D(fprintf(stderr, "%*c> _loop1_103[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_with_default")); + NameDefaultPair* lambda_param_with_default_var; while ( - (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default + (lambda_param_with_default_var = lambda_param_with_default_rule(p)) // lambda_param_with_default ) { - _res = lambda_param_maybe_default_var; + _res = lambda_param_with_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27356,7 +27413,7 @@ _loop1_103_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_103[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_with_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -27378,9 +27435,9 @@ _loop1_103_rule(Parser *p) return _seq; } -// _loop1_104: ('or' conjunction) +// _loop0_104: lambda_param_maybe_default static asdl_seq * -_loop1_104_rule(Parser *p) +_loop0_104_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -27399,18 +27456,18 @@ _loop1_104_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('or' conjunction) + { // lambda_param_maybe_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('or' conjunction)")); - void *_tmp_185_var; + D(fprintf(stderr, "%*c> _loop0_104[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + NameDefaultPair* lambda_param_maybe_default_var; while ( - (_tmp_185_var = _tmp_185_rule(p)) // 'or' conjunction + (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default ) { - _res = _tmp_185_var; + _res = lambda_param_maybe_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27426,13 +27483,8 @@ _loop1_104_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_104[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('or' conjunction)")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_104[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -27444,12 +27496,12 @@ _loop1_104_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_104_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_104_type, _seq); D(p->level--); return _seq; } -// _loop1_105: ('and' inversion) +// _loop1_105: lambda_param_maybe_default static asdl_seq * _loop1_105_rule(Parser *p) { @@ -27470,18 +27522,18 @@ _loop1_105_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('and' inversion) + { // lambda_param_maybe_default if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('and' inversion)")); - void *_tmp_186_var; + D(fprintf(stderr, "%*c> _loop1_105[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "lambda_param_maybe_default")); + NameDefaultPair* lambda_param_maybe_default_var; while ( - (_tmp_186_var = _tmp_186_rule(p)) // 'and' inversion + (lambda_param_maybe_default_var = lambda_param_maybe_default_rule(p)) // lambda_param_maybe_default ) { - _res = _tmp_186_var; + _res = lambda_param_maybe_default_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27498,7 +27550,7 @@ _loop1_105_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_105[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('and' inversion)")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "lambda_param_maybe_default")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -27520,7 +27572,7 @@ _loop1_105_rule(Parser *p) return _seq; } -// _loop1_106: compare_op_bitwise_or_pair +// _loop1_106: STRING static asdl_seq * _loop1_106_rule(Parser *p) { @@ -27541,18 +27593,18 @@ _loop1_106_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // compare_op_bitwise_or_pair + { // STRING if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "compare_op_bitwise_or_pair")); - CmpopExprPair* compare_op_bitwise_or_pair_var; + D(fprintf(stderr, "%*c> _loop1_106[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); + expr_ty string_var; while ( - (compare_op_bitwise_or_pair_var = compare_op_bitwise_or_pair_rule(p)) // compare_op_bitwise_or_pair + (string_var = _PyPegen_string_token(p)) // STRING ) { - _res = compare_op_bitwise_or_pair_var; + _res = string_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -27569,7 +27621,7 @@ _loop1_106_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop1_106[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "compare_op_bitwise_or_pair")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING")); } if (_n == 0 || p->error_indicator) { PyMem_Free(_children); @@ -27591,7 +27643,7 @@ _loop1_106_rule(Parser *p) return _seq; } -// _tmp_107: '!=' +// _tmp_107: star_named_expression ',' star_named_expressions? static void * _tmp_107_rule(Parser *p) { @@ -27602,19 +27654,25 @@ _tmp_107_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // '!=' + { // star_named_expression ',' star_named_expressions? if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'!='")); - Token * tok; + D(fprintf(stderr, "%*c> _tmp_107[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); + Token * _literal; + expr_ty y; + void *z; if ( - (tok = _PyPegen_expect_token(p, 28)) // token='!=' + (y = star_named_expression_rule(p)) // star_named_expression + && + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (z = star_named_expressions_rule(p), 1) // star_named_expressions? ) { - D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'!='")); - _res = _PyPegen_check_barry_as_flufl ( p , tok ) ? NULL : tok; + D(fprintf(stderr, "%*c+ _tmp_107[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); + _res = _PyPegen_seq_insert_in_front ( p , y , z ); if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; D(p->level--); @@ -27624,7 +27682,7 @@ _tmp_107_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_107[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "'!='")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?")); } _res = NULL; done: @@ -27632,7 +27690,7 @@ _tmp_107_rule(Parser *p) return _res; } -// _loop0_109: ',' slice +// _loop0_109: ',' double_starred_kvpair static asdl_seq * _loop0_109_rule(Parser *p) { @@ -27653,18 +27711,18 @@ _loop0_109_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' slice + { // ',' double_starred_kvpair if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' slice")); + D(fprintf(stderr, "%*c> _loop0_109[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); Token * _literal; - expr_ty elem; + KeyValuePair* elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = slice_rule(p)) // slice + (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair ) { _res = elem; @@ -27690,7 +27748,7 @@ _loop0_109_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_109[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' slice")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -27707,7 +27765,7 @@ _loop0_109_rule(Parser *p) return _seq; } -// _gather_108: slice _loop0_109 +// _gather_108: double_starred_kvpair _loop0_109 static asdl_seq * _gather_108_rule(Parser *p) { @@ -27718,27 +27776,27 @@ _gather_108_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // slice _loop0_109 + { // double_starred_kvpair _loop0_109 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "slice _loop0_109")); - expr_ty elem; + D(fprintf(stderr, "%*c> _gather_108[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_109")); + KeyValuePair* elem; asdl_seq * seq; if ( - (elem = slice_rule(p)) // slice + (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair && (seq = _loop0_109_rule(p)) // _loop0_109 ) { - D(fprintf(stderr, "%*c+ _gather_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "slice _loop0_109")); + D(fprintf(stderr, "%*c+ _gather_108[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_109")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_108[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "slice _loop0_109")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_109")); } _res = NULL; done: @@ -27746,180 +27804,210 @@ _gather_108_rule(Parser *p) return _res; } -// _tmp_110: ':' expression? -static void * -_tmp_110_rule(Parser *p) +// _loop1_110: for_if_clause +static asdl_seq * +_loop1_110_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // ':' expression? + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // for_if_clause if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "':' expression?")); - Token * _literal; - void *d; - if ( - (_literal = _PyPegen_expect_token(p, 11)) // token=':' - && - (d = expression_rule(p), 1) // expression? + D(fprintf(stderr, "%*c> _loop1_110[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause")); + comprehension_ty for_if_clause_var; + while ( + (for_if_clause_var = for_if_clause_rule(p)) // for_if_clause ) { - D(fprintf(stderr, "%*c+ _tmp_110[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "':' expression?")); - _res = d; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; + _res = for_if_clause_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; } - goto done; + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_110[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "':' expression?")); + D(fprintf(stderr, "%*c%s _loop1_110[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause")); } - _res = NULL; - done: + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; + } + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop1_110_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_111: tuple | group | genexp -static void * -_tmp_111_rule(Parser *p) +// _loop0_111: ('if' disjunction) +static asdl_seq * +_loop0_111_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // tuple - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "tuple")); - expr_ty tuple_var; - if ( - (tuple_var = tuple_rule(p)) // tuple - ) - { - D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "tuple")); - _res = tuple_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "tuple")); + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - { // group + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ('if' disjunction) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "group")); - expr_ty group_var; - if ( - (group_var = group_rule(p)) // group + D(fprintf(stderr, "%*c> _loop0_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); + void *_tmp_187_var; + while ( + (_tmp_187_var = _tmp_187_rule(p)) // 'if' disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "group")); - _res = group_var; - goto done; + _res = _tmp_187_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "group")); + D(fprintf(stderr, "%*c%s _loop0_111[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)")); } - { // genexp - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_111[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "genexp")); - expr_ty genexp_var; - if ( - (genexp_var = genexp_rule(p)) // genexp - ) - { - D(fprintf(stderr, "%*c+ _tmp_111[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "genexp")); - _res = genexp_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_111[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "genexp")); + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - _res = NULL; - done: + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_111_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_112: list | listcomp -static void * -_tmp_112_rule(Parser *p) +// _loop0_112: ('if' disjunction) +static asdl_seq * +_loop0_112_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // list - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "list")); - expr_ty list_var; - if ( - (list_var = list_rule(p)) // list - ) - { - D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "list")); - _res = list_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "list")); + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; } - { // listcomp + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // ('if' disjunction) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "listcomp")); - expr_ty listcomp_var; - if ( - (listcomp_var = listcomp_rule(p)) // listcomp + D(fprintf(stderr, "%*c> _loop0_112[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); + void *_tmp_188_var; + while ( + (_tmp_188_var = _tmp_188_rule(p)) // 'if' disjunction ) { - D(fprintf(stderr, "%*c+ _tmp_112[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "listcomp")); - _res = listcomp_var; - goto done; + _res = _tmp_188_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; + } + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_112[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "listcomp")); + D(fprintf(stderr, "%*c%s _loop0_112[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_112_type, _seq); D(p->level--); - return _res; + return _seq; } -// _tmp_113: dict | set | dictcomp | setcomp +// _tmp_113: assigment_expression | expression !':=' static void * _tmp_113_rule(Parser *p) { @@ -27930,81 +28018,45 @@ _tmp_113_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // dict - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dict")); - expr_ty dict_var; - if ( - (dict_var = dict_rule(p)) // dict - ) - { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dict")); - _res = dict_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dict")); - } - { // set - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "set")); - expr_ty set_var; - if ( - (set_var = set_rule(p)) // set - ) - { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "set")); - _res = set_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "set")); - } - { // dictcomp + { // assigment_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "dictcomp")); - expr_ty dictcomp_var; + D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assigment_expression")); + expr_ty assigment_expression_var; if ( - (dictcomp_var = dictcomp_rule(p)) // dictcomp + (assigment_expression_var = assigment_expression_rule(p)) // assigment_expression ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "dictcomp")); - _res = dictcomp_var; + D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assigment_expression")); + _res = assigment_expression_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "dictcomp")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assigment_expression")); } - { // setcomp + { // expression !':=' if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "setcomp")); - expr_ty setcomp_var; + D(fprintf(stderr, "%*c> _tmp_113[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); + expr_ty expression_var; if ( - (setcomp_var = setcomp_rule(p)) // setcomp + (expression_var = expression_rule(p)) // expression + && + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' ) { - D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "setcomp")); - _res = setcomp_var; + D(fprintf(stderr, "%*c+ _tmp_113[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); + _res = expression_var; goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_113[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "setcomp")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); } _res = NULL; done: @@ -28012,9 +28064,9 @@ _tmp_113_rule(Parser *p) return _res; } -// _loop1_114: STRING +// _loop0_115: ',' (starred_expression | (assigment_expression | expression !':=') !'=') static asdl_seq * -_loop1_114_rule(Parser *p) +_loop0_115_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28033,18 +28085,27 @@ _loop1_114_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // STRING + { // ',' (starred_expression | (assigment_expression | expression !':=') !'=') if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "STRING")); - expr_ty string_var; + D(fprintf(stderr, "%*c> _loop0_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assigment_expression | expression !':=') !'=')")); + Token * _literal; + void *elem; while ( - (string_var = _PyPegen_string_token(p)) // STRING + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = _tmp_189_rule(p)) // starred_expression | (assigment_expression | expression !':=') !'=' ) { - _res = string_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28060,13 +28121,8 @@ _loop1_114_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_114[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "STRING")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_115[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assigment_expression | expression !':=') !'=')")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28078,106 +28134,44 @@ _loop1_114_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_114_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_115_type, _seq); D(p->level--); return _seq; } -// _tmp_115: star_named_expression ',' star_named_expressions? -static void * -_tmp_115_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void * _res = NULL; - int _mark = p->mark; - { // star_named_expression ',' star_named_expressions? - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_115[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); - Token * _literal; - expr_ty y; - void *z; - if ( - (y = star_named_expression_rule(p)) // star_named_expression - && - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (z = star_named_expressions_rule(p), 1) // star_named_expressions? - ) - { - D(fprintf(stderr, "%*c+ _tmp_115[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_named_expression ',' star_named_expressions?")); - _res = _PyPegen_seq_insert_in_front ( p , y , z ); - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; - } - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_115[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_named_expression ',' star_named_expressions?")); - } - _res = NULL; - done: - D(p->level--); - return _res; -} - -// _tmp_116: yield_expr | named_expression -static void * -_tmp_116_rule(Parser *p) +// _gather_114: +// | (starred_expression | (assigment_expression | expression !':=') !'=') _loop0_115 +static asdl_seq * +_gather_114_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - { // yield_expr - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "yield_expr")); - expr_ty yield_expr_var; - if ( - (yield_expr_var = yield_expr_rule(p)) // yield_expr - ) - { - D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "yield_expr")); - _res = yield_expr_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "yield_expr")); - } - { // named_expression + { // (starred_expression | (assigment_expression | expression !':=') !'=') _loop0_115 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "named_expression")); - expr_ty named_expression_var; + D(fprintf(stderr, "%*c> _gather_114[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_115")); + void *elem; + asdl_seq * seq; if ( - (named_expression_var = named_expression_rule(p)) // named_expression + (elem = _tmp_189_rule(p)) // starred_expression | (assigment_expression | expression !':=') !'=' + && + (seq = _loop0_115_rule(p)) // _loop0_115 ) { - D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "named_expression")); - _res = named_expression_var; + D(fprintf(stderr, "%*c+ _gather_114[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_115")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "named_expression")); + D(fprintf(stderr, "%*c%s _gather_114[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_115")); } _res = NULL; done: @@ -28185,9 +28179,9 @@ _tmp_116_rule(Parser *p) return _res; } -// _tmp_117: assigment_expression | expression !':=' +// _tmp_116: ',' kwargs static void * -_tmp_117_rule(Parser *p) +_tmp_116_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28196,45 +28190,32 @@ _tmp_117_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // assigment_expression - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "assigment_expression")); - expr_ty assigment_expression_var; - if ( - (assigment_expression_var = assigment_expression_rule(p)) // assigment_expression - ) - { - D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "assigment_expression")); - _res = assigment_expression_var; - goto done; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "assigment_expression")); - } - { // expression !':=' + { // ',' kwargs if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression !':='")); - expr_ty expression_var; + D(fprintf(stderr, "%*c> _tmp_116[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs")); + Token * _literal; + asdl_seq* k; if ( - (expression_var = expression_rule(p)) // expression + (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 53) // token=':=' + (k = kwargs_rule(p)) // kwargs ) { - D(fprintf(stderr, "%*c+ _tmp_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression !':='")); - _res = expression_var; + D(fprintf(stderr, "%*c+ _tmp_116[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs")); + _res = k; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + D(p->level--); + return NULL; + } goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_117[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression !':='")); + D(fprintf(stderr, "%*c%s _tmp_116[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs")); } _res = NULL; done: @@ -28242,9 +28223,9 @@ _tmp_117_rule(Parser *p) return _res; } -// _loop0_119: ',' double_starred_kvpair +// _loop0_118: ',' kwarg_or_starred static asdl_seq * -_loop0_119_rule(Parser *p) +_loop0_118_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28263,18 +28244,18 @@ _loop0_119_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' double_starred_kvpair + { // ',' kwarg_or_starred if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c> _loop0_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); Token * _literal; - KeyValuePair* elem; + KeywordOrStarred* elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair + (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred ) { _res = elem; @@ -28299,8 +28280,8 @@ _loop0_119_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_119[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' double_starred_kvpair")); + D(fprintf(stderr, "%*c%s _loop0_118[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28312,14 +28293,14 @@ _loop0_119_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_119_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_118_type, _seq); D(p->level--); return _seq; } -// _gather_118: double_starred_kvpair _loop0_119 +// _gather_117: kwarg_or_starred _loop0_118 static asdl_seq * -_gather_118_rule(Parser *p) +_gather_117_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28328,27 +28309,27 @@ _gather_118_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // double_starred_kvpair _loop0_119 + { // kwarg_or_starred _loop0_118 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_118[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_119")); - KeyValuePair* elem; + D(fprintf(stderr, "%*c> _gather_117[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_118")); + KeywordOrStarred* elem; asdl_seq * seq; if ( - (elem = double_starred_kvpair_rule(p)) // double_starred_kvpair + (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred && - (seq = _loop0_119_rule(p)) // _loop0_119 + (seq = _loop0_118_rule(p)) // _loop0_118 ) { - D(fprintf(stderr, "%*c+ _gather_118[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "double_starred_kvpair _loop0_119")); + D(fprintf(stderr, "%*c+ _gather_117[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_118")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_118[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "double_starred_kvpair _loop0_119")); + D(fprintf(stderr, "%*c%s _gather_117[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_118")); } _res = NULL; done: @@ -28356,9 +28337,9 @@ _gather_118_rule(Parser *p) return _res; } -// _loop1_120: for_if_clause +// _loop0_120: ',' kwarg_or_double_starred static asdl_seq * -_loop1_120_rule(Parser *p) +_loop0_120_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28377,18 +28358,27 @@ _loop1_120_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // for_if_clause + { // ',' kwarg_or_double_starred if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "for_if_clause")); - comprehension_ty for_if_clause_var; + D(fprintf(stderr, "%*c> _loop0_120[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); + Token * _literal; + KeywordOrStarred* elem; while ( - (for_if_clause_var = for_if_clause_rule(p)) // for_if_clause + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred ) { - _res = for_if_clause_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28404,13 +28394,8 @@ _loop1_120_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_120[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "for_if_clause")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_120[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28422,78 +28407,51 @@ _loop1_120_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_120_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_120_type, _seq); D(p->level--); return _seq; } -// _loop0_121: ('if' disjunction) +// _gather_119: kwarg_or_double_starred _loop0_120 static asdl_seq * -_loop0_121_rule(Parser *p) +_gather_119_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void *_res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // ('if' disjunction) + { // kwarg_or_double_starred _loop0_120 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_187_var; - while ( - (_tmp_187_var = _tmp_187_rule(p)) // 'if' disjunction + D(fprintf(stderr, "%*c> _gather_119[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_120")); + KeywordOrStarred* elem; + asdl_seq * seq; + if ( + (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred + && + (seq = _loop0_120_rule(p)) // _loop0_120 ) { - _res = _tmp_187_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; + D(fprintf(stderr, "%*c+ _gather_119[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_120")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_121[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _gather_119[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_120")); } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_121_type, _seq); + _res = NULL; + done: D(p->level--); - return _seq; + return _res; } -// _loop0_122: ('if' disjunction) +// _loop0_122: ',' kwarg_or_starred static asdl_seq * _loop0_122_rule(Parser *p) { @@ -28514,18 +28472,27 @@ _loop0_122_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ('if' disjunction) + { // ',' kwarg_or_starred if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "('if' disjunction)")); - void *_tmp_188_var; + D(fprintf(stderr, "%*c> _loop0_122[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); + Token * _literal; + KeywordOrStarred* elem; while ( - (_tmp_188_var = _tmp_188_rule(p)) // 'if' disjunction + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred ) { - _res = _tmp_188_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28542,7 +28509,7 @@ _loop0_122_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_122[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "('if' disjunction)")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28559,7 +28526,46 @@ _loop0_122_rule(Parser *p) return _seq; } -// _loop0_124: ',' (starred_expression | (assigment_expression | expression !':=') !'=') +// _gather_121: kwarg_or_starred _loop0_122 +static asdl_seq * +_gather_121_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + asdl_seq * _res = NULL; + int _mark = p->mark; + { // kwarg_or_starred _loop0_122 + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _gather_121[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_122")); + KeywordOrStarred* elem; + asdl_seq * seq; + if ( + (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred + && + (seq = _loop0_122_rule(p)) // _loop0_122 + ) + { + D(fprintf(stderr, "%*c+ _gather_121[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_122")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _gather_121[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_122")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _loop0_124: ',' kwarg_or_double_starred static asdl_seq * _loop0_124_rule(Parser *p) { @@ -28580,18 +28586,18 @@ _loop0_124_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' (starred_expression | (assigment_expression | expression !':=') !'=') + { // ',' kwarg_or_double_starred if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' (starred_expression | (assigment_expression | expression !':=') !'=')")); + D(fprintf(stderr, "%*c> _loop0_124[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); Token * _literal; - void *elem; + KeywordOrStarred* elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = _tmp_189_rule(p)) // starred_expression | (assigment_expression | expression !':=') !'=' + (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred ) { _res = elem; @@ -28617,7 +28623,7 @@ _loop0_124_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_124[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' (starred_expression | (assigment_expression | expression !':=') !'=')")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28634,8 +28640,7 @@ _loop0_124_rule(Parser *p) return _seq; } -// _gather_123: -// | (starred_expression | (assigment_expression | expression !':=') !'=') _loop0_124 +// _gather_123: kwarg_or_double_starred _loop0_124 static asdl_seq * _gather_123_rule(Parser *p) { @@ -28646,27 +28651,27 @@ _gather_123_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // (starred_expression | (assigment_expression | expression !':=') !'=') _loop0_124 + { // kwarg_or_double_starred _loop0_124 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_124")); - void *elem; + D(fprintf(stderr, "%*c> _gather_123[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_124")); + KeywordOrStarred* elem; asdl_seq * seq; if ( - (elem = _tmp_189_rule(p)) // starred_expression | (assigment_expression | expression !':=') !'=' + (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred && (seq = _loop0_124_rule(p)) // _loop0_124 ) { - D(fprintf(stderr, "%*c+ _gather_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_124")); + D(fprintf(stderr, "%*c+ _gather_123[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_124")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_123[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(starred_expression | (assigment_expression | expression !':=') !'=') _loop0_124")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_124")); } _res = NULL; done: @@ -28674,51 +28679,73 @@ _gather_123_rule(Parser *p) return _res; } -// _tmp_125: ',' kwargs -static void * -_tmp_125_rule(Parser *p) +// _loop0_125: (',' star_target) +static asdl_seq * +_loop0_125_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + void *_res = NULL; int _mark = p->mark; - { // ',' kwargs + int _start_mark = p->mark; + void **_children = PyMem_Malloc(sizeof(void *)); + if (!_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + Py_ssize_t _children_capacity = 1; + Py_ssize_t _n = 0; + { // (',' star_target) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwargs")); - Token * _literal; - asdl_seq* k; - if ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (k = kwargs_rule(p)) // kwargs + D(fprintf(stderr, "%*c> _loop0_125[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); + void *_tmp_190_var; + while ( + (_tmp_190_var = _tmp_190_rule(p)) // ',' star_target ) { - D(fprintf(stderr, "%*c+ _tmp_125[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' kwargs")); - _res = k; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - D(p->level--); - return NULL; + _res = _tmp_190_var; + if (_n == _children_capacity) { + _children_capacity *= 2; + void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); + if (!_new_children) { + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + _children = _new_children; } - goto done; + _children[_n++] = _res; + _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_125[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwargs")); + D(fprintf(stderr, "%*c%s _loop0_125[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); } - _res = NULL; - done: + asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); + if (!_seq) { + PyMem_Free(_children); + p->error_indicator = 1; + PyErr_NoMemory(); + D(p->level--); + return NULL; + } + for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); + PyMem_Free(_children); + _PyPegen_insert_memo(p, _start_mark, _loop0_125_type, _seq); D(p->level--); - return _res; + return _seq; } -// _loop0_127: ',' kwarg_or_starred +// _loop0_127: ',' star_target static asdl_seq * _loop0_127_rule(Parser *p) { @@ -28739,18 +28766,18 @@ _loop0_127_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' kwarg_or_starred + { // ',' star_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); + D(fprintf(stderr, "%*c> _loop0_127[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); Token * _literal; - KeywordOrStarred* elem; + expr_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred + (elem = star_target_rule(p)) // star_target ) { _res = elem; @@ -28776,7 +28803,7 @@ _loop0_127_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_127[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28793,7 +28820,7 @@ _loop0_127_rule(Parser *p) return _seq; } -// _gather_126: kwarg_or_starred _loop0_127 +// _gather_126: star_target _loop0_127 static asdl_seq * _gather_126_rule(Parser *p) { @@ -28804,27 +28831,27 @@ _gather_126_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // kwarg_or_starred _loop0_127 + { // star_target _loop0_127 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_127")); - KeywordOrStarred* elem; + D(fprintf(stderr, "%*c> _gather_126[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_127")); + expr_ty elem; asdl_seq * seq; if ( - (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred + (elem = star_target_rule(p)) // star_target && (seq = _loop0_127_rule(p)) // _loop0_127 ) { - D(fprintf(stderr, "%*c+ _gather_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_127")); + D(fprintf(stderr, "%*c+ _gather_126[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_127")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_126[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_127")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_127")); } _res = NULL; done: @@ -28832,9 +28859,9 @@ _gather_126_rule(Parser *p) return _res; } -// _loop0_129: ',' kwarg_or_double_starred +// _loop1_128: (',' star_target) static asdl_seq * -_loop0_129_rule(Parser *p) +_loop1_128_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -28853,27 +28880,18 @@ _loop0_129_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' kwarg_or_double_starred + { // (',' star_target) if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); - Token * _literal; - KeywordOrStarred* elem; + D(fprintf(stderr, "%*c> _loop1_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); + void *_tmp_191_var; while ( - (_literal = _PyPegen_expect_token(p, 12)) // token=',' - && - (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred + (_tmp_191_var = _tmp_191_rule(p)) // ',' star_target ) { - _res = elem; - if (_res == NULL && PyErr_Occurred()) { - p->error_indicator = 1; - PyMem_Free(_children); - D(p->level--); - return NULL; - } + _res = _tmp_191_var; if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -28889,8 +28907,13 @@ _loop0_129_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_129[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred")); + D(fprintf(stderr, "%*c%s _loop1_128[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); + } + if (_n == 0 || p->error_indicator) { + PyMem_Free(_children); + D(p->level--); + return NULL; } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -28902,43 +28925,42 @@ _loop0_129_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_129_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop1_128_type, _seq); D(p->level--); return _seq; } -// _gather_128: kwarg_or_double_starred _loop0_129 -static asdl_seq * -_gather_128_rule(Parser *p) +// _tmp_129: !'*' star_target +static void * +_tmp_129_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - asdl_seq * _res = NULL; + void * _res = NULL; int _mark = p->mark; - { // kwarg_or_double_starred _loop0_129 + { // !'*' star_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_128[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_129")); - KeywordOrStarred* elem; - asdl_seq * seq; + D(fprintf(stderr, "%*c> _tmp_129[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); + expr_ty star_target_var; if ( - (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred + _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16) // token='*' && - (seq = _loop0_129_rule(p)) // _loop0_129 + (star_target_var = star_target_rule(p)) // star_target ) { - D(fprintf(stderr, "%*c+ _gather_128[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_129")); - _res = _PyPegen_seq_insert_in_front(p, elem, seq); + D(fprintf(stderr, "%*c+ _tmp_129[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); + _res = star_target_var; goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_128[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_129")); + D(fprintf(stderr, "%*c%s _tmp_129[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target")); } _res = NULL; done: @@ -28946,7 +28968,7 @@ _gather_128_rule(Parser *p) return _res; } -// _loop0_131: ',' kwarg_or_starred +// _loop0_131: ',' del_target static asdl_seq * _loop0_131_rule(Parser *p) { @@ -28967,18 +28989,18 @@ _loop0_131_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' kwarg_or_starred + { // ',' del_target if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_starred")); + D(fprintf(stderr, "%*c> _loop0_131[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target")); Token * _literal; - KeywordOrStarred* elem; + expr_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred + (elem = del_target_rule(p)) // del_target ) { _res = elem; @@ -29004,7 +29026,7 @@ _loop0_131_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_131[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_starred")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -29021,7 +29043,7 @@ _loop0_131_rule(Parser *p) return _seq; } -// _gather_130: kwarg_or_starred _loop0_131 +// _gather_130: del_target _loop0_131 static asdl_seq * _gather_130_rule(Parser *p) { @@ -29032,27 +29054,27 @@ _gather_130_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // kwarg_or_starred _loop0_131 + { // del_target _loop0_131 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_131")); - KeywordOrStarred* elem; + D(fprintf(stderr, "%*c> _gather_130[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_131")); + expr_ty elem; asdl_seq * seq; if ( - (elem = kwarg_or_starred_rule(p)) // kwarg_or_starred + (elem = del_target_rule(p)) // del_target && (seq = _loop0_131_rule(p)) // _loop0_131 ) { - D(fprintf(stderr, "%*c+ _gather_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_starred _loop0_131")); + D(fprintf(stderr, "%*c+ _gather_130[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_131")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_130[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_starred _loop0_131")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_131")); } _res = NULL; done: @@ -29060,7 +29082,7 @@ _gather_130_rule(Parser *p) return _res; } -// _loop0_133: ',' kwarg_or_double_starred +// _loop0_133: ',' expression static asdl_seq * _loop0_133_rule(Parser *p) { @@ -29081,18 +29103,18 @@ _loop0_133_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' kwarg_or_double_starred + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' kwarg_or_double_starred")); + D(fprintf(stderr, "%*c> _loop0_133[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; - KeywordOrStarred* elem; + expr_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred + (elem = expression_rule(p)) // expression ) { _res = elem; @@ -29118,7 +29140,7 @@ _loop0_133_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _loop0_133[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' kwarg_or_double_starred")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -29135,7 +29157,7 @@ _loop0_133_rule(Parser *p) return _seq; } -// _gather_132: kwarg_or_double_starred _loop0_133 +// _gather_132: expression _loop0_133 static asdl_seq * _gather_132_rule(Parser *p) { @@ -29146,27 +29168,27 @@ _gather_132_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // kwarg_or_double_starred _loop0_133 + { // expression _loop0_133 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_133")); - KeywordOrStarred* elem; + D(fprintf(stderr, "%*c> _gather_132[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_133")); + expr_ty elem; asdl_seq * seq; if ( - (elem = kwarg_or_double_starred_rule(p)) // kwarg_or_double_starred + (elem = expression_rule(p)) // expression && (seq = _loop0_133_rule(p)) // _loop0_133 ) { - D(fprintf(stderr, "%*c+ _gather_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "kwarg_or_double_starred _loop0_133")); + D(fprintf(stderr, "%*c+ _gather_132[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_133")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; D(fprintf(stderr, "%*c%s _gather_132[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "kwarg_or_double_starred _loop0_133")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_133")); } _res = NULL; done: @@ -29174,75 +29196,9 @@ _gather_132_rule(Parser *p) return _res; } -// _loop0_134: (',' star_target) -static asdl_seq * -_loop0_134_rule(Parser *p) -{ - D(p->level++); - if (p->error_indicator) { - D(p->level--); - return NULL; - } - void *_res = NULL; - int _mark = p->mark; - int _start_mark = p->mark; - void **_children = PyMem_Malloc(sizeof(void *)); - if (!_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - Py_ssize_t _children_capacity = 1; - Py_ssize_t _n = 0; - { // (',' star_target) - if (p->error_indicator) { - D(p->level--); - return NULL; - } - D(fprintf(stderr, "%*c> _loop0_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_190_var; - while ( - (_tmp_190_var = _tmp_190_rule(p)) // ',' star_target - ) - { - _res = _tmp_190_var; - if (_n == _children_capacity) { - _children_capacity *= 2; - void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); - if (!_new_children) { - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - _children = _new_children; - } - _children[_n++] = _res; - _mark = p->mark; - } - p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_134[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); - } - asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); - if (!_seq) { - PyMem_Free(_children); - p->error_indicator = 1; - PyErr_NoMemory(); - D(p->level--); - return NULL; - } - for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); - PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_134_type, _seq); - D(p->level--); - return _seq; -} - -// _loop0_136: ',' star_target +// _loop0_135: ',' expression static asdl_seq * -_loop0_136_rule(Parser *p) +_loop0_135_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29261,18 +29217,18 @@ _loop0_136_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' star_target + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c> _loop0_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = star_target_rule(p)) // star_target + (elem = expression_rule(p)) // expression ) { _res = elem; @@ -29297,8 +29253,8 @@ _loop0_136_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_136[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_target")); + D(fprintf(stderr, "%*c%s _loop0_135[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -29310,14 +29266,14 @@ _loop0_136_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_136_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_135_type, _seq); D(p->level--); return _seq; } -// _gather_135: star_target _loop0_136 +// _gather_134: expression _loop0_135 static asdl_seq * -_gather_135_rule(Parser *p) +_gather_134_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29326,27 +29282,27 @@ _gather_135_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // star_target _loop0_136 + { // expression _loop0_135 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_135[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "star_target _loop0_136")); + D(fprintf(stderr, "%*c> _gather_134[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_135")); expr_ty elem; asdl_seq * seq; if ( - (elem = star_target_rule(p)) // star_target + (elem = expression_rule(p)) // expression && - (seq = _loop0_136_rule(p)) // _loop0_136 + (seq = _loop0_135_rule(p)) // _loop0_135 ) { - D(fprintf(stderr, "%*c+ _gather_135[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "star_target _loop0_136")); + D(fprintf(stderr, "%*c+ _gather_134[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_135")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_135[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "star_target _loop0_136")); + D(fprintf(stderr, "%*c%s _gather_134[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_135")); } _res = NULL; done: @@ -29354,9 +29310,9 @@ _gather_135_rule(Parser *p) return _res; } -// _loop1_137: (',' star_target) +// _loop0_137: ',' expression static asdl_seq * -_loop1_137_rule(Parser *p) +_loop0_137_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29375,18 +29331,27 @@ _loop1_137_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // (',' star_target) + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop1_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "(',' star_target)")); - void *_tmp_191_var; + D(fprintf(stderr, "%*c> _loop0_137[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + Token * _literal; + expr_ty elem; while ( - (_tmp_191_var = _tmp_191_rule(p)) // ',' star_target + (_literal = _PyPegen_expect_token(p, 12)) // token=',' + && + (elem = expression_rule(p)) // expression ) { - _res = _tmp_191_var; + _res = elem; + if (_res == NULL && PyErr_Occurred()) { + p->error_indicator = 1; + PyMem_Free(_children); + D(p->level--); + return NULL; + } if (_n == _children_capacity) { _children_capacity *= 2; void **_new_children = PyMem_Realloc(_children, _children_capacity*sizeof(void *)); @@ -29402,13 +29367,8 @@ _loop1_137_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop1_137[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "(',' star_target)")); - } - if (_n == 0 || p->error_indicator) { - PyMem_Free(_children); - D(p->level--); - return NULL; + D(fprintf(stderr, "%*c%s _loop0_137[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -29420,42 +29380,43 @@ _loop1_137_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop1_137_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_137_type, _seq); D(p->level--); return _seq; } -// _tmp_138: !'*' star_target -static void * -_tmp_138_rule(Parser *p) +// _gather_136: expression _loop0_137 +static asdl_seq * +_gather_136_rule(Parser *p) { D(p->level++); if (p->error_indicator) { D(p->level--); return NULL; } - void * _res = NULL; + asdl_seq * _res = NULL; int _mark = p->mark; - { // !'*' star_target + { // expression _loop0_137 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); - expr_ty star_target_var; + D(fprintf(stderr, "%*c> _gather_136[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_137")); + expr_ty elem; + asdl_seq * seq; if ( - _PyPegen_lookahead_with_int(0, _PyPegen_expect_token, p, 16) // token='*' + (elem = expression_rule(p)) // expression && - (star_target_var = star_target_rule(p)) // star_target + (seq = _loop0_137_rule(p)) // _loop0_137 ) { - D(fprintf(stderr, "%*c+ _tmp_138[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "!'*' star_target")); - _res = star_target_var; + D(fprintf(stderr, "%*c+ _gather_136[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_137")); + _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _tmp_138[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "!'*' star_target")); + D(fprintf(stderr, "%*c%s _gather_136[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_137")); } _res = NULL; done: @@ -29463,9 +29424,9 @@ _tmp_138_rule(Parser *p) return _res; } -// _loop0_140: ',' del_target +// _loop0_139: ',' expression static asdl_seq * -_loop0_140_rule(Parser *p) +_loop0_139_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29484,18 +29445,18 @@ _loop0_140_rule(Parser *p) } Py_ssize_t _children_capacity = 1; Py_ssize_t _n = 0; - { // ',' del_target + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _loop0_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' del_target")); + D(fprintf(stderr, "%*c> _loop0_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty elem; while ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (elem = del_target_rule(p)) // del_target + (elem = expression_rule(p)) // expression ) { _res = elem; @@ -29520,8 +29481,8 @@ _loop0_140_rule(Parser *p) _mark = p->mark; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _loop0_140[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' del_target")); + D(fprintf(stderr, "%*c%s _loop0_139[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } asdl_seq *_seq = (asdl_seq*)_Py_asdl_generic_seq_new(_n, p->arena); if (!_seq) { @@ -29533,14 +29494,14 @@ _loop0_140_rule(Parser *p) } for (int i = 0; i < _n; i++) asdl_seq_SET_UNTYPED(_seq, i, _children[i]); PyMem_Free(_children); - _PyPegen_insert_memo(p, _start_mark, _loop0_140_type, _seq); + _PyPegen_insert_memo(p, _start_mark, _loop0_139_type, _seq); D(p->level--); return _seq; } -// _gather_139: del_target _loop0_140 +// _gather_138: expression _loop0_139 static asdl_seq * -_gather_139_rule(Parser *p) +_gather_138_rule(Parser *p) { D(p->level++); if (p->error_indicator) { @@ -29549,27 +29510,66 @@ _gather_139_rule(Parser *p) } asdl_seq * _res = NULL; int _mark = p->mark; - { // del_target _loop0_140 + { // expression _loop0_139 if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _gather_139[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "del_target _loop0_140")); + D(fprintf(stderr, "%*c> _gather_138[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "expression _loop0_139")); expr_ty elem; asdl_seq * seq; if ( - (elem = del_target_rule(p)) // del_target + (elem = expression_rule(p)) // expression && - (seq = _loop0_140_rule(p)) // _loop0_140 + (seq = _loop0_139_rule(p)) // _loop0_139 ) { - D(fprintf(stderr, "%*c+ _gather_139[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "del_target _loop0_140")); + D(fprintf(stderr, "%*c+ _gather_138[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "expression _loop0_139")); _res = _PyPegen_seq_insert_in_front(p, elem, seq); goto done; } p->mark = _mark; - D(fprintf(stderr, "%*c%s _gather_139[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "del_target _loop0_140")); + D(fprintf(stderr, "%*c%s _gather_138[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "expression _loop0_139")); + } + _res = NULL; + done: + D(p->level--); + return _res; +} + +// _tmp_140: NEWLINE INDENT +static void * +_tmp_140_rule(Parser *p) +{ + D(p->level++); + if (p->error_indicator) { + D(p->level--); + return NULL; + } + void * _res = NULL; + int _mark = p->mark; + { // NEWLINE INDENT + if (p->error_indicator) { + D(p->level--); + return NULL; + } + D(fprintf(stderr, "%*c> _tmp_140[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); + Token * indent_var; + Token * newline_var; + if ( + (newline_var = _PyPegen_expect_token(p, NEWLINE)) // token='NEWLINE' + && + (indent_var = _PyPegen_expect_token(p, INDENT)) // token='INDENT' + ) + { + D(fprintf(stderr, "%*c+ _tmp_140[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "NEWLINE INDENT")); + _res = _PyPegen_dummy_name(p, newline_var, indent_var); + goto done; + } + p->mark = _mark; + D(fprintf(stderr, "%*c%s _tmp_140[%d-%d]: %s failed!\n", p->level, ' ', + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "NEWLINE INDENT")); } _res = NULL; done: @@ -29863,7 +29863,7 @@ _tmp_145_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'True'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 524)) // token='True' + (_keyword = _PyPegen_expect_token(p, 526)) // token='True' ) { D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'True'")); @@ -29882,7 +29882,7 @@ _tmp_145_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'None'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 523)) // token='None' + (_keyword = _PyPegen_expect_token(p, 525)) // token='None' ) { D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'None'")); @@ -29901,7 +29901,7 @@ _tmp_145_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_145[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'False'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 525)) // token='False' + (_keyword = _PyPegen_expect_token(p, 527)) // token='False' ) { D(fprintf(stderr, "%*c+ _tmp_145[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'False'")); @@ -31349,7 +31349,7 @@ _tmp_169_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'except'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 521)) // token='except' + (_keyword = _PyPegen_expect_token(p, 523)) // token='except' ) { D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'except'")); @@ -31368,7 +31368,7 @@ _tmp_169_rule(Parser *p) D(fprintf(stderr, "%*c> _tmp_169[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "'finally'")); Token * _keyword; if ( - (_keyword = _PyPegen_expect_token(p, 522)) // token='finally' + (_keyword = _PyPegen_expect_token(p, 524)) // token='finally' ) { D(fprintf(stderr, "%*c+ _tmp_169[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "'finally'")); @@ -31405,7 +31405,7 @@ _tmp_170_rule(Parser *p) Token * _keyword; expr_ty name_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (name_var = _PyPegen_name_token(p)) // NAME ) @@ -31444,7 +31444,7 @@ _tmp_171_rule(Parser *p) Token * _keyword; expr_ty name_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (name_var = _PyPegen_name_token(p)) // NAME ) @@ -31483,7 +31483,7 @@ _tmp_172_rule(Parser *p) Token * _keyword; expr_ty name_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (name_var = _PyPegen_name_token(p)) // NAME ) @@ -31993,7 +31993,7 @@ _tmp_182_rule(Parser *p) return _res; } -// _tmp_183: ',' star_expression +// _tmp_183: ',' expression static void * _tmp_183_rule(Parser *p) { @@ -32004,21 +32004,21 @@ _tmp_183_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ',' star_expression + { // ',' expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c> _tmp_183[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); Token * _literal; expr_ty c; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (c = star_expression_rule(p)) // star_expression + (c = expression_rule(p)) // expression ) { - D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); + D(fprintf(stderr, "%*c+ _tmp_183[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -32029,7 +32029,7 @@ _tmp_183_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_183[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); } _res = NULL; done: @@ -32037,7 +32037,7 @@ _tmp_183_rule(Parser *p) return _res; } -// _tmp_184: ',' expression +// _tmp_184: ',' star_expression static void * _tmp_184_rule(Parser *p) { @@ -32048,21 +32048,21 @@ _tmp_184_rule(Parser *p) } void * _res = NULL; int _mark = p->mark; - { // ',' expression + { // ',' star_expression if (p->error_indicator) { D(p->level--); return NULL; } - D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c> _tmp_184[%d-%d]: %s\n", p->level, ' ', _mark, p->mark, "',' star_expression")); Token * _literal; expr_ty c; if ( (_literal = _PyPegen_expect_token(p, 12)) // token=',' && - (c = expression_rule(p)) // expression + (c = star_expression_rule(p)) // star_expression ) { - D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' expression")); + D(fprintf(stderr, "%*c+ _tmp_184[%d-%d]: %s succeeded!\n", p->level, ' ', _mark, p->mark, "',' star_expression")); _res = c; if (_res == NULL && PyErr_Occurred()) { p->error_indicator = 1; @@ -32073,7 +32073,7 @@ _tmp_184_rule(Parser *p) } p->mark = _mark; D(fprintf(stderr, "%*c%s _tmp_184[%d-%d]: %s failed!\n", p->level, ' ', - p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' expression")); + p->error_indicator ? "ERROR!" : "-", _mark, p->mark, "',' star_expression")); } _res = NULL; done: @@ -32827,7 +32827,7 @@ _tmp_201_rule(Parser *p) Token * _keyword; expr_ty star_target_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (star_target_var = star_target_rule(p)) // star_target ) @@ -32866,7 +32866,7 @@ _tmp_202_rule(Parser *p) Token * _keyword; expr_ty star_target_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (star_target_var = star_target_rule(p)) // star_target ) @@ -32905,7 +32905,7 @@ _tmp_203_rule(Parser *p) Token * _keyword; expr_ty star_target_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (star_target_var = star_target_rule(p)) // star_target ) @@ -32944,7 +32944,7 @@ _tmp_204_rule(Parser *p) Token * _keyword; expr_ty star_target_var; if ( - (_keyword = _PyPegen_expect_token(p, 520)) // token='as' + (_keyword = _PyPegen_expect_token(p, 522)) // token='as' && (star_target_var = star_target_rule(p)) // star_target ) @@ -32987,5 +32987,3 @@ _PyPegen_parse(Parser *p) return result; } - -// The end -- cgit v0.12 EHra}˴4$H%MdMJ;Y#9`,ad/T ? s$ %6œvŅZkDekYRCۈ4Q3wQ#}(b@ub:zě! .ܫfBְ9wwL39W^=27Lʺ{_x=?4@NC5s G)%  /DT Ra̤=.@C[>o @}®՘h}QA2@a2O'&iq Q$/gōN2MMh Q.f\ӱZlH62m^}}peJ5˱|3B{9탦Dښ1~݅2y J%@:{PÞ~=v;8f95HhWCBJP|Pn(Au+}$MoxjW\1gYGԄKTZ&tFĩs#ν.9'| vA$-ƍ }a3IHU-)JntB4-!D,C,R R$RP!3BBP- CAT% D$T%R4u!hjR`jEH%P4i Q(L%ĭ (RJ@DQ0,IT+ R Q!LJRAQM$H> E1%D %ҴRTR- AE%-Q@L%4(4"+T*%!@A"Q RSA@R5U4, HB)HD#J+(C3BP!$R%RQv R+AChCJPHM1DE@QBҰ D4#KRMB4%4%M(RA;OʹM8"$Cb+c٥༃*i}\5~Z@z!)ħV C{.H*o j+ 9abh"FʤI/>E8I]A^*8BVvJvh'%:F  ٨|D @SKACi):CDUAAC$̍(R @D E D%(P>Bf!;iF i]%:b[xNX@(X cHDԄ |8C1%E*Hȍ%1T'@!Di.J*HX)1GK4fM!JXT@׈) XB4 xWxA@C HK-BPRU!@!B0HR HRjLn:tbKCQ:tE@CZJEZ~NYIuV=DMÂgރjp6?ҁZ+H@#1n;=v܁OlKdxsL8vR \6.$*u3SOC M&؆1A(;Mx1nCc}j0e^ΤDɿo:PA4[y$E"z$d<)Wi;̐ fļJ)w jWӚ#pt*j*pA'LUn {m$~OQP eyyKܺ!7 Y`6=U56AVX 1D=8tCrIG60ɮNFϷm7۷OtxG[PQ1j<*3qNwbB9W ~;nxy2/@>*w PjM'^yg }-aȗ 9/gu~Avwm`x0'DtHϗ~ck Gw$ Rj X6\vCyz{Z嚑m,#~Ut\JNt)1oF#,׾hV6؉hv/IE~hjgMtJ<-&pS2 y \EώgYG vT>(!K0-"$HDP*QAA .LR$@|D'ff$0=50}GE_}lC#NM:TSC* Y%% C{@}?VSopvI1rm,I~v!?$\' P"v.:0.I؝bGxEzg΂-V>ql".3 K:tY?yti}w_OqEfO;"o2Z.l3RJy`do`4 -{4]|ey>XԚ( ׁ 8 lƛm׬Sfq)94"Ln5[oR#B1C(43 H CBzgEG郚JPo;[TNӠ _HGU8s{^NcX |h U0!USև!x>Cg^ o3HD= }= o4N~_Ȁ$L@2Sr} z#ٌF9# Y:kX6Nu X V(BS$`lkz'[!>h5ՉA -l,FAhޗu;Il\RCR@љ'cuN,fy&vFgBAiOONguޠRD@P16qDHL"MTBE RDDđ`"d ^AYm6r[hjrSk)AAӐ~CT` QD&r4g&5:`.X?~LTf*:1PR`q;vd}Հ}";2=lthFQS8oqDDӭ|㡊m94ŏy⦩&"b4GcQ^v5ͺ{GM^MDOǒuƽh~q|7=XnBڙzq lmʷ")831cT$vsQLϞvocʄS{v{7(SWh&ݹgv^Ob =s/îPiv dJJjG:GB;|yDLŏ#V Ӵdc!-7k罖"b`opJi4Pv[^J*AR 4Ր5 Timт114$nE4 .Dc=u^u35)3ϛdKٜ)}`Ua2@#GSEiɔXidZFy f`iHPI$ y]p%36`"I%PsmBxg 2fik?Gl$VHiqU}|@ wc`h|x#A倏aMdY%\dv"o1ЮHQRrO ڨh)Gl3JVAi|LLa @AJ2=&`3a?"Sj@8ba6@d T"t >DG;A"G##Omz/ș_L!(I߂ 8:Lzx djN.0(U`K;(d4'W֕Lr&veӨkn9FAȃ"LēJ`I,ݴ 'f_pHC~B3qP! h RƏpr6H) Bd*(*i۪O@ucC{`JDr2B h?]N$ PR+QPLH IE D |#Hap6yB@ayp$ &"}={n9fzCi ETTT\I]PP(@[-\~>="11KV%(`((JYsT=cx)K@n675PBu3^g/ۃ c9ȯ ٓHVY3FDgqDzHzX] #djzzSo 2Փ-+;mUC߆}%;SC1Myů,)ҵ(=AV% ټ'O --qu e]\g~ڸ X,NѨxd=͸Cf DJ7OHRQMD={I4uQfjP GcQZ͚EF4a 9iXT;JqǡBM~ON@kis.LOkl!T7(sdכnGq8dqJW\DZvQ(1Ɔ93zmp,Tlᑆ)^Ȟ"6'"NB8cԴP],[J %y_cbsMGFN++m؇+n{zG8J/qcich1Zys MmPrvH&WdM)<9HD2xMDxEp0K6 zttf-B] o^\)1 {oD34UÎo2Ɔ|`ƀ;a+0cab)4!K꾈JȠ,&=qwfD NZy+y/ 4yvq}Iא;86;QŽfeQ<>C C$8E -A &C~62qs{kBw Fݭ䢓 $;I xAIN0[gU츪K\ú97tb&BT҄4&H6 `a " 2̥?d-$EmG ,4Rǧ`ͽ42J=56dہFLv S; meَ3TxVV݉m*U2pV:mjJޚ.V[a%կ:3oOhLaس'Ȕ=.|LFfZ o> &Igۜ,C$sՊ$ "? y2G04f=;JI$_٧A//w`yT2&4Ah,vi$~v`IE\WBM59sa>!Olv;UnD {bo;Ez} GGnb"/)r`ABlͯV *,j34*65PgPv?Ý.R7t""c2A!K^&OdwɎ1HnȊ32[qэH@H矞~}Iq4R}b=ر_y֘Yt}%T=M<2mιhFQ'L܍%Lchn~yAƙ __aGw1}C:u-ǏǠ']a)i&#){ B~Hd-?=xubFYhbD@?+F,Zp?F1vADpE4d6'R_H6!D51 49SZ\ɂ%4am ቪMz;5/j AT;V6G3P^kD^e);f3LOk`MEIl)q!ǓYK^្eJ}CKTSSyWFHOdipT@hx>\0xl'>zWZNj2QSS)A`_0{ V$BR )O+a#(h(JB(nh(Re2C_vuh-'v` B% )BiFdtk HH_>]$"bBvD = hhj$J!ٚc:`=z͚yo* ڈYO'ˢdect ʁ'`H=spO4_c r`c3m ``% jaQQ~9 =zn܆3.S7ֱZK8 3 "3=1 Oei7q(& `zHvĚ,;HKk߮{DN1J'Y=م"M* ~y_åMllƅz8mGsw-}XS :(>OO=4R>`y^FV6"("e(D1=b<#Xm4;PTct/2# =YѤ \bFO8B aP.!(cY9`3{cU.Vπi >m~)}9]O1arc(6R܌t0dV ,*p찀xi#Vzh"M͑x1cxɲB!Y9# A, 7 x"ĩE",{9 NeH ʯHBpQ>K J9LͅC <PV@;$9U4s%bRh:?Q. P0j%hσ>n~X0@F)JcX>4FR=0ɱ*KXm'^p`MuP6& iQĄe䄌f D"Pvf@WQ *l*;bS>f;U:+JSa^xyDm-};-LdMg1ɦBs639h@I8fB ihzԺ32ul>ܽaHj"'ŕsz`_! i Jhd;ҏAQNE4$z_F| z4$C Z@xwLgE L^tt]' ac!4b˅ o I 癰z`'njɊ; M4?MB&x,"|a JevM+ <#2<8Q/Mxv$  քt;CE7Jdc  7td) @h4& uԁ3tE>·QPk;Fplqhbt)_3OHRX iX"(W@cUO/D4BA0 $ yq8ia]-"?G9[>^A=>-A:{dq::4tQBR\XDhzwGRR11qjSPM-CBĉTd~Y #4"$2??NCc$㰝dX_`n% [(z{=T昊~XO tbM-$39װe8}M aRӣz&`;7ʜ!(C0cv:uƇT3 &~ufnY Iqx@>(bAv9S 6Ch*$ F|=$Lд/XbE~QiH>c=sKBLzSK$I :~!RmNݸQNGd],%+ݮGxХAGet)YCB{ǥ{Ҭ[}p@'+v8! Xh"D "8VeyTyHIH*E0d(}% Me^b2aFR7N4v7OgsUcbdӤj%cZ!Zgf6n*}|o9?Cfhhܞ ; F4|GǴd7\y`D$t^ f@=vPU_ &F޵֠61NtcLc&CQǹz*r ) GQ D|jl6C  <^yG|wZ{J*b"LLf0ɁB/]?dZ:c;6tcϖh?ê"NXAfDc߻Rd$x66ҷf2 eXJ!20[ٖM9=2 _9&>Mvb,fw!][zmR+"1c\s-1q<ӓ 0Ʀ6+Iua{$1ڏ.O)fl<N/2`-=`ql=F ):wp anMGy Lz¸Xq.he2̑Ufk|ƴod0f  (j*1%{LL4DM$!|kTgc+F9[#瞐s)kkG612y㭂壐Fdy@0"['Yi 2V.:1+^݌ö -L>uۊ^lih$5CpA8i2b2nW/N0F8wcW#: ӷ&͢"XPu޷S'<;Qy: b%+2{$`MӒ8Zy83u$2u>%(ҋ%a/h-|!xsQ3,F#h 0˺7 m7k(Ht5Q D9``e8FGAfo1!B&fh41lLq4!I-hZX7n]ALuF=@efFIAlK{.J  F&F&&aֳa<|v1g=y>ĔX5u﫿f lDUE·1s6 k]젔LPt)"Jz#Ju#B7b6[ l)\1DĬvv'2sl4V*f(T%͎icǍ)fAA*0#,tVlm(Yv6;BjHiM(Ԝ$֮1͖ ȫu hЍTP+\X.XGcEu:INL!+-@-icedX .۶4J2DCHEw.B7`K#ɶkNzRr:B qO&M\(V-9H FcV efsADy(t|ϛ<]supdm1[ɔhJA[I۳yltSA-jWM0ajyVa۴cQBhΰՏNh$jY_ \4(θc4(ZD5qfFtcK9}T"#~vMH֋OgS$HP⡼fэfڮ6kfAN~8b#Op[iq兣p낽a5R邃8maexÍO Tq̈́xr(+ V@#z$17X>ˮe浀T&(s'c/2W$%i2fJ(GHV FMv c#&AiQZl>0MSMB޵8MFr~~1ق%Z˸ʺ#&[b @@fwV1ñc$8umÝ(Aměp'/0h !$!`tKmGx?{ߧi.MȔ5d?4?؀}` G>A(w~UE!(K92:ȡk:lVcdz]e13KZVLlCsV5ȷdC!6ds{46"@DCD>Oaes"˾"a c3./5ǓRo#RWywRvjxh@;8 k7Ir$D6Rm@iXɢ P . (Ov it]'th4Z($<"bleX =b`)Pdt,h*'ӈ7lWB)!СKbMG Ji(#ǨC/Q/ƙ 5X <<O˘RS$$C hgik;1R|^3 :31T_1-x<|jJ=${b vs-=;Gm!`nX6{pN+!JfPnwHRACIS3TT9r{`@?K l?,=m _$D}2дNf˞`@-D%$sR <Ȭԥ%H`#;͏~x xQ@X S/}%˽I鸸|xyP]dM=^yM):CO [`!|kMqUAtd0y/)~tt}Sth*κ /ʢ^.5GK* (Ʊ仑!j MPSGCQq {d9JuDҕqMq=1ȯ8Ȼ @RA}<>)ܿY]( F!QQ(S+¤)B* (@j C`pd)J5<Ŀ9mmp(d#36t]wtBCHTQiDE*h(+J"AfJ&qҭ]%q,`EiS#KJրy]h)S5Oqh|!8 ѶkCHsA!Ҁtui RU,]8e*H"j 4NR3 : дif1blopV "1XRDq$Pl#zPصĊ !)+jn19(PF(ZZ)|{Dscdvd FJU ~W׊6n¤ *\A85;i|b2hi(޲hcafYe:eL_ h;  PPҴCJq'18HH4<6.wD|^"$Gy 2VSv>=*N.os18Afd%ݻdR4%i()) j*ga0s ArYa:#ˠ0yWM1i)i#M@i\~ YO  )P <*vǷ]>tiyJX',E4,ICBSEppc"Tsɜ6ˆA)^`fa!r|4p⠬82|uA40YiF\Ȟ^F:2hGIJD JTtZ?,:#C*{0 q)P=3EbѴb2gEZ fU^\Ҹr_,<~b4g0OxF>#]arAR5Uh6Q{_1 ?i||4(KQjBm,`e$At몐4w-G܅۽?|[wHȼ:uɂL `+ɡn8t/`$RʣZ9OO?7' h,X7` Ca8!7j$`~~iB$WcmoOC$E)B"]e?iH8q?/8s8AlHAp:P7iww &&Q:PXUZԴ ],tTT]Ě4<`dЬT5-%-+@tA%P$AQQ!lA jtEװ ifvPp+J hP@bDPy6י{1J!$p/WXu(\ @(iThUz)Fҥ"%CZDJQ(A 1 %WhzQx#\~Ij$A#uoE0_Ç(tKDGt BP,Q@Q1)JS0 _x84TCG. EA}nZ0l @@ KDՊP{Dӥ(Biq52'a 8l661TILXaqmDj ݰf̜QHP5z=sm`̃,_YSU%Ma x_4!̠x|7]NFNOO7kU3H5Aq %LZS-BD0)@шJKrp%)ϐg~HؚJ`M` 'N9٨$G 1 i6fhr&(pr`uЇi)) (zNPhhF&h"Ej!j`G@R#0 -!Cb4X'wr:Sh`0ZŠ?1MQ9烪t!8/LAIyQ䮄iOd}>؜T`A!䘑gÃ| 47IJJiܴrldD\gDL(t:Mt@k%ȅ:C8䞢H1ǖ E |9ʞ>W?b$8B8ڑrV:I.pX ^P7@r;ON@Z}DyhNI7 =V#FK8yz;ü=r4`ô|Pb | CDppľW0:HR7`wr%W(R8qRn69F*~n& %j؈qeͤa)vK6uQjiw iQxn2f'~x4AqD1WFʏY 64 twt'RwmƓ?QLPSEL5T1-M(TQ H5@PASBI(5!((M~ix)"+T P#h544&"5P`ӳhC-#)>3;N[]qA- 3h Wdb54q]u&)icuzky"R_`ڜŚH/vŷ~nkðqB|tw00 Ĵd  A0?ف<"$ D?!4:|wHPP&RhA X+1d#gdq"0 ϣBk1Zt L0qQBc "v=RcÃtlG6!Xo4DGG $g~4NS bbEGI ȵOR`Gy:"~v1lSX$&age(+dy@*Q)dA|OOU(< PLwLUjgȈ|fX rnM2FJ䓄*PW4 QGsMe Z|1b(Z-mX!oİ}uwmC˕BɌ#F!;"r V?x}gNݺ 1z>S͊5AE윓zVXPmv%.Y#> }/sݏr|g2$qp͘C0ƒbA/y#dCt׌HϢPh=\{ٶu@%IJ-*I" @3Th)'f(" /.]R>n1Chz`]Oy( T'(ie(ly fOɜ>Xc0MakBHL4:y}<& %rk]9X0b:GI@"BХS@R!'o/r%vIpF7J6|Zmr8?3llm$OH|p0Hlx9:6x#ퟢV6ؒmo~Va֠rR$$Ibz !Mr^\Cfm9yS XSh{2tBOk#oq/J| τ` %HA0́U\; 5 @c|rHBd0Ro@a9= Y΅D߷AyFeO<<3Ã'I$Vjc"qݔ48Ct璃SBiGdရ' Q #ey=ci=&rSW&)Z&4栱g6w ZuU9ix%]Ĵ%A7"{:'Isxq<8N):&4OWhme-p̈TY!- 8崵= Ǫ *!%48y) 8G~\XSQzvH#H E?]_ Ru_Ǖ|A/E_1RD' @ V%v}'[>T@ N \TP 1JJу*t!T($JqaXYztPP@a^U@PE)"&Wr {Hc~`EXiH+ hSIJACE{u_q*@ "^'x"AM~̓F3mؔICQLG"IPb"$@':#Ū154TEQ4w|U؋'GÖ/h14G;R}̋i1R@Q!Dë)ilq9ĪR*(*&Ìk@~{:_VfI Tě $`*" a#AhB"R*(( aKH@Ϥh*5!32PShuSAD-&Ӥ<91NL `$*%)iDY5БQ{8rb-E^cvAXEI نv3EvCJf$h*e֙ 6/28JIDTEtlcgfq E EF΂&^GTQѶ,)&ɇA7T̅II%#UT?W8 ,IRcPO)fu 5K@y:Ji J8$Db5(Z4o6uEt5^y9.Rc4/6)K_3)$0)k@!b(+0J&{(UL y8*wh̆Rh;kimIDOAUDDL'B'*iqWc - ]] URAm-E+bI1%AwK) ƭVfiR ђ( hIJ!!"%"lJFˣH@Kj@lYb(h2qi&֢)!+T"McBI(ybht|B  s6U q g^?%!PF"SI]GݠУIf)O; `;Hk3 њ;~ԙ 0hnSUQDEPAQ+N]ݱ`jj&Ctln1CKmX&E-S5s؍sؠLƫ(iXDa0h$24כ{DLφh"( d(&0.|Ǭh"""s03:V,MH<)P@IFsŎ3ǯbMe*Sc3ƑLĎ۟4J0"04 #d|<ώ}&6"Bh(&f*h*iOQ@abJRRkin.*/G »!*O0G4 *Kk IxQ_E֋:gmQ.ITm:J ^|ES#JRQ!B$?o7s9Rd>穃'6o0:=|;#o-qsz]v1&39׈!A'bo36T* RH4/sX>ΰ,GW?JxQG^0ʕ, ZQQQ0EXI"X$"@ӂ4b6cm& )bMblj#X J#9(*3ʁ%16Q}3F`i~>Y #_Y=!*+0 p Hx0GןEȫM䲽ɘRI$Ql3Nڟc@M(  Aa^g{͠uzc`!Oz-x`ԕ jaLL4H@)U*B1?xښ>S|1>f``d+&0 tBzD( _lTxz4"1 $I~o/a yg \&"QDR&Ui:MPP.J%%(>C@'XrJ;d(ѡIC<1TQ1!S*-PbG@[AWonS2p:?}1%'T %@F~Rdp8l8yXќ;EکD븓)$0` Uz{!֎v%e&)$> ];kka)b@G*䁸MX:PC'鏍r?ܢ$D)N5@Ҵ}Ch)DJTt*4 {qQޓqM1ـ=;NR sH>28UAEÏ;`71)Y΅ :KPb:rY b;d .}iX41XƱۻf Secf_pj;GT0m5xG]:TQQwn-EEV;ߪ$CڐqbJj61ю$NmTD1TQGZ:8äR h:1HBp!DJp!_Oqs+PJW"\R(}xe`s/rʠIlN u*!xĉzi  (MTrK$95H }9em?AKb3c jr0#!9):LYTgUYm#3΂0Av><+`4# A-!w y"ar8TGdp4{>9ZBp=iDAGN9aadNP0I"sSH RoR,.2[=-FRģHZABE/F&@8kv k;1rMUkvE~Y+;2yf&Fp,˘)PI:gмKA:`Fns$lq! 860 }ebt_]"R @" 9,"KW0+S'ֻgzK=lhz6(dh.d ,s-A,0 :EC$>a YQb[xxQ`qpj)}7}Қw.=gec%38'93\֘um#czV=k1ż3<ӳ4!&d0zXK-p*j7 W m`.ӹ#vE(c΋FNNxֳP-Lka=pxhqo]J;q X=8фZ12ytTnE t/0= 2;8ͧ 0lGt5yݡ q]nI_f^!Hj#\Z&fkגkg PRH9 2[pFWFm-*\H4$KH"SVrٹК24\,WRj|n]Y/g{$H~e] >P;OQtkG0m܍f86;):> yy0`P* ~9뚈zq(B>9,]8괖d6ćIũt t?d36ޜ, [k; 4A,.. 5q=Է!oc01j$X92|D6K2!!ӽFN;/1,(7\v $*pEٙ8 Y$^8XF 8 ~N0hZUT pP(2PCbA~Zz _g+u,$`] 㘽BB\:*")dq,C ک,$ZC܌l:'~4x_8[yL|fcvIeF `lbbR(d*rWXE#T _"2p@M \qyflᛱVُ*L2%Hٛ4H|ƢfDñ`ǾUT^m}jSAM#uimFwѠjF:(> ?o2Bj̻hԡYbAZRI'O=XX껑qR՝?wsztqgY%#g5 ZvC7}IxeV ἷc8J-) /пCYH{@R10dNVs=k鸺xޔxW93Ȏ`_z09VBÂ6Px^<=" iDl%6d"6 av+#ـC\{Pb_ɧAqF) ?N Hb:32;0lOS8*PЁ!:<ᶿ9EJOFp>tF@ApF؁a/DG'@̸̄b6c*xÀV$ |>3Cxv.>04bpD8t9sd Tqb+O/)Q*I&,XaAJ`e;^LEk̋B5q=V?XVb N)̢Kh-Ez@B.'Ust PSӽu2޲N,a;Ը _~8'X#Xۼd ӼL,Q_GhDoОCK!t877־UFۂi1q3WߌLJ><x/I/ Nr|\SNe+t$l_U[hҪTN1;%K܍?ǼVlKbc.(Nk62I2.%PNbN !04\F$DڄKz|X(1dY}uo$ML#=~˱p9 w^5g1YxƧ$wDN䔂 7k"_QTasMw T8 HQGq92[fn.$l!.@Ä^ԻH%b 8Bٲ{h~!r)J~(E 9\Ƚ ($I  zߣÊ8ցpjT4F=i6{_^ ^h`q5LG_]}8!:wA/{o!.1Ӧ&d|NC:L4[(b ٻιtN:8*U "B0F#jM#՝~tm&>w%'@|Igƀ.>^@4ުZ F:ÕQڕAW0 J{B qqq<`7KiatfQ6EyT|q<30˛o6_P:&oyŎÂRPzˀbY8$7 CVi|llmwKT9RiV/!ǃ(|`pG.DG]lQrCFYx- Y5P+D@ZBınqUF#q0~StJL:BO/+I  C*K O۸dfƜo/aVC.mq9%K5} V1kX#m.e츌oqs3ExlLh>!q$ЃFpk(ԢϾ=(gecƉC9 B }3YcwNvn^8T\>>aY 0<; v1n n 7oaC H HsXh$S PJ#2M0,TD4҃?4+@D* D> !W)2>Abv(wu'!c =9a>x}KGtXlfmF3 hg;0S: #v&QăiBNg3٠hވk[x́ m.7H*º# Ezby⪲؀c"7ѼGl<[QlZWXgzmR6E9]BHAuM7tA L3P@+j̨%reiӑV yc|G{q À뙮9NQIJƂVa AӓfizkA9B<``hS,\R:ݗIN`RM8-3/Z$qʩx qm^ z<+uĵMͽI T)ǽckznsLǑWIQIZΌSI{з15u7G .m46$6jBc(|>:zft/֛[Ux *  Ns)ɇItdfbw taN$?!h t78^hqf  ~yXTFtbZ=#|0S鞂̧Î<͡)zCH䨀\X4`cVsh= y[K{qrU2胡Z Q=TU蓡򱘼 wQFroַ#L918p]TD^Zd1E-L8UeUPAE3G`IǠ< b~~ui#~z9qe|+Ӓs)@/'kz̜7n׬èNhwz{ \%ozr冭4&_V;jZ QLn;^.͔W(^`BXNPMD}g&!nOpD)`&&A@RRPTQ@TC D A$Q9 ?֌cWyCӗ9hӟ)p Md {MWc4L%0naQ Ym$a e6hd.o"p*C`FhqP[.=(5<03cFrl^1؜EOz 89>q=Co2Ჱȴ]u!C=qMhU;C#0D7P9 9x_3 q2HO6&ӻ{ٻrIPFWTB]!\C~GO^ӫ)/(G _jJ<ʄ Z38%Ϻ> h 4%M#y*-6l8kggƪM5GJ&<t =&w>|򓤋orCWOGuϫ%E=/!+( m<7h`j`oģCwzpf>GA8$n .JRadt'+y3!htP#J8!"!66{AdlM;fiw}w6:i4gM٣'*uu;Ew$"z=jƤte0"1ftp!';=Q )09xpZ`-+v4!} >_=~]νނ ьwg#9x6RI5PБ0Jx7/g)]!(oUS0# wm`aCNV= NMoa}h;u~#O_r>wÝ R8t , 9>¤" j( Y&J`E lbE$QJDAJ4PP$PPT4bt4@*clu1CI$SI~Z()H"`R$db( i %J*p5A2PP4RMTf(AJiHp$@ZDQV9 f̂!Z(!!43STM$QSEDIQ35EPIUAS5DTC4)SE(A%+33LQF`uċHRe (̬V(" 8>!P胤uP7NNy<15iHbvPy(%,dElqD.&iԘkNqi-CO& h`B!4R&EakJQBGsEXB:.rv Q,?sFX)tiB1JSihc\6B@7ӹx0נho=$ |EgBҘbceL j݌5ї0Ed&QeDb@QrԾ!㟣׮l(: i¥>![5:ZW)PQmqTQv0$Dݰ<@q %L9K8jRP& J2T sɒt0꯲&ӰˆRpvġid@ lh(nz@cC6KWhq`!lag k:]}lAؕkBʼis[̜Y9_2hkPS&2D??eLN'j'< %8ʧQTÿ`Bˀ.1˜p`>+zDF aÔT{7h4C`SCqz8:ެՐ0GL.dMEs:G57(̴@g ݕvJ)9bR1 ?Nmj "nw4O @D͍㎛y2MAi>PqStbH S( qD 9+A;xH7*$H"mW4dN5&xVezȫ  ZB"/332D1CGBk~<441*yAyj#{,`R6m<,Z"h`~#81Ob:ɴp93c|d*B * (!Hi31(eIBD,e Da,^ó!Y4 ΆwbcݡQ#p fAlZ *kp/Pu-2F555 6 T6<_hq,39`H$f^! ,)Œ]) 0Di:H0 LvYV%߱lau[vtY$ !y%+ɳ/,Am9 wbK7i"1(t bejjj&{cQ듒 Qƣ` /ԩvo}9@"$O5$h>G8j!΂!S]gww!fy&.0 gU1֍XI 4۸ %ƻ 3<= 1hM[5ĴsPS_~ >߽7s8)q8hd:2]%zH5 V @* $pG/xm>s@(Elm&qI&w{Y0BR(G .- , w#dHuQ h〘i*~0@;F^u[{2Ad$Ax<<^rg; !81 JBX\XpH8z8,:4!aca@L y*h"]〡ulS0iJL@ ],A(^4rh;٤92♡(@5p*0ֈUޑtd ,I $逛vLң)Heę12,d:!L&gYVo.K 9iÀd}UA6bU pg\<x)D耊EN\L[pZQ{8bd(R {/oE56)H/0n ֶ2u;J,K MĆ)3γ,7ͻɇ(cIEAg{ .-8{&Cg8eΤ`@AMD#&4+ m4졾<sH_4vd9 (tm:'̹ABnC,NJ`@*MNX ,k]n:r0j*2nN3d`C< v8;WTӷ\)"qE gN=nz*Dɤ^ȰpL|iӇY_mvYwɜ濍sf"yǐTΉS273ZLƖ&$6OLSy x1<!ƒl us5"䦆{lub9ۀg8c#5#S CNqM@#c A֤e'1N2@i;sEJx) pY]Ŵ* Φu*Hm8y9iC M;L!RVN1񰨹C[ wHSDX"  E 8}8;:ЗqhvpOOn>I!PD6RmOpմXm'T ;ql.?%*{BäZ{p](p4(Wc @sp[kBJI]IBε# h0sqȣ"}flFUEEIyI&FniFˤXLͩxx!gqdb5 !]Ħ@EfsK  16aa,V!0VndèvX о AYWnHDG;m*1bBHh(d aPθӱ{4ך=R@@z9\h-r7v28:a**Φ2=h86l㵜Fzf"ȻRmBhh:nwR4ǐ_63hMyN!};B)eؒ-d$ 1_Fm bIYd1x;H!#dY Q3 ir.{&Y LK郲_4s3xFCjV g8D1ynr(ilF浬1L&DDnl2nnjH?@xmDEX!_xf0J7ֳYp0R+gD4Hzj^OXԃ/fb'Qdf iP)M2GDPM|PϞ|xhǕzVN 05 lhc;2ūyZi !siaCsFnIiN}Or~gZ?ʹ<dƂ6li>δag@?OE*YcxHh4 ,N֐:;I:{aaFi@MD (P%U/5$Ծ E Nl 10O*!B! 6Ja{z(PׅL Xs:)q c y料nSOsO:)ExI$I]#F>Ol4Wu{y{uv+NuƢXܙLOPPnkz$T&:FFe&j=BFF8F |@hZC)Х 1-mbX"Z+ȡӍQZ60KA QLc1Kֈ uЄ.S77:4R{ϡ&< ZiGJƻ20yP%` =˙FfĖPDQ_B!:)U5V˾1p:P E8:#RDhjTji8HKpb Y*ai#4$jw m=;E;+c#9gݚ y{Q{mfL$(Jj!Pą%*RnHZoz|βkA5+&IS,`&A`e*Y6=5b !V9xĩ`DpRkCYv^z3:cȺÌh&,pk]5fS*YsFjZa1!NF^2#tiKY(9yo1$C2) rk"lnڦ)!r\FF& 5JkW\vͼQf:h- B#e8:P7m)GF@ЫHRL1"ұ(T6Ơ6`=?Rr;"H( $" iLT%!H9ެ_'b!1X0i1 ~Ps]=[i 0>ƀ\QgglnP" cߺf).ҎdMl J̈TF-P]b"d'v*;bLSUJ6vfi.D`9 0lJV6]pRm0֩:¡7"+W9E 4=(6l*͆Cԣi6iY+i'Be jb$D]!ED k qLM`5(2 &Mߎ'GhV?]a%1%y~-:Tx1%1PU haA$<R:׮6^qxo 6#8ӆ[d؜1:pHYg 9Pew-'xLQ]mآjьw'>:$Ԝ44xwvi(|P9 [1[4TlVyH0DKAoG6wI:<mɂXM$RD?|.1~/>"G"=fPi+3  8(MCi(&[5PCR]JDt)C S@ 4 Ig6 ch%3q&CEA0-wA"clH@h|&Zۼ+ETG|y(y PBR҃X9]?n_Z@ C @PEHR0 EP% ~J=p$G‰^ԠPCS 'rH1&ՊjFҘnggHyhT1)˸*xB(i_DeMSJ SJ+IJ}đYDDZBzЏ!pHLʯ܃0#a{dD3 !h*@('X@(ԪR*Іi@rNp-t4J2ERZP *SB^Jt]@.>t_%_`MHy J=!IKJ*B(D䫉PzCTh)|ҨhT=4 7*}j2 2  u9 d }A.'Ghh>XcAvTK.Փ{T0g"kN)8.(|%Q /L'[{:}]-z:oNH(H")d (]dD6J⬶(TwX~!R?i>ONO`4?\vJJS%V7 Pdz"(EMk<u϶(@C}ɔvd+OpMIP%&è (gV @("vg$Mk"*N>quY%+`0 )܈wJ ͻ?(;$pm2<9#K٧| Yځ5ٝMO4@Zitu c ߼ MY,xMa}Ga ~R& ]j/6cfCh5`M `&qRGmMuepEø9q9DU2#cki ư k "KGg\1Dig7v9M:Xqt̘Ff:O8k'M/<24mW%}NZczmW`]j鶊`%Fl4ILC]Yde\rE"<4yǝXcpd^oI7fcӔ$F@!n!FL@ѡ4F4L\+Z"Ɏi؏(1h8uAm!Uq~ڌ8 )7n[N 5&.^DBlZ:EQcVGpP\0'_.5*.BSc+0ƃqlzyn+boLueMЛlTA\؝g8"xl;`15P֮uN>7ԿEkSRblKCX0xG({4K DAFv7q&j4 Q2P[!18a 6쐶:YGö$a5M~3#@bA P@k@i@JW@?&bR$Oց7e PR%TO =GCJ(_JъB(;!4UHaP;ȡUGJJҋBJf(J *iJ:ETDҔRf5%q]nX|.~؈˿IY n/pC@{N]f7z@m+c4̟V"~ Ä^]棿"(3#' ؗEQD՝1nI3ݹۼE654U!*(ś[VHr a?U ê84p 1 my2@!D_% ?<=/w~s*96a%40:CjǔQUIJD% DN8Ƙ;SzoN̯~lJD ؍=݂(sODdv;$? ;rPSʣ) 1aˁ0OAQ"C/W|)?jRPDRmCޡDxH}G߰rM?qBx r 0!A_=@.߃~es[Fۙnjw V!8tޭ# f!is "YSoE,)EP!!Ի}o,&'˅oe>N ˃|>4})$hcZj0M>45`hfE"L+5 K:U9qVrN'r 5уU4fEA[W-&ͽd^_Pk ]"hL@3 À-1$VڼU>9k|Mn'[]2=CTNdU7)6j,%CDr۷kۜo'OOT,du6n؂绣1$ZPQQb] BN;u >7H1BU=Š |zGֵ IO43.8A#uΠy:'2Zv1f()DaHcLwνv(Ov a.7`qO5uIGHaxXGx7:I4A^#= l.y~~>?[9"PiP;%)f[mTu6k84iqDFR92*G^!X:BKi+7l8F\',O"J/Q ɧ_.ZJHkEeb3MR6+Z9?~BBi%@4 a~"*Ghgb~b:O֏|l,Exǃt/9vsIH11%D@Y-VdEݒDPḿL1c0j  AK@,F2XtB#ZMAE4Íњ LRT6Vv3SyJܧ욃(4jZ :uKLR%$TwxǃGAco8 }JI}&^Mf(4K];X!hZ)@o.|% D2DTqA 7!ԔC@ .@ST7:kBm0פ~ t^t|QOL`H6cL })~ yh6,\NC/BA V rNQl&Bntp}c̥ C R#E!RJB,C0DPJ4LȌy;^|=LP4TPTKc}/ԖV4C p*89hQR(Uj| UA@P( ѤVMKx%u7ʮtÈ̯{nOÀ*)8`1 %:R ): 0ZF:>u9U#a0nf(g|}>ȾAIbreOLQ׆<<_}jB . ؠЉL.`w#z>~?g˦ZmXHC4ĈGi@4057 AXh9i)H B 5`% &#mG]0\o '$LT4lKļW O|0;+};ջ[puz5QT9@x;T$ & (V$`=E>[F 6ݳfA )5Zb0IKxԴs"< uw#=|MgQTQ rhF&" !ÿ=b`+*_;FbPqdR!DM1IErP!(R='Ⱦq`Y^+J`4$ ! AقhRopDaˎ{5ǯ ZdHM"REUfVʡ=UdTb6#QB['dIhJyDu;dZ|$SI09׫}~<{ocΠ Ǎ9Cwk3v#K";sp[6Gk 9x/Cn_8/WsuA $=~ۂ $" #?v%ꔑd? "M=O|Dw"}x}P8Hs5:g0AnIi1G\ 40Mq6tB`@ݦ2wf ޡy?)49"}w'@뿿#Bf󺹨({K]jo~pT\`;Q2,Xh9wp@J5$S*aB,NIt4At4&D5Tȕ$t1ps}A4Dp>%j$E8 !ņ<0M e3MG@>Щ1"iB[#ClHRv9 "8 PJ}DcEulcUfmۈFG6 'mLJ'FG@n̹|,QiM7@Eh/rh|#d˃mͪm >9O4HcZdp3^6&i}Nq3bgr!8=6TRI :x:ri vt+m1~A}k=ѽ#80t@R!ih3݃A|=$ CLbg̨ Rz9/֖:ȯ}\i"SPU)B|P^`Ҥ}~ rMDsP`GͨHț?zLSE{mr|~Y78RP(PܹWA/(U?*"B("FBR #cu ")!q@BAgYI  H` )#EL15vڐRz1f;,Q4;^9ۅO𶛟s?d} Ɏ1CDOއq#cW}% ӘURۨ( A ?|V98ðҒx/;ԚL(O`*+I`TJĤ5,5*7rȽҘ2 *zȘ"$*TM?!J.`)=!Bq>Rbh2V@݀ \Ѕ!q'̈j$(8G{r*)*IzUDݗr` }x']6yDY JP)Q9@`"J(0mw߳l` HDτמ?Z""A  T La 7@!Ì:I87RJN€G n68!7XOoG`u 3PH00LT!5bAB {H??<C6!Iьj&$0Nr$Cr.Fs"߃$OOI\m pQ;5YXf Ea@PlJRT`J@J7_Љ䉠S//ִ@hymjA3Szs_N\?˅ZF!(ZhšE6@H$R@P QU4$B`!JD@"9M-V" 1]C$=פ9ر3~ r+Y% ZB_dr-=EH#@PHL R! ?Ҡ V@oo!_{ .o <+V=j2P?Q0^XwL"]m[cgGm\3// %S;͘$X dIL1$ 772yxW)<.ܳ3Jx \èvM_C K{W}VM A߆w= 1L/[zMZ1{]! ()qBVƗ#Krfv!FaY&zY:lmh+0Ѭ:=y#퉨IFb̼ (ac3 )-&q%3tm 8?Xo{;^v`LP 1DLHQE$أj^Y A8 ֡vcⴼ*0mpfMkzxS6weM_ t,֮ӇX ! Pk E:#e7zeMu.'yt 3CP)θ,v=X1MtR%pccVMv!6Ge# КРɊ_sSH(@|+b,E(n"6`DuGxq⢳"X9+?=c}ߊۚ`w-vC(W'I  4:qfLfF+ lif- mj˜xSOeh=ixڹU9Ǜ!Iֶb{Ous$ZUi"ĤtT"'0QNOrG>L8< t15 Um>74u43 !m!/؇+vWs˔cgGvv`n@x1*Ra pUed9o1~nň(nG븮n TFz7mR}_[}"31Vahр^<-9U<5o kO`PӿqK][U{o}61l[QrB2W=#<wth(tؓRTQTm$mUK`Xrv i*aD@=ӭڢD-UIP\T {x਌a}_AN?^@c Q~JB6N2bgC~hHpxcCf$=<#ܫE̩ (YHNqB Orh&<W_A0c<8szo=Oz&HAD4 |<8#Spg||?Ƒ&:/A7[mx@44bDzzW CșhGBi*)?Àf!0='vԄ D)BVB80)Ĉ31UHf)О@8C@@KL*DD&fL t~;@JRU"@4|*$Ǘ »ZPJ "i2HDh`)@ ~O Os+hOB6 ~,g`'r\" ݶͰ|QQ@ d u O}R cflFw]̇AzzLz Q"PBu/y\:|_ʱu }M<D=>'ݏX;_u}nj `%s X`4}weJ7xڿ3޲ʨHR=Hrp+|i % /=B,|WW@'%RW|%06VNQP + бr *7?őLha|@Z3(d[履qV!cΟ0dˆ9*2K=}:KYU" sԴ4|~M +/wّ'X2AƃP`v!t4Vq͗bLjD$|Dlfu?O[w.N %}H*q(EDl#>L' DD(GYkDneO3ΥL8Шl>JgMg^K! c ѳG1Ͷٽ|݃@pq֮s*=I@U1k8n.UTQ JaxTE}܁:=}ͥ~Ǩ\ρ:w:k[kn|FޞEƅܽ5'^G~{.ɛ׎ "fmU! "("|5 M@γY󾷽ʿk?)K}O Ct;>3|˹aSK/ϕ?7~K?̷=wkzϣ9zΧCӶ@}/{S?_^??/nSrB}O8?7zO=Wrz]_}`7OnC=i]ow>sz=wc? |?;v} O;o]s~_oÚw{ї_ﳵݬ/8sOa~rk:?]{NSz'm{{=9?}r|->p<?zsܾi_{]{|o _q廅oxO]ܟl,@y_|3!| :1_ LCz#_~/-v;Oz-Okl:N/aK^W^3~|W\^<'z|=NA~A=Poe<_| 8~^_c=Gkn?0UO9w3_7u^>[n>Ϫwݏ^>_<-˷=vӵ~wtm''>zC/zo=?Sa,ߣ=nfctk/ppy7߮Y378BG}rg={yuox/6v~C>">_Z^M}\oߛjq2__=v~]o?;S_;wګ,~/} |/1x2r>uxG|m|o;vοm=1oQ2'[}_=ܿ'v3ߗUzw2:.~_!~ngx}n?-/9~|y~OY༯wO=_rqsoGo{C?ྟᄋ>8|[uuoÿrmuOi{ckxYq.L?OSϠx5%wI7Ko~6;7<>wVߥgsh?|~Ǡ~poMw{_?w?_컺:/}{޸y_{i_Dҿ#3_]zm;8|)z6r>{?wrnݩӸo%3z.Oӫح_O~s}wclǰz.?['>]Mվ/[>O#OŽ3!:ӛ]#^.,G~߂ry~ M{O9=nלl^?>~~o|[g;;_K~^uVvw;ݹWyLgW>kz.WC}<^BOS#~ᅭG`>/ރ??Gg?ߞrty=yv}x ;vlc}˰5l@W+*!*/Rkx$BU@j:V@ ٶ*Q|m +QEb^@נ4@ٮ/J>v+d=|{۔m>PҔm(PU fPȠ)T.H{}zZ cb DAl֞]<=̔A;m,5"gFIKlû E79$)M7ZAUA"h v@-**K|} b8ʂPPVJH"ms jYYRJH@B'loa=:#L6RҕQ_6Zщ=C @4 4daKm@H *+[CSwƆ@Lfjl1@^zMmS 4 ((QvF`7(" P ((@)AU@P*+} o@ /m1жgMP7]bt=H鮀5]e =vƊ탰 93OK3gu>mqQ֚R۹4-IyuC{\鞗UfYyӫu3z{گu(*Xθ3d{ιmsc+㞆 w O;vg{wW7g}}2;ƒi25ޏ=P(WUR;Pw``&PA)z^SxQkSFl{upݛs(  ;kۃsnr7gwiP <%S R{aD!ն>%z)QRǮ1=WmkN͌uYL֎J&.K{wQжMjSww@p%fh ` @b`UuK &{ޞ]ɺsijť 3p-Em_ @ ^p<۪ eC"3"E;p&*um45 G@;:U$g\t 4uvͷW@:how;m.(0ڠEuMԺiEvtzUED)65%6U ѪֲWAra z.v ēdnʀ97mwtL^G9ՃlhZaT֡vGlY+[[V݃-iX;umB&q&-h\V+;z=;뮹W85Xu:3ViTVtsy;/@ ɰ,nl>{{ki!@SJ^zoujvَ)ym]4JzAEQJU_C Tc( Rom K ;P\vo*&7t@,3Fa<' PQ4={xQǥdwނOX+A-"\+7K{탥.n:Jl77#tꭜ##KuJ筶 Unh@MM@M4&LL d 0iB CA42F5MSOSdSy44 dɣDRz))7)$fFѠ"!1&'ҟzjzz zOD4m@h d@j`zOHɈ 4D hPS<Oii=&OʞꞞ=@i4 JbcU L^8  ϙ4!ef#G]dəiIH%H?A]S񓌗O9:'6aBH2/2JuB:I@D*P "erS$ !H'XPw* TPJDE( `?t.0C ;H  _^^8@g'uGOW\EuXA>J'qUUC~yp{QPKM)O-j߮2ڳYĉ;!?T?MLl M_Y |7IܫRW"~5@Ho^uh /m`庺p/a6]4SM2O (h8A3a9d7Up~FA~$?y#ټד#G.g?NkwG,.0HPc\i'LgEnCu/TEGᗲMΓ5%!^LFftl(JrcbRGHy(6z2^ Mo|EuU?Y >sw@'WʉEB &ܫCYDQ W?ojn H#ڧeν}" %(/ivǻ8f\qon}ՓSIL1=qd i|GGɣ< Q@1JCvryrُ7T "Ɏ!!RĈvʰ vQFEB#7}&.z` !pt3fToV)JQ p^PNS*7(FD}LT(JȥߌeDF1"$BDSgݕV+ՓM;*J\`5z?0M/b0B"dv2A $24 pE3=Ygaii7ۼ*.?dK@}J'Qu)5f>G׎~<̗3GAq{{Q41ZV,A mL|a>~xvst41$G2~Xٕ~~8AW&>̩ .m_~wg?>]a7}1 IMϜiAAZzp4htu|@/E#0Ӊ Jcp>i}D S@]|ҰUTrwBy"LxGBKhi ?Wq3IZB"hVEcꪨ?쟺 4 =`}L?Iɦ+/v3:(Qb;}ߖ $\n"$Jۯfd\[gyuX:!8v..S=엗9٦0bT){6x!I8'" L xMhqɧ;|uQ./\^FIAE.'Bl/<2#!W ˁh"ӔwxEUN=6"/غ;1)c45O2dvR2#Ia|eu -~>q~W|M-S 1OK*H:gw?$ߡ|UT8`6D$ `(0'r0͗ٮ\aNϫQ53 A@z"1@N=xq?U)EUmӥ{NHyIDaD-?=sP@)%ʡJlb>w}0 Q|4oI=>oJ iH}Dla ?鏸f8Ԗ=fYCN\^!x J3)aGk<ϛR*йG0qؠn(:%?_g3^tFM <Π A*,:}nKKRJLߵ(EǼ#_.B~T|zEd\}Չ8XG6 Lޏ!A?XD0,<-mSےxvvuu%)`Ps5҂ }zg{ ;\/Hl̟fkYX:u붏'%s !53sw>:b;$SdS?Wk∂_ ,Gg?ý^OCN#'W=@Մ7?xw~'b 7PDHCQgO ,Ȏ_`9X!äQH˫+͞PiCT᣺*(p?3ibwE݀v &Dk?*ܻW"-V40|Ãymt |[r17PP9D꛱W5FL IȷO\cQ~E0ôORB'Ji<(@rH W^/^DH5atJ/@;p|ZL|Mhm4+[RCEfJFKRwjY 5lz9o){(H`}rLeeAI#-iFAŀ PWێS׏s< `jʏDJlJ -ʡlH}U/>s9GQҝ7:]fLMQQP4+0Ƚ a0e 1hn@BqۢصfND ҃膻Fه/{%j}w. c~ŏaof=_#UM!><>Sx"|!bFXM&Y|E*fq[aXƆӨ{=zM ZH7er"G>! 9H/6Zx^}I9ɡ۬0須@.`!mb4P5ƁOU}h}d,}@YVUW }kIAPV 1fF 5W=fĠkE${fAs4Ӡ(8%)!(X.QCI4ۅûJph'u6E짲Bz (u!!w(%ق M]'_X#-*֣A/a"]x~*7bUW >Jd:GO`nRH~a(#\Ntgf6VS@LtSMgT# a}T{Q>%s8 c0RR yW\}S jo0xЮ@r@ĉ?38h?ml>!ڟg8?<$ s}롣O~Nx:WfY;_r_"#}ʂI#s_Qb[ݟUXDcaPlα%w"4\6 Hdc80c`7|u>7Ow3h; CG|rwXNEzR| ?xH&z>8LM|~̻aC˨R;xuh>x8CuhO?M=Zyј%%~Q,DIED b Whjd$Di#d^;A2`EN uLFRor\>wϷ>}v BHaz@]hw* n}^̩ÙbJo,;Ͱmx8ZȤϻ#6x^kE!()\VVgmˉ7FX !F5M99[Z ]V9u>wH8|`3ڸ!5 N0e,NSE(ʹV,GA5[I qL,7IFTYl5\;yWbbv¿K^Piv/񲢌A) e9 gܪ*𣵡N;ག r/g{7>%q$H/ Z~/f d= C9a,?ʑRsSXp!Mqbyš6,1$H:C6g1>1YA8>#,sR)1Wy]Mت#U VpG3Y7*62,X$EWXYq'Ƭ!W}<}:Y[/嫏 R%d p!>[n*[i0?Q|+o (6S=UZyDqp.UUOlqWә͡Ѫ[BRi.Mt8Al21*A{&7Ȗ" 18DQ2_#f 1ȣ5_;`a z*90=X>5ݠfpV_estY"Ũs<E4R {`4Z믴`#[_+w[#gߤl:m,@?WOmc N+@HY Җcڑ-}{f`=5#YQ%h:`&А*uj6cQ`8ז)e q"0ZTumPq\<ܽ*̨*p#;[bPWoЮ'9>dGC9i)xrrT`gқY\5K6z¦LIoO%S& ѩqL``¤*aɍl0V.'J%D-~UDihs;^!9IȦ;1]޿owv}znNjeߟzHQ,B4B@2`=l9s (䋮.Q1D4u9rem:&x=8l '9SlEX2N=x˺e)Z(d$"F @B )  Bd#Olu5]࡯5#m'ܢC@A %QLH?F+ ϑC@b:GG~\0;1箪m.]4NqI\`[[VD_l6\K P}M}(Ş6dCj~>3 wt'עn)~.Mxذ^j=-uG`w5#V (HfpAղ})cӆ?f7]RҒ0uS-Aʃ@ajɟb#E,ztkxI23l۝&X;{^F{.gK7*u f&o/1$l.gHݢ^p'US|҃;sʙ3 ,1${;p1e-;ۂB2<Χ[<:|Ŀ bn҂ 2CLu&$_H6a*яbA[[꽞c_3ᡯG6u\O}#kݵR0u(5FKkLgnP,rehm"2n˻m(J 7Q3뤲Ynz,/YsP8o8oh)ɒx[=ŢVV,YΙ@d\Ł>Ftb=?·Nt61;Kh~`sz))ֻ{Mv;Јa ʨTyDB }'vaEtp^zv[NeaUE4+7؍2#јGlQD@Pi)̈ϐ?5΂` sb( k^+ޛü:8n9] 3LH,>|W& k1q gN@BLJA)fI^—BD ui&`WAҹA * 1ĎqO=0A{a:P@x4#; ')A_?2~?$ M$ifZHi)٭ x ށ:;>>iJRô&PH UX@wwoEsA2">zۧ4wp^;E vH&; 㛫*s|28בNk=<%xY%u3=OK]4 * ĴjS$}{si ~*rh?&O)L#}y3!om]ϐ@J'J7{1}@IA!мg@ FKi8&&vO8b%!翎hsP|rD .=4Y B^1s^ TI.(kgȗa[Ig0KդN"04dknIsS5q'`744CTsތ<x (2Ͱj^_E\Ӡ"PAlwb4aN'ԡ+ qQL tħăDЅC" "!@;QN}[WIO7@Nq]D=s*&*^.Ÿ7IzSQKDRP/LPŲJ(=S3IABR1RD2TDEPLD'Q Rʱ~?NU!ABP(HJ4@*H!B2 ?C @&O)HJ%() J}%GPPQo߇:N?M15BCKK3T2ܸL5APETP5U-DT@S]1&)&"?:0 $(hlDvBҏB銑aAI= CJEBPBDPD$%PQT1M,CCL4W(75D4DQ:)"R?j (@R!b)"b)ff UULTALE0yDE%#S1b *S- TTDHSEB4%#,H$QQDPILTIEPADDM *} 38JX% &i(Z  )BZ4h)Hh*d"*( && * ƒ1b4 $DAEEQ5TQAIU4ILDELj(((*dYM2#EU4@QDHى&B"$ )H B*#gTDhKSDEQP D#A$IRTAQTLADDUDmI@ILUDQR AIDPDP%RE4E31QPb JQLDTAI-R\0ReJ%4 4}|6d? -RB 4% IL9(JbF Sr) i"P\(GХYHP(?ٲ+B'JU Bp4uBJ Ei@4 :DiP :)F)AbZE (S#~ +@4 P @RH#J'09j:HJC % yZ~GT4>t 2P=$9%*dnO`pkB@a!Vfḍ,-5]!>" N7 Q棯Pg.?:WEz0&j"Ї2CTf>\)n8 ;n8M31MLA( /P$54P3/5s4eAw+nQn\`dl-g /ұi:59rqye 7RP% HE{1!5/2z0iycd14ٷL8fa_h[aK:x# "Cxos^EQ(πE7(]&*; MTZ44""~O; 5Z3wo*.1u XVQiPGL_Ck> .5flI!  BXJ:o+AA#t1XN<\CL0t !ם7@̦R(&n Bg^TM!%@*0A C=?Q]VNߟr^eVVЄ'RTW|UIs|Ew0`;Mń`Wzcѱla83 Bwu=<9z-aMh袁s4->AfSn> ?1ܿ*RDw/3l E^u"{00u#F+CSTύVq}CzhfîӚhX/K9v{p!1+C$ H Xu.~)(.H2s4Lä|c@}$A)Q @.{>hK,wCcB`,_v owPO[zf1WM>:u1+sN$o0`oNyspZ)`>k`94's6PNv@CB}Kg^j\FaZ[%FOZݎ9s^`WҎ_hG5lˠjۍƈ$ ֱ,aL2tDQFnJɮ70P-͐{#ORo@ZckD铮x ||> 71Vp.ku_\079|.Hw>=6vL嚲l=8jض>}[>$?b}6$hq36E U2>̎3#D/ P0P?Gpՙ"d[܉64}kL.嘂 8pv?X{P q"g*c|IZ\4"K!۳-쁘|#D!กhWcy@XOWt,`vO{5e1vL}o~QCa_FY6}f'c@v&fd{ &Fx[үs|:=?a<xA8wy$zG+ixRYb" NGYgy¢Y t u6#R32h|/aZ>!`ͿlID(r% toi} 40<[@)x9Ɣ ́#6ajŠvb8vap:2TeLi-U~VwoV+"CoIC>Nuwp{XLG5 %ŏnW͏M X?oS 9>ڇa ~D20G#O^=ⲱ9%H V>K?Kxi\H$Ýӵ6Bk)٣bͱ{;kwnW({-Ezgq8uϧݧ3x;[{R9u`C7PTn/Jy{٤}u~'q"D/qCsA.*â$aPCgE}ٛ'BU O[qL˫]tz  o1(H":s$`vcH!ӽ@..{=]h3)=pG |5 w܁$w_ ;p?",DZr )H`S+¼%`yp`{T0J{M=#oֱ!CO#9*{ƲqGRc`c>+|`p&>zhw}! GY7RJC%ͅQ"I8.@y ~;j!X|Wb>̀"c"tLZN`r3a#,Z-=,wyNpPc9 a@9=t=|/,9܄{iR" a .\H (5͸zdxjbKaԦ&aNW(A"A8OpS(lGk"HLo+ []bӺB Mdj)C}M 4~~ QT1R~,KGt<>!-VLϞ">a/ֽ`P{Q.%S -׎7oAMVN=*cՂ4yY`&g5nAT GIi[NT@[ל(:?|;yR s )Ja+H9V/ .qMnCGp T#Z)EwiL KK@$t^ՂD׬Z,j߹n5{?0(Hiu@gZ+|yG˅ vڸ4;ﺔ }`ŀV9uضÎD.|'{C>G$j Pw숁4q0"JtF* qeF6 Yx2nm*m)"Rx|Ŋreӭmr*ڎqqqzn.\ ,Aۚ^`Ze wuϒ $ݰ: 3)7+,&brHkw|a|v".5,#NrbɊAU=@mw!f}gA^9b0ؐz`u+(~ENV i/ /QA6RdC6j>umost41m ~ݛl!Z&d $>!0j z=?zv!{LS|iLEPR,|M#?/ IiI~& l-=&P` 8}Cq1ZKe ѠҀ`pUUUڃԃID&Og&y'i tE !˱$BkZ*q3OVhI.1ݓ7t>5!6FӔ7Jf{ /d9~} &Wy88(Ԡ?dslm ?@kދ7\F5Dn fD @ěD9#HflK/bBP,1Rj@ |C>j8b! '@B&|4b@#,5)sU`U#ylT{25TNA:>G-oyvujbXPK~~,d -1(B"()H** Hwl˟.\_.seZE,/#`TV'$&eN?-xh$N:cL4(I"!Rg~Gɫ|v=B"+gf¨h9 ܹw4M^؅:}M0wf1=#sm6zf*U N >t~5ǎ::d;稚`f< ĴDS@EPQ$Eiins M@P%PU%%1%T,4%P4,CMTDTE|ZӲ6-,LIIE\w;fN;`7 _BA"42H< .Hh e?^uUIL1EDMCE|#4q྿# hPk6,F[}hB.QwO(((ӌ-'-9q8 B!` (ivtwZ"-w)טϻ{xt폳x%3DQDAB>̥)3#2{ry  -T@*!H} \8,© 1ɪzڇ߫V#8- b^:"T%/矚46E 3-}17 }ze 50 +ː8T0 0%*EcH'y5 jd4lVy;N\5)ek%e(zSN;'I 0?K ?H kxE2W%HXF b 8sx: P&7A//^:'Mhf'G1R$P#B>ĂPpCsaIaIu4nNR$`(Q;ĺ s53;3z|[d .1Mv%zB_`4Pc-^ \mów3u갊$N6cv#6b@oiv~w0ܚ-%Lv( GNkh9`lxj $X& tH#.o맮?o<67gh$HᨠwI()!O;6lpwbA0 <3ظ;Q!^2dyRn0":d>,G ! }ݵt| / [m(Wɧ)årq8 жģ8.ŘeOnVO@Ut7:@ $}1E-?.`6wӯ`t3)Ѧ5E4P?a hL#%β!"`C $['H4DqC!*$ţ$n6<i`Yj%(:1S֮cT{a:())"J &*JJ j)(3 PĄME4D4MRSU#l,h)j6OюQDPĄ A9 dM ]94sEoR"]sXA4VL1RtR"4dw~ڍ-7. (MF@56S;ὌiUe?r=3;_gq"H Lzk+[hf > CE+GϘ ϣj0I%WDk61# ndqKKvC€e*)@J 0)iI(/:;sY&5G:< %NVuaݔ z5[8窵7<ݒo^s5TigL^KoRbRu1@lFy6TcN1&ǓڤLĪ*`7W8ѳMϸ[3F@puhh`8C޼p-h8i lxx#cڴOBcvlDXe$yBnUep 1cԍcmoX^i<ͭ1 cp\&"fH4]ՅcH't7əDn w/H(?숆 2.>]d%l^,/:d@ΜGy$@ߞk޹kI^gi9Von^87XGm7^3B| z݌1R(^݇!Ƅ/b C ~q~lpOX"$\@Pp|5gZ Xyת>~(>5onWXج㡙20s45ϜygN+8%.VrZ@nʮ|-Wl޸r8Xăsb;n!};c_)BߴE b6@>I&"%$O(4bZ2WqF6)sDFyq| #0c Νgٌ-'.1=qYNЗZ `!Bk!Bs:c|N[kY|oQC-{\llN)v܌~sˁ!=sa?lV } nXt|V^f"etkbO9,:w9[0Io#8uY ɹ= :Tol3NM B<A9ݧF}Vu#ۡ;ќJ>[!Itmy.ń0f\-u քbFY"$82^e yL`(9+EX6E28}9!ٙ(SqIUmuƈɲ{ !cXî'b$hld8&9#6Yq;p&{uQ8ctV+AQcqU3>R}ᶼ.8 OBqDj!TZ"*IEqǑ):=],1#E{ o=wxL"\ 7Qks0P<C]2gC}ÊB 8YYUmPFH7w[Kspʡlf4'p >u wf{G{>1dq;~]̸%ԾLC#5FgjHwM%dG1XOcZ l;"ϰ;nlzȹyt@dC] Op4Gqrz7j][fz! ^Lp!K{KKd;󱗗Fec^8L kfu]rU[(lkO$Dj*]av>\Q$qw~vvB#(uOuUaB\M& R!:cmǷ{/;kX&3\ k(W~W,Kg#8ˠ,Qk"1'mDP ³G$a)dbZv.n&5 TA$)"P:DtvcWNN0zw숀rg3o'),E D:eWc[B3)yb禲p:gd;l1DfRWb,;jX<,ď|n $[cT!jSYurC[3>|T4O \!3p=%&=ޟK9HMkĕ.gIk]275Ӎ43HLPPNpPˉܼ Gs'?rFyVG4Sq#KKj!X须6KÇxMI8jU9+\e-,5n7cu~=&Yl/Qʬóֻ1sd;vȚ١+n{EW{r!L 6kt1^:$佇7UY#JOT%'6Ae9'F{.ܛC9C)!__R$XWf#!';Ųx l6bGBw Zq㑆sF|91aQ.9ΣZC΄+FV1ϪˀםM>Ek_}CSEv: <ܝ[l s<82YȾ)z஄< Οv-tוYi($x p0W4;P%xF?zA2=32?ȉՈ#9S<;:z9h8̙p]S;۸#6C>":@c(FXl=!$t@w*TrT+oξ#=n8@nsNpGS ͘?OuB^7ݸ#B',.dž|n8a^UUHSn ]Gr9rf_Y qеpr g$^RxEbZ•'"-+H, Zw8LW //,j—E^"F\`F/'iL*㰂ץ8x(#G㧞 8YnJQN9b#nqpι}/NJ7U=o,:5]Ɩ>aFq~hÓdI0R$4Gx BYBb¡лbecsO!Ex[yI6 A  (.|A{1:ܛ?.j<RA "Ί} _5USKO\!az4e7Y9GVXGXrB~o]_g/ƃLiͿ- =v{dCS*AMP ʡJ^H#+ap ?kA i-9q3\4*1R8%,<吳V9ٯ`&=!kB<|dW7Jf@WOZӵ@CR}o?fr;Ӽjx^ (|z [-tbp䴮YD1(_QD\qВ)1%ӉZ=l 1lKL0 i6>GZaA$n,9]>Vw铪^-kSiuNb6 q+Z0zd9EMc˪.;4quQTH$-c7`hYt`Bs&X`HfH֣x-n5F@}juӸU$UVO.678h5z{|%y[2\PiY!LI^ACLd8*l s NF"zS֔ʂ1hIV(ˁ :_|Z 73u2|Z;ƞDh[w|R 1##yA 13$Z>EV)y,i>T҈}F}$alX#)Ixz!*P+Rp0Si fƬTqC+hAU,)l-m筘Hߔ=ڄ.]Ol'jC9X@⩕ @Ԣ- C'E?7:9& |kqXADR8eQ2# {C+0ı /Ogfb¯8k[I hY^KYa5G%ݻx-FR4h0 ,mE5Jٔ<$cڷ 9ݺ w秢0-JĀz}aGR:@bʟ6[f*PJ%2pP A\T{D Wp19y,}5).]Ad~`SXΚC fhtթ_Ny ^:4F2Cf׳m;Xn |h@'  pHaMyhއ9UZQ<8+Dh V1xS_Ƕ r!_}#{^MQ#GZt]/*t;מ&9Nؤ7 0YfU4]M4ٱ`.:MHGeH*!`7rf웴6Ebd(t![U2ў 1g) )JC;B[58Ä1H$hÁMd8Pp /|zՃ" Xeqw ߝfGOODPp]Tz|U>:g%C?Ϟ ƞ043Y|˺?MHqޅ<5Xء`j0~QR,չ>35]pF崾Fhkնx"Q;:IpifCyŀXɳ.ifcj2WM 0< e6ą&$^Afhj]ǐgY\Ssxw)+ַyO QbI  #e/?fqTAܜ{緡I2nsoܑD=U `aǎy~7jg8X{3; :3?9^8ܸdzbhb?+u gezڗj 2=9c/= 8L%ArJQ<[uFfZH4NҀQ$|GP1wI `ihd*Fʺ%0*Qs_>:И̭t)Y [l%>{30v֣߶8~cFawY‹ W> =vEFEք<$68\P%XYBW||ZpC!8rCy;;OyFcGr#X 3|=X8a.N: +;<"5 }ݺF*$vሆbٲU^T⭨0U(**F%P!LwvL-!&ڵ➺9o2q9. i]zBS5nJJ0uӷ&3 ^)=mafT6TN x,`%)jR|9 ih]\51Rh:ݕ+3 r:'&YŭQKH樚L FCgLf[.pӴNt4M1O 夫f&)1YBDv*6B٣3E/3LӺbԍVK4L•TB ԣJ"Z\ BNxjFcLYT\*ªg:k8ߚ,G;G ;UXiFl˧ѶhԼPWZt&Vd kEr&]v..P%*%ZauN^DpW_W'$5.~ C'N)ox>F#oLH^R,BTcTS9PK $qfgq`Ъ,u=F+^n& `c#CCEhepyAeVr?[}~塱O[M#NvL0SaՇMuvCPiǾ^hP#&?Xq ZE(n~2 Xr1J}n~"PYS'I1JO=h6)jFhm ($ tj7s4jhn|F0W;Y"A8޷&2}.bc|HHd:pT@PpuEqg$[R+Ay#^uW1 7{C~(0^ =1aE; o01*~lQ#0:oX!t3 flGODtnJMhlɰ!8p`@\pʰ Kr"XCVt3l&OwqgIZ$)Q@qf1(k=w63f@H]H[v.vm\U]MrR/#Pkdx[$!#!<qmZ+,P@.H 5 F.`e/HoJd.I1ߞE՜R *5S?!g=9,3}l!$ ڸ&fA]u;^Jcb\{ DK"}?.ays'I0DlFvCPǒ>׏jٰ8ގ)"S@P ݑi 뇕-c>m|<(fsuc|ߟ%MHیHo0ǣR"[*lln2D5``)J2h&D H찧6{H}GwopCC;xC`/{z_cۧ''//>sJLF~ |>cO(xsW9 4 gBvn@D &Wvw4BXE Kj@UM 6/W?Kf;J>; 6i?WU O 70"FoED;Yx6I$Z@QےeѪ12ѐ.AUG]U;Ւ`T%!@a n~%:zB0 ֮閑j~Nt;f8npzzšm`ÄJ$V ңvDt7ChT9A1b0}y:  z8$$eFD= I<5bn#?Ce/,) ^9+CrEPZxqN ~`{yvi=0Dssg!B3Ԯpڧ_Xon Dn6KIzJx߶<;BL(ҶjA%KD¢wW/R`aj> wVGK+B@ۡ*A!DΎi=VZuA6PZx7jWnCi o<^]:2 r`ǀt/)4nbV6 &>ֆ-&7mG3_.:k0l^D ޮ$QWԨtXu#5~\K\65>&ɫFQF}EBtG=vJL )[1H3–F UN& j)Kez@ n %/aX,g'yf:{c[h63`8rJJ#z?0F 2.l I" RWlƒx쨑hbM(+ez(g#0S|Nš`rQp?,{-sWG)W|P HSXG_P.l[k;KD.пZ=cm)L@7t[P&g\ ǹb|̆>w<a8#6Z _rob&RAs 3i=`td@k+GN :w!B;,Vnۧy.YR,]~'eP$tBP]_ǻG l$YCȎЂkE]g52qAb 9UQ;8ǩ7>C]ًVCAzr^W`+]׳ D%鵩.;IBڢMPɓࠄ9T^7Q!VwD(3x (6qq:ItwC]wzƌh}ǀ6b#HA]ʓwUuW\BJY(@ҊtּP0pGDz?ZG?Dpx.}#orWH1h3ddp) |u m8ˣ9!`IɟeU$(2 >'X]:mzb2HJ ׽#2\P_TfH+̀͛f202{zٔŀaL*q*6w+۲ڏ6S%<T+v.; Tͤ Avkre:Ʋ }3TK(FInyWEĀ&@mԅ;t>ym;i>C6qXUo\q"膓2 86b1'rve'q\L:IMGj8O[N<5 ľ,͟ѩ' í?1gnm :؁ >W霿vr%h4:Jj-Ĉh.E8 XoG~Sybt[$ rlPrr$(TrUX eCY(: VV\Q.V p|Y#G%bv#T>D7U^7!5AKJ І( uŲή1V&1X3M@R U 7g!p(xyk|T/N@}v<倭>[er g\rI%`wA7YY5ttf,+"0F "VXS<SvR>T ^[[Q \@!cck?} $W7 &Ѓ Zl/]tTRkDv:醽+REh};x \S/gN%8 cu.Gv8h#_.y.5pԭcVg$:3*<‹xc(=lg5bla`KVYkMz㏿&E^(`Gץh\d3:6QFÿSrX&BgQVImvy>9=.|78@N6IG`kWo :nYF<( )4ax1 i_Ԣ7Z*uРYPSA 39@Y_qoʼnP>2!~$B'ȀFu?X;>P5EpM٥CueVlzkjj~ #>D#Qe5 HNnkțQ Ͷ@zG˕[TlH-/k $)ȯy0Opy}`/s J]75f]pIPN?D?lqZ ÒI6{偌z~#LD"2`ʍxXs̼GJEepTk5:5Pi{ I)X :F%Coܬav>c顧F` ;}b!ޜ|qG&ÂA0a,Af *~_ Evź#CUp,/>CG~Ί2ⳓ30@sn-TN05`2`PtIΰal,3F4/|ϋϓ ! Cͻ54A"Կ#zf }=8s|Q>D,MvC 0UޟK῀猭p1L x`fÁmE;RQKcS7zJ8 VL Wձaj'=TC.nЌF޽P@+Va!MY wU<9yPIot/XBN =\$2AwA^.@ O9Lj% x~[miŶS]m`(+Ȝ?==lqo,<.K0!4X tSuu!HY:Y8C#c#q97),-8Տo\Nɺu{31SF{w ~2A8%":cBdq| N^ލqWp QR(kKP0э9vsJDa2;q oָww๮'n$B S88S/cSҧs42Wb൹!{&)d HQkSLWS Ψ$_ AStegR1ʤ"5x=I]&;l涍, O{B pq64cr:|jڭUHSȭ@>ؚMXWJPFTi@?WB-0 bk/&@dDE@0aРd@ FPtmv.^WOfq Q[ |WߴN32Lu\..#ޞB fiy4yWl~d ?1k׈#>q!}&PDrO-Mݒhi)1aCӷǙ Gm~`Ƅƥ>o Hex2EBjI@;mJ Mo0V @ +Tl@s}5=ע͇ƣ*n |!K0<+ RФH>kc;Q56'ư)5+ߘpmflf" қP(-0ND1^h!%BPA Pr.XdH@ƚzNF)9^ˈ< ^B.i-Z&+1\!C};~ZJ׈>:s17/'XzLh,$" q%"t@ C\l9;:seω)BYgfR7CcB (@+/a;Cv;T%ߍPe~i0b2& 1-iy6n8q&qVիt A`v@QKVa;iC0GYIQkR0 WCo<669IYsHuH2[ AGa(T,!v/~5Uoǘ%~|CH#uo ^"AP#)аE4|,   b&Mg58鐆?% _K8_p]Q2Q#2.taXr-Y|y|(@=}=)V;w6r1|^e۾Dc$]4Mg[#'G 6jX6="$bQ'#8bӂ7`?5/\48]wȑtFehXN?ǔ52( Ӵ52#=ORWԂD9~ErT8\ ۠hʄNE纖O{wh{P`̥\ qG@뮽K̴9q @GTZ"8#t6p9ǹ.0gnv\N ) rEv2_f-h,n4eb3o2J tFcsoM}yPu> ?ex0p@:ؽYaJ~kYZɾEp՞x )"IVEd˹ep$~ȒANO$GҚJ䇒ߣ"|!Y '`3H}OV_cKxԤY3?,gRϣ |-Xd;wt[dg;0/D,Dx۾އg^UIn7},8 {Rv !:䀃t^ab52F); ިV^`DXO'."Xd \$*?EGxʭ_FʦxC%ؕ1,\]-0 2B橣DD(DX[LmB/ ۠"H4Ww R$?;TAu#hىUM̝ƎG`Nlįԡ:=2v >2}8FBM 0:%'A|na,үObބ*2.W~z;VFe" X L>@ nj:t 4=QBQ̯f@A]"1=| ^.7r帗_7UdQyck2aj `G>:Sn eJ8;ƪc0DHOTH \D7\dħ#e!{dH=Gơ@ Yq phQ&I3d JEeTJIHT< is‚\Z;1/#q6ܾzuYysc+)CH/`v|hx ,-`*AyQQvlb H9_"ElVܠHeiB#؆e8 ޤzD4}жdd GM/#64+^NBJ"H8)^uNİV7US (vpȯ`(t\kMv{ L4@#(ocῠz[[0pu园&꬯e^AmO= hAJD;sA1Q ӑ@/r$.<09\ ל}qкKxwǬBc_Qf#nN-S+&*J :({A=zY4(8yBj': V ?~9yZJ 8W`&㭢bw2-wݎl,UA1v{b/pDu@R&e)y'㠝իg% vE!r"dQ2#Cq" d3Z/> "1ߊSM /_0鳼†qn%IR)?L \$cT;CӊMH8teSK"(\ñYL:"fdQ. xnS\>Wޓ|S\ve.t  ?6<C*0ď>SǻwA45DJwg{MAuϝflHB Y0k Kg.*SH%Kr5ddp(_}hoD]~;WJdȄ1NhHkvՄ~&^$ A |9gcLH!28#e , A4)Opj{$("_zbɑ mtFM, ^+Nb>knkWShYBT . Gnq9H6?#Јq*x!t~?*b09FzZe=O'g%QJtaQ^_{٘ p}cqt X2An2ƾ?l)N0ѫv;cOe{|LCDʙvPSF*I:~:@)8h%e*8_nw_|I(&xHSa=^b 5W"ED 7"Wh`EE߳pghy#G+Lu#=!$ b0 `Ae$5$Co3Bnl9 j˘A-"r6ܳ1v! d^waEeN߸>#RBM0* f#Hr Vs˘?`H>.@D"Uo>A4FFFa=_<9` O_ӄOZjv̌X"JEv{57)<0S4q8\ hDb7Qv;@o>& ".6&dxAxyK4m8gHx`Jvt:6 УtrB1ɻQ`B"/{8H˾ BB*G}^5SNglه`K!NG(#YX {?wJtx"tF>O]PGE2g_V@.õT4>)dЯ-dh5֒IK^VeYq>sUgh6-W8poMy+n'pʽ`Y.H|Ks usqmDM9 $Ŧ֒28A6,{u#4 |]?!)AŸ9%S"F<;_8*rG Fl HL]E;PWO toOJLjb%n 9`M~훺E}$ng~q.u'?IQ48}D[:vEwl86v(-RYx]D˛(9#IL?:8WmFDeĕ hw/>~$`z~|BYX6feuI RkzXah N! iWu$eT)5}ܐ ɚzI#At#Xp5ӡo 瞺EKX:I$cYIKj0zQu4, ~alٍ7S@Njv`~1[u ԅ{GR4>(u>>iLq%Ybf֧}mxwfX ?Utx*wC?\2)vKNg=@~D&S * _25":V9 A?9x L!A&@wqQ<͉db2_ yk/aJG&|>e[Aa%!@|jnۘ(_` t9K Wg H\:5v=Z">PcϽ_}/(0i\Rq=ìMaA-ʖ[tQ⦠HϪrr|}C(e˦Ch_ F`㫳Tj @fELFY'p!J#[礹͠ G˃.`x e=vx "8Yڿ!vu;B.$N89D==ZE?5Hgk)5-nްs#륹\hx)1b㾺=TenG?"B /Z>r  G쇿^Eqؖ<OeQ+c&bMȠ=@qpA@JbS%!]edqfa%(  B 1Nlύ^k,&rêyw 䮨<%S5?>z6Ģ4}YHdk1jLa!+Y?4M ]Y-~#0G0WR}ِB$+g׋οU&/71"ZOQvìřنŷǭG*P`XvU1h~,%~NEqۣ(b: 784͕A \@ߜB11 dvq֯t$y_:lgo<]c\4w'%ݱ 1xGM"5k;4ܾ[\Y(DRD>ta4]ZlģHt:emЃth@F5?EukȝNɩDK6Ӓ;ޥPqݛG4@ZI r%p4BO(x*%`xÌlۧ4T 9CS|m;|Au )ItYCz/ uʃQ9%#4W-a\1U!WH7q4T-w:,־eS^ڳd$37mT 4rـqæw~ ,◼|\\`‘_ZQ!<=u"#X4x Y `O8yNDʂ$93:IПu}\h]Sqr-bᏏZL5^mz6oq/W?d 9 @n|sHaw^>ge #4p;=H$# j >,ow7/.0nl2]G>aw]%3JT |:Յ0̈CkTv`EBUOԲd;_Pd0 Y!Be(ϵ4WSp?G{w0u\@6<2Pa? r7އ]HzJ#@"wx6yCH$9O&=KBb&,Uˇ(_v⌕i!ȚaOnV)Rs%iq1sTT7?_}ƷysJ _}xۣ.eÇ?dLQohSA3#ռ WnkRv:~+P/ECeׇHiF2A 2-TÇDt0Hf W},#4꜊HVri7ZOg_t oZ]l&`.§RV @*/8ب|[ʕ*.uN7qI2hEM9] *P0I Dxrfpf^a]np[ H8OF?aow3|4/N/1Mo2תAf-GCx,~GG! !rp8MgE m"H6&Yōqk>>ܿsxmطiGj~@0d,/m;fŠ(Ǟ`.'$q1Rgɨ|A}}Pmk'm#$hVbu}n3OjxcuĩֵjGO^2>2d IIcg1`minW1LccLߧzglO\GL`_ hŻ o9a \Uk 6|PLIX/wZLiJ [Ƀt  1/8#% X1`Tz<= 'y!|s#[{20AϷT8Tax8GWé9(DKT)0`#.{Ldbưi|vi߼zm{3?4ĎAHhė@r@?5"ۻ !7Nű8 JRK Z8gPAh|i4hѷ9DS Ͻ)!R %!AB:y(zAț.Z.#4 纾9,aCA56$Y T Pӄ 4VB;HDsٛZ6FHT+L86g-9#^# <:8CD~\xy&@!;~Wuy^wI<[VU<48RA"bqRO3Bǰvs5RN/Ş1#_1k9KkhOq^XoԵ7 a ;AC(]B|2OpFwo-L>2PЯ@=h}t\{FEit&He,|[.!x<ڈE8z0ſ۠o. НUMw衬?c 嘣3 X|l;}Ӥx|S"١Gyކb Գ`OOfv0:kjwn2#(2P݁Nkۖ /.~ى:$ξwc|O*;*!@HvN(UPxX=Szzy30T9~$kP5/i'{ @*|q&Ֆ`!'xqe:s;`!S;BB# /p xQXCC9Qtr]3aK XQ hri4.A;W,71䎒\HL׿^ؙYF%FeN#Lk㛎d B6 -P|alf/b-fXV`Le'8t> Q,F=Gk2lw#_}>Nlg۶`a@2n{EA9:c*H{B3cBxf.(^'BG~zTac1'N2nX4H(a0PL8m^k$Ao ;-voЄ8Wl3!_n:a{8c|Iϊҿh9Tijc]|(M0GN_Ê7M>_0dZAɾ Ho)/97Y %D X 9N.415TůY<`t IDUa]ww}Q /ir˺Sz(>Pi#@8XAtw\QFy ct[AM䢠QӐ|Ć%s>uoǘ5S_}G?ͻ_ =gF?A VKQuO uI BP `Ix@" aʼn߾i6}8@ D$[EàGӿ<(qbCI_<q7`,S2@CT&'fW^:;7la;J&Ʃ?͈Ɖ;Ñ2$G{Balb;!(F0P=1T kld+Ki5ay}~1Rx]Sr5#$Zi-ö́ЗFZ.MMTbz I l"f̰'ལP { &ZBvG'|8L.V=|l`/QOtW!@yKt.?h*=ҘBbQπt8YۍCNOPwI*{8( 4չHCz!5 $v?_z}t[1 uZРȼjo/ߌ?琖ѝG &$51<!;^{"G`)H.ma! W)}{Mc)AA% 酚%'v/']k]<P wy(>#rXj8/Ifxl<Y9&I<0#n4Ƽ[ -!9׻8[46+bwC }l ohz\f/,%ïG\2}, y7պѶzdygSZmwgXvC֏pf`%c#+;-U $?s Ują$x{Pk D`7b !#gd\zCW(RD%Q5+gEN$4ŴEx| cgk(5v 6.)- EICc_}T+bҸzvډ(Rˤ<:ņ$Ѳ+2(^}mz4~HN/| hR{~rP)RQP%#psa^70Q T~4l  PCɐ?pH\u+fH0QE3Fcf8$Fl]BFuwChFg#J^_oQWبK !톏٬)jۢEr*vpv)4Uw<]eclW>Sdh eFZ<6j~Vz3N mCpMJ-oX ec5;@_̊Δ4~K vrtS~[HŖ`lGM /$wՔurab C3Pz1*i;UbL.V o^Sp8i)M5q,&Nҋ4UBB-HO53n k"-N"RdG6ƒo10衯L9Ҕ{jptx׉* Ƶko%D)9țz7 % '$BfD @R:eg-GWmCWZ8}ayꖲӔ1G/y0Bٰv8Z { W ȡKTuzxm ~LYY.:䈱zU8gh? _!1THKw*NX}*2Pxh5J%O}DHF͐^tn'dhu]x0CFL"k%t[r6(*:SїcK^cg@PH&OV("(B_;A]NGl_"`E 0n f 5}}I kuLA) k\c%ZY7Gn"ZX}t`{\וit;Wl1+ +;\6}>L _}Yݰgt)D+xV&Z3a:iĈsD{n":D-2obj=KXI&yE%Q UQ5DUQMD-!EД.}silB _k UWPu/);ǝڼ}xCj":QSp0ᕅ!"Dyӄc.6Š: a rm !bh@* .PAiK2^#UcL&´_eʭ@}-gɑٗؑ%ؠ'*o#5Ĥ2lJq(ԄunyP.KVG8$,Qob}PI^T7Bp`1=Bo"+mHbHR!BM1:|v(4<{}R%K;|r{X1dLK(FFb!nYIna " /0os/|N=LON? ~ju#tVieɜW|9ܧff8GBRYԔb|aw>PƐBH;4z1M}3{$hln~npz;Tkz5ۆiq[M׌SBY_@6C ($#WNn,P|S1 ͕mXӟh/]s:*86lU\UCD$\1! 6;JBIlA# "G("b1/O$}w/;gnbu-܊?okqi߮'Zʑh$/&qcF( Ј;Ĝhs \jR42dɇZ 1~]PJH.B % ;\W9^'u|Wt#/ EL6uшRߜ8lkkT,`H 2#<<"; 0$0/`QŲ?;4 +I$q n؍?bk/X{<5A <:"Ht)0#(m7^ !v-cqC%dWbIݘߠq+.Kz.> A;AoDH$8=M]1j`2R=Ǝ%?%ӽ!aY #mû7(鵪0H"yH#qѮ!JȢr~U<0c'̋& RƃqVҴ$$FCsOϦђ܉V_}N5 92 '#N:@y:s  4 8Z<\1*) M@};#K8z5{~q~˼|0ȎڷN^ YJX*hN2QKJTr^h +16Z"䡭$%U75-~ 9 'BxO)yCtX9-QJT"B7%l3S@g5|Ј\?8!\2CxGOL?Óۃ'&@ {1b^L <쭎`[cN$;<-+NO88~yW}cQF6Y/B~6;C8] c7Ad-K[Y F&$ETۄ;9dz4xl!3u4E{Oqd(]YtGj%Y.&衬^^5OmYK1 8gtb%WNcyJU?wFk/^GHY)P$20(>qqb>""YJ'\JwN) qXͽ w1Үf+̸cpEgX;MXm۲sy"BseAD.ɄԑC%`s|nf--zڹ+\ZykkdX۽;Uf9V‡㻺EǘΣ'TcU̽w1e♮0lhc,9 ^ƶFb`znSyzlwX;nF qX9ΰX"D3s#G}G'qX:~k5$d)1(wCxrV4g:bKp|23=&!)N'< RW)kz͓^[:2ϊl e3v1+#sNr_|dޢ^#Q.ݴLC2c 3]<2(>hpp д/7Z#F=F:8#|Sn  z,Oz̮0܄o>b_LL!62\cu+ȀHv}Z"Ӻ]α$]c7p"`.qOSD:ot\ 0q%NVaxاVU&-JFK6ڤYUl:epbk٬ d4{ @[EY'}z^dHS=}z"%v|`#syp H8k.lwiʙB8خV>5g0#Ԏn8lH+6F4 yQâN0$\BCzȈ'ux})\poD u ⇻]'jXV b0% ˋٸxv@ i֪sNg(K+eIs9V'^/WCWOgt5e'g|;r uZXBQsyZg= z};g*d  $+z@] 20Bfzt=5t t\`va=to>H88pw 2J7X)6FrF_nԁiIBH{;V(Y\N OJ.#(۸x#qL;[fV)g3i~?/8z%gc+.UX`1c[c\<0k ҳ1Q]f`ÕX4Dd|z@¤2u?خnFvMs:|ӨGO9JE dtvq=D ^xLqD;׈t17*ĚK ;.!ݨqqEkѻjpkjK@mȀGb'wƼ돸Q_[X *݌Z8k/!wT|z.2H2%á@İX`8S3J97g~.[MνEΩb% U^*AV%9Vb3=]5K\5!PcEȍI}ٱb>{^ܼ¸QC1%{dgZ Pbr$jXSmCrEZZ<僰qQtd?9!QwfS7<:i`}ƟB-kB>"];THaOB\.)OvZ,b38 #B}W?$fv@];~9Wj\As* ."r2;1W{wq(݌ ]%[`E”1x|r$y)̝]]c(cHn$ Q-X"xelS:R=/5CZ uTl#J]7[ru038EaP}6 8W[ĔFnzwuVk{"}4X2!^\z{CMz[ޒ!CמؑdG' ]@!d܊tqOg>n :ȋszÁkt 5&5hFă:EܚB&Vy|Z!W4 Dl% :_2yAUpN|P2F: =TH@n-k'a.Ș$u֔%Ѐ6|F9|{iË|xh{#ƿMXnZ 뮤h9x}93 ww('o.3>#5(Xz}:.^ŪЧgG#^5YYi g4!FjN|hzE_ Y>n~հiKG85vd& _f 0SZQ% ސ cVBlq}=m[\Z,;b6~$rusr1L֏2}BwG% Q^!]iVqYE@ (>u—'\bs[gylT,QLE9j/0aBn$ /OiWjÕb{Y Qwaĸ,`6TQP"/` Z) x nHN(DL㢥L.%#:2d:^n _m@EDl:'*l|oߌ]Y̍5Nfnje@9?[F^璆*v Cz^\@Ů8%TQ Lr]w16Њ MqbIM1~G 9HmXs:19(rRآf1^"EEfF ="}1 tXxٚ,FRO3U@"B#1MS>>A%Y mM0܃jd%1dhgꜙ4{D9S,Y):nbZp~IaY|7600 Peq;]5}`g ?DZ%1W7OJ@"O-JT>x@1rO_[5*s ̬iW2`<Ƚ%XGs^jGhvDl8mSu) uQ$WB+ߚ^QFiiӅtlDdEHtX/FB0\='a`Z/)D/7l(xp_䡬 ̰<nJQ;ae[&+*,T$i‹4wsg5`)8H{7֟Ba;?羌^3qyicƗ 9k^1 Fn}9fE|yga:_w9~fe2wڈiw ޓ9aKmKLN&#IR[ȢN QbA%"E,pMgXT -퍃r(ϠzЄ @|!&@I6ٖ6$h}|BpM{+ͪDSȻ=l9O :Fy.]'.q"y__NIOP>ۨ6p'tۛ.~^cf*`K`w9}WۈR|A:3v k@-q6 dJP\+ Z۽QZV.1/XgtqL܂/EvKiY'+x|^.'TLTӏGvm~ÁFn켺2 WTi@s8 CⵑS(ud`",%F@ˆ HagXBRإBs]bQB66ݖ1<癗UZqMH '[:X d-/i4ony{=H/QS8DV%B{ 4 &W9#`FKЃVworAofE@y ; v!ɵ3)¤BV1a.-z|3e֨0fVJ1yj4؛! La#oDA];W7SL9*Z2 5JM1;!v;YD=K_5._?8RW jHvALjyFxgA"i9>^C7AgtA'Pџy [{La^ACPBfVY!&Px=OєDlZLMj)Bc\ȼĨ(ȁT@3'=X pi.3"K<&RNYͪCsmf7Z^ܴ.B"@{d!?о^"7$`+Tˋ^f5!sJZ~@ABEetҮ|8:p #j~|-N6TOfG:wSs>21ɅQ4 CqAQzKZcVfx<ψn0ͷv>1܅rPɦ& T̙"/ đ^~[F|Ucpx5c#0 L@c xriX ޺RT[2KK)RY&z+p~ 饤3svlM#q:<Ǣ;<ۯeՃpo 3Doo}6<p>~ $% B)IYb3Y DO{3 ̈?&'ZJ@Y%|bF06{Z%ᔡq 9s}. RE4i=ŒfƒB|W__c&@ݔ쇧7pۇR7};8{_5E>l;'?0nSUfKج brmɚE:;fOb)ibk nk)P|ŘlP)QM"3Y}J !ߠ#@$w3]PUr$ӮBlC*]sZqCBR]=g61mt#eYuFSc "BmݲTeճvgt4N$AsGq5,4%|E 9lkI$/:~z H@) A|TZAAsw$%Li@)L&"❾0CWXqĻ:wcd-Z!nK(֥MT4$򻕱i@"/{x"f4C틱69*PDfe L,$.s]1W1\[#xC u5(t)-#B0V'4%d@D<z4[| ɿ6@r8 i\]c>e #kyw腖ܝy]Ï6w+5i^aùO91f0Olq/h^f@q>TXob֮:M~} h6({v.mᄠymhAvYoN|*uF#i9Vp5 D M0ԉ3_tE"UGZ|Nhʂ>3]-Eo8viZ$ 9J7am7IAҿ8' nw 8U{2K$I>as!)P^P2 z4'Gw_o|x gI𝗎ӧpضaʼ>O{;F ?8y:_/LFk'.}~z{Htz+T\!PATA:G>u:N=?ux~G18_\?xK봫R$},:Oꏗ&:{EeE"5x'w^ߎ_`@f"ǹa^N4rBHV]=<:Rs\9"_vl|r5M/L?zΔ߈>[$aqX1M D@*@OWDf"*/dLpGxo6rN)։87*"KtbS8>},a"ӎW-kƬ;RvtPx((P*~o߸HI ?|U1}5i _dPq8_dpAף'-c/C 4O0??Hw5 OrSGiAK:܅D賥xrCBKv]=I-=&/dY^.†/7|bbySExDOsA/~h%ƐbG}安n?,k GO ATaOtD˷[Iv][/R?,AG D!r@tI w}_>ݟZA/Orhvi?w_$h+ Aa]@jB}_;:9ou#)JR##\> xt>rzxӯIɇ $34?4G\]xh0m$[MZa1'|ޏ-BChv!1{d/TǗSu|8woS!oC#Xb1!}y+ <”L*P^Am QbecȢ=?N\ܩe_']U{&UC,zY|Z{.T(03~Qf!G֓Imӄ~~>p<>q!'Ͽdy{3=:y7Gݠꤰ.F ȅߵnHݷ_`f̓| ,9~ϯٺ?4[| ] +*B_qM#u}2i?X析}>׾W/<j)?/m >.p~AE㝄ς  oN`B<E}H~7ߊbVCC)vu|(S}zoN>kwJ/#\-sj }9,~ܢ$/pT|;SX>7!X'?zWgU+zX,(.KL|CpX/fzG0HgmAi[]p >P85 |ku=^zMp;}OHTOo8!~=:2>O/|w/W'v&e}IUIekLۨ?;x^qbRCzf+8 "ߌ͇Li1xw߭f1}σlMPa8v`aTSG>t]1x`ɈaTt(R8Ȃ9 S7o HC+A#L~1bb40 uVTcB'kyq>_P~Y:Uc'eIz>?)׸z{z>8c=q3Y{G/^[~ ~{?L?Xvgmmi4U1dB3:t7.8_.s vd!_[=gZ63kn6,Gw+bB [9P*CVΗ_%?.݊B^8J?HioFr9>o.cV0Oxl]KXS'RƁ|:Zc:^ P߱[i39XȎ<-tG`;{r Hp$ovcDci ݩ)70Bp͋AjWA&#%) 0I/Jϖ.GOr, 0C+ (L|c[w,I%[YkkR)zeҼ?݇/^XCa{zdk˚나adw :!ɏGsw BG#U"%ȣIG?2y@ֶ?HK::XyXi3 hµ4˟֓m6hg,E_00,sOB۷ֽOy`1#@6d>1*;?@(P@"H=N =nhQmi$#3WӧSe$8_ ;zw1.qw8=&3o,v>]n E}?f>LUum^$ prNI͋S6cm" )T-G}1j9-B]!e$>.A~`[юS(B)M7_;poWkbJ?rИCJ|L:=rROF Nn G?!w]VfOJI2Tຽ:M>Z7jFV#m.ݫ*E Ҝ~B|'~N!;Pxco#-OŰJsY`rh@P(q46 !,"(  &+" `%3Z,\Io=HWnNEP/e/_:J'do֙C얜h Eh?UB>RT2E{)FL,9MC<#;IAqio'P]@4kxbrI$8Nu}Sy!s0.s%E`p3~"fzbgm|b)b`Vx` "!"$Y"Wv6ق!b_S3bʰC6# 'Z/wN~Ǚ0Ͱ1z)OoZp(C<(i_aߠZM@h h0S,=njGe!C kA8H%ȃxDa B>@_ؿmˆmF EҼF71!r3-w_\o|_F OE]'3TeDW˳"DŐeJmom-'1Ҧx(3ަe11)dV]L Q-HDy'B& EUC>=m|:IՔ6L>j)m bvbf@!enf(k5 sxrLpZ?#I9߇H\Tt"w/QPnPMJ#HTcqcKBl_ҊM4rD\c( Z];olJ-0PN8&!`~B0uhO5&_~aWfX?d>gԕ > Yf.?kXP*UA#C\4;2^ypH9q;Ѧ* b"70b՞Ͻ"X0z ^KIgaX,XdF?cJK VPT <ӵ1VN0 35yNy]6 :h ijM`-n"T"t`Ui #վN>o=] &Z^2e~A hzuH_'y/ Z^mJy&ƸDF,ϏE!rD]˯9 .-}_xuq':odY2*W,pV2<eݔK'c1at3t,A }$0 ( Ԧ ({Kߦlfk "v0Qu! $_]gu%c9]?mKmT fze+^"AEGy^ -{iφ; >Ywm{xNV ތ\0 ͙?ݻ۷Fx`1A  6f.'-( I9d2.^nʼnj0(/os0ŝQ ;J" @oP $V^Оl&?P(ӧiA7+E ~#ف(8GJpDkk.;!ӹoa3y폞ʂT=f yKHǖSpvmH2\#4=Qx AKP{?>n w|Hxo3\EPǎ ߩus9>eX8> +I$^ߗ'o]_VoV[sB 2qj" ʼ˪ey0ѕ.O|n:z]:oQ9YN.aREOؒP@(%Bvu*}/^|`(@_Q8c|-cd fU)sl4)Q?=zmr ~)ǎcm6_#o@2P D\1k;Chǯo;a| H3^>,-~\aʞȋMʭbUBiCNa̶}>(It@z8jܻ}b{K]^4O0ϓGBxP|6Qn_}]u' pa=mb yaK[l8"S w*<xA]!>#}PO7sqJò ".#OmQ40F(mS8]n#8[`\Pd~[#p^pV6(MGg)kǴ#1SG"5E x܊]lt#aI˨L@d[ U(SNT2݈ ?* i@;Gk񻰦:BniȨ )OȪ`>p>r2D㯌7jz1b٧*%>#ѿxdHn|>ݙMI+ pޕp ! #h@2uJ*#"U8Cax='nc=?O6$ CD `A/LCЯ J @ (&!G24)ǿEu%Cz$\#(7*!P.#tN d¯ a*4A O$M`uPO`?g4_xt_"WrDMӰ$ lDquvqӐ LUU;Y׏xA614Ɉ!9ZJj (8Q•}'oHQ-h>(S֞pR`P028D &Uǒ6 =WBWDe((H+A>܁ xeO#<bD:^pg B@Vʣ @#uGRrԹ u3QWPC)cW~A<) O'ʿWz\>Cd`?ЎU5S,QI,wo\[#Nނ\GP}"t&3XI(G@ɞ{>AhP!~_PP6Caˢ-.7Za*ʀ)&栉EO?-PJ2Tr"ZVWY BBw쐰b3+Ne{o6~/L9(rZ`,'L_ݻ/hS@w A)+&BdTcH ZzU)͖S{XǨA{;DAI~v@~{q_SۿHG0!Bv!4q۲H4Zī?K (&zbEMB=MGPv2:16k͡Z(5 -V %m|zst?u@ڄt;t: +8, .Ǿu4#[ZGH o[mfLp?ŖՉwkL9 y"EYP*xc_w]\Co8Lo5|Qo^[oy ͈^z:/[@[mdžkJwHI}^ H%\QF‰gf3k+ٱ¹xU-gAXf|| ϘuAPw̦#ЁFcWj@necÌ:%SSz$Tu0f=p`1RTTz֞9:fdw,pOg<>&h!hx V6B,#BO¹>vgÈMF0 A?R-p!E=52\EU11Yk|Z鐫aEgXHB7iTw/~(0{Jqkt"Jo!xIXX.c N}D~U?mKԅ01T ÛP n=yJx܍$edx#=ҕ11%b]qu Ac2biSMkcxǝs( d=~a8l@| xǯw.s0* zʚ1"v?KhNaGbh#|-#\\ACưɕEFkGK=XDlLx 6ŇR5yj@vF$Uy$P&Y0 *GK),\N!֐QT(ih Ԝ)hߎBJl$w`N,ئu>:'@/b]hrN kH;k@Yj%@]ȇa,Xv;lw#; AP<ī],"h3&6T>p ƑJK\p92Xw*7BQ6L+**#40 "Sd{૫oqivp܉woCU5MȵߗEXN}`tހ|b \0\uZ}zUV~Ch̡\{\w{=^;j6y|4 OA|?@q |BC9G-R=E˿pu ]̡/D^/m3)KaOt <{c̰d=U!qz}v-)AN'\n>_xmjX(T~4u L,_( uTJ< 0j2PI(CZHv'[(_3;_r ݏ M3q*Py ,^rqK]d'Ig|)|,\.@g# R:(C)`hFbSqP'[0 )͓܃UvIaFSaQtxqzPG|}2~P b^څ(L5QLע3QLv >%#ZЮՌ%ר{M59L ^Ck㮭xo ?go' jN^╻g,.0U(Gcj0]H o2rIAhOwǏ#x7cgkA7 >>wx\}^M'՜=c>N^<>Gu@s[|1A2imBHib#qF&?!tER!C qp>DD%l u  ], cf$@>\1 AօQ&A.HJqL/gónK@oݧv|a !`BCT¼*z2DOO<؝2fxret\W&B2S2 y1R,ٲpǼi=}?>׊n"%`fl&d(3@ e2c<;&$I"B2h\kèʟ֐=!1gWdhș$MFَD I & [&D"c4ϰH,,#/dNpHy/'K6ډǧj] `_̚xwD0X&g]#DT/.f-7h4.qtER}FA-ލ> ooqNbӒ8#'DÌA:IC/8>;_Kkk/`Aå\4,}G.GMLhaH0ȼ(;9btB)Ɓɨ[0(Wy2 ⩋wHy/QHXMM{cy*c<@ܢ&zYR;޵y&T>k=LɛKPIiy7۰;AX^CV>3.bYu]z9G_14rW*ͽ SZ|`~=V9҅/ADa^k5# 5(*dx>RPc}is/IUWbAŅ4}2(:{/e?Jswun皳9XBH!LCf)"gC)}1x )t"4o j"JonN5:8 W2jأ^@- z_UBLʉ+9v2x0~Sm2(%۩-n\ܰVfPP-ԋ G;u\c޶c|_eY]VN;f}̂PyuWI!BlS߯αc r_ ؞;(9Dd~VE8_Mp0]LTI=0q5`pT}>LyfO7lނwgYx8t}Ӄeժg#xgAx17q!K1؈r11rŪO&;51݄~E>[K{A@P<6R8?)tsq.&?_zK:X@߁bt"d> Nsd!V&dFjq3IR+t77>I͙F[;'fa2JVatr"as$Ө"iDg gLݯF6d0"?,s%J~E.GOʈ)gsFO5QyG߉}rD~dFĝ8˸*#;W[ |o趧Ԉ䮪^x36{ <'?|hߌVha>MD~ۇŅmw8s!BPԇ`#ںJ+Ull^9cM +S w"\I(y ~w0B]P֣|Ƶљ5/x 2 ,Gwqsh(fbe_UU7(ԴjN!wc9.Z+z Ht.<+)>.ટ[/DOQHF NչgzmT/ - ºNTFQrYbcy&7 AqEzw~ `r?{ΰ jBsw߼t2"e-]0 +&?DAC8Q`$ut_j֏uOVhgh0\8V50N(t?yܬbT_EkH&}aΫ7q6#Dgyd˽;搢vǾ@@Ɂ=M3LF WaJ"RҢR:ɯ=o3=#PQ5*P/P0|krgW{ W}>agKӇa_92&sp}VJؽV&'gN"<)LǗCyڞsHr%h&ļGłQ5c}g "10IV5dG8Z7BX!m>_Rie:5F#+^ [ %zLfwYE"C_}CWX.'M<8ňZGڣ±Gc_Xs+bGs QJ;]ǖ4?oB|HwuSŊj#f,< @DRݕS ѝ`n2xwPtٟC-Rwx'Kmk5ʡ۱4Wt]s~:wtTQـ/65YZwuG6<]mP1R7iԉ|vDLVrS>go1/a>_ďanꔹ  @,c3NҵL_Zj3Y n{QI| رƟ|H!M""[0_\)s=Cq,6i.'Q}ѪdSP8Abі~(Za^Ku2yc|ߏR8]z&Owޯ+YKޖ4\f{t=<+pR/.$&0gVHyIUxBk >+8{Z[xY9|%Jbq$"e|=²LT{asPJB2 vos5_ ]= OhjcNo4B@~ ?&~HTpDou Kr}oATOus15*}eBA#F!h w?S3 Q LsR`tdUeuqg.D @z8z?ӷo d)Hpg;տ8*QL BR%,C2K` 21('@: "$1"e*H Hքlᨠ3˅SK2,A,L$ S J "`t = ߀it/:9)fit/O=hH+ݨq/0 Ó*Rj)C.C `1h$د]zfgD"GۍjH=8@lɐs<#\/{S]_VZqvɰ`)#?E G@@ dh hIcPp))/yhɽq)9l%v`cwV A7Ck@a!vSp\i3G.`4ثc6r0Lk31iUIͰzx LH޵Azv2:BECi4 s< E(k 0@FC4.6iGi'\qw\"ؒ 0K#6NI 1E\E!6C4i'Q_kh@E(=?"pOQU7!V3~ce"6gn;3KL Ca h*;B( H<8y,<s İ}{zHfhJx.Ρ\gضhh0H%CTEEHPtĠ!CMFs>5 ‚ Z"::H94 *l/(4 &tc_V'0KAX0b(G`,-O0A6i;8wHUpQʰ=>F]UݠDHx:"u$~hAPzE Rݮ3m5@E_f&AԈQax`BP?w:aAnݚ-6F ^&r>*)$a1s 6u}ǂ)@P @.A8O"F! Mkb*1!y@t2DMjaԩsݘ h8gԚ &Ž%~!(QKP  @~xp5A@%݌ 18shg2d䁨,4x&5B&~G+Pd[`VM:0p3v͗iS|rOUI}b4>ؒD‹7c[) w 0*\b/Ϊ?ΐ$ ~!Z`'n~mu:saC8AV唾Kzlr !@}͢kz?n7?ߥ^Mrw B8:m~ѡ <5{u #kf !>UbHe 8Ȅ* KnAe|xxCET+.mAI9p '& TX2 z#!`Ub׫oarFw5҃ܟJc~C !OFDE A$A( kI74U #o.`ST{|Hs7IB!hm 7AЛ)ۈ>R۲a`*:owup7h'Ҝ ibذT m_pVu%0G>1#2nDŽtJ .ِP?{HY⹟s#-4a1.&<#HԽQNSaϸgtOg/5_C>>[c[0dD[רM]0dUӡUbϳ5~ ٻ.Cg?Vt#7 ?4>y9ͩM|S "Fx ~"E @Rb1 #לE/^"D'{\B<勈PGxDWo+AC-<8.s [yA=5a>A/&L0Fsm`3 rH4_ bvfWVv\"K1O6wF?D8O1[<qf&ƊX )x5k >l+53+Goz!t3>^d+!EFgaNtqq 3 aTLd$srЌfl&)I]ʁ;,kV9₧Bz|bK@_õ~8G.9+N3FϏE c)HQGE7AH&v ~KR J#= _vO@_d&FՃ2D7fʇ#ɕS3i86c=E4>O8Mu@3}]Iy$}<6Up'W@Wz: U*BPuwyՈ!T^ [Sn_{7} 'z|JrBLwa2Lmo]W)'U#p`ݝxe+{4U T B&< 1 XDT!.zs e 7*ogm*ès  Ň&%Vۘ~<F73e0{}Da x ܈T|g~LvPC ގ-0:8zF5>C'Aߡ XzL!<e lxif{+ [ym9g;>35D@_>|h`JLJ=՗!hp=G"f.Yv>@4 88G4w˾Z)Oǰqv5=yh  z CEveT cdN~ңRn *ё%} e$I0-= 7 ]@ rtYn2n"y ö#=A[o,"48k mF@`HD]]uOJDMkCMP|## ʝؠBL!衈d SdG0GeB`Hl]pGV#qRi#@R}MJ4_ c .XcL@E6 wD0#g Rw4~ӨA|NU9O( 옉uD@$6:!GU+Q|FӤ!K51w YBhX=5:C"ڢ f cZ,xtAȴnzeJMbt͠,.Xi(XՔu l](o F ~=qԢ$cе! ,vx]Pap 5XTL^cL/M#/äXf#T.܁X)7dYA Dkw_> -CrA-Bk[ g(@ayHC.LiՄs7 b$GىZ+dvB+z N K|WrQ ~`1l]Lsb~_ j8=0y-yOw~O_h?_aH^,yƻt|XEz`/f-M*:{`S0l|b#+`&4P]9 '_!Y]).p1NpX"@[ȢȦS a\$P8)B(`>3~؜S"p{R}x,R@TS(o2YˏXm1` ct+ hߖ|xA܀}n϶`Ew!{tP׋h?$tjS!0sL,8 }w9aU|{>ozzEA}iX䏇߷cGRKoјqO4< ?: n"Zmho@] a?7,  ǁ0 +wBY.t0|h4֍#m-\?pՕ~ iuۨqG GMF$pKò6rM5^! KB#ǘ׉,,JQOBS=c[ 6[j 313>> fR"^Ә2-)% JwU@>ɲ s8c HroS23XLM-1TLć;蝖~>6٢?ria1 xc\)b +]:q,X 0 Yv\=ձ%-bC I a^t|=E% DO'.D/RQKHq8J~/2:! oAA@Phd>ݞ;Tt̽d*ip׫H8`@/ӊ~ڿ& {f #iU{±Po] >akQk\B&nC^hxlx&|sq#C~Mz<ԁ0rE܈7FX~(چ_y:VFIJ-LM M~=Z7} ?yH9[:@|_Ly}~S (U1E5ACL4~#-} 춧͡_]0~(}"3>Q(WJuHf}s|\O{ FD8xD!)jpn$cYW"8M ?Na3LƝ X> ?NljI{]j5jIAy`iQ = kU+\%LŽ"zK,ø,!bJo9=]D-!kߞ}N=GhBbAAEDM|ztL\6A8јElځдi#ҫh @zm$N/<0`O(`s)7t x#)ވc&x6[@UD q 8<)m(y7m`#bLbYr0@F S{4d"*2b-` Lڃ7H1AXԔc-CF.=I>g[P*fzHZx \&F`(`$yAICgd0@wB>&"d =}F<#Ǿ 1pr;)h(*><8*FR+/8(h#0*! `y@3H@wHQ]ڲ5aR; X(k@`i4R ooVd7 DCl5tocNll7HA+0PZ GHCKufS2\ҧ=E塮 A1>M6p&ATDQQС4KѠ^)t$C1B')HF>I&OHQ`NHRдl`N"J#䏉LC^ZZ$K$&ɇ=:.Ї=]<(79% S?!?&(rAG o}OEMBPN4-JSb<)| Al S@@P@Rx@jҥ6A^!䥼{'L 謹 8{ɾm\*u. )*Фë}κјVAA\u\53xQR2sLQ gM xs=˯Tq?Ow~ ߼H|vHz5vHCθ/|GG%LD21[_9iLݺi jC$'S3}jrRo=ih /ihDĖC BBG1dKspM@("@V!GhوPq@&qr| @Ya}߰uxA@XNj7p]D䈂Nڔ1I G!c.LrÈ L 4A;f%I(,e3%Bf"ډ#2B ?c8 s'f#$B ~0yqt{h1x8r^~mbq6MDA@1 18=[4rьca 1hW !$jb i;,/`{K i`;=HgɮBqb[dc8Pb̌i#|2%"q5A;䠦6ADXbDO[0>!I6Q|@@)#L |<^94gxlᢝwfH _4afφ?`[~In2NWϫIeO#+ opC5%0mG3@W}qKZѵ(8CΟ' @" %`EA6gjRƿ|~ȭ#S=ӝ`LP1O] 7"C ~6!ꅇ+~|pWh(fNmۿ!spٻx=JRTGXywurF)0pO.רMF:㠇 |8g8ks&P>~soACΛL|8cclϸ>1?â"?{!+Л?paXMh%H|xS_4=7` WD.`8!X8gl-HkSk%Rb9˜HĢH w={1) P_W?_w7}', &?&OuCMD9AyzGR" 7b2%mhd#?]޼r3ԠK8TbdDo?7'~ʼn*#GݳdjM_M1α`C>)&V|. ݔsI/SqX9'm=!m9$pOg'7^Q{rD W.L 6g}پ}0G0m0?q!o FfشX>G CUC2aA}V~2”!Tg j?[$BX@6Sr<6MM昢rl:cH-npީ\g.aVf10b( FTUGFY׷ =jt߬#?=WH?QU=ē_|{=l>2C6ܲ(zŷ`|pcVΞOignr.UC?vFۮ}!*+|s#OةiE'&iBI.E!ՖLA 1r"z u4p`UqvqT^ B_==gI|0x&t8M %G,7 ,ۀ<>Wșw/v>"lq$nEP?i nx&,Q 5Ed*L}:PSֺ!G7e*tT/n<_qiw=_!@@/T|ʧQV=hB@0-.pyo~Hd<%Ӄ(QJPC;}yGyF9O?! PQ[B(^ kODW'J}(Y>Ɨ' M$< ? -ya7\o&Qi* ",N%D휇Mgw˓?c A zsMo!׷ 3lc<{&%T)UE[6GlCki=ч>c=Hlz*R=5t͋W{yAǑ!!H3$Pr '(KF(fء'D.ʊ x!L"XF4 =8#tԖ,F|ƪ8IμRyd4U ><}ŸNÍa%F MNrfޜ/O@?7+vJ懓 I uFcm~Bư~qR{SkSO0c1&<NNQ?v4܃ge@>QT:z_zc^dz47"I,pc>heM\Cive33= k1 sGcR1"l7@{`q9COaN=1lu |}A|=GΘM6XC{^}NI4~OQn #9:"=)tBnȩ&[XI@N|m9MG!gSP9($T>A>KMJ 5!HPhM:A4CZP SO߷FF2B>8͟1L!Nov(h i3Q&~BvX7Ho:A^?Qwɧ@FPフG1bT +nPZAiCtN0UO y^C=~ 4 ]49| tNT!ix  Ҏ))N=vp1<@7cI?45ş~ƃ_>fB1Y_k\ ic###@b=jSbC,[i/~káhzxNx-[?]cPM(ryvปct 6G>Gjxby7mz:`ro9E:T {D߈Pa4;7 C!#J #=۟9CxVt;<\52. ؚ9IU܁!Ń^~Sbk܁p3dO@bb,@EI嚿?f°\?r`1u;̠zQDQ@X"@3'eq#?fԒ8 #S|-y`y{߮o2DD|QADGp@/QD&b.(l!*Onğ !$HPcAjDH7=O>fz*x\ pANRA00'@oAdy ÿQMjv%^}>GS`{KϿ$vG) Li.O|A@?f=GW_X%1hj"1գڎ9$= #-7$q# 4 K)"k}F-15u qcmxٸ?Hd oz3f ѻف2G?@p\G^rrMw~a˚h!?eԡ;挝nق5LG0 A5 q%G}!ntIG 7t3@DS}3N}56wzJ'/ʆtmI|i^d՞H8ծ08f & s}g&joOiOq!.~D<] ̐jhF&d?ԃT#;jCciW'dn)IQϿz` RC{}DI?Ay~zčI!2.&/8)?gBrD?{Ӧ=P/[&*H(P9k5ѭ=8HwOs?'McGñ0=R)9Q#!JC̟hn1Ī_ KgsA0P>Fξsno+!^Wlb~SkP;lvBJܛ{X.cox3BL?̉S18czV $v|aePUh"JN6uF6ER T$]RCGQ D ڵm6mQ(mEO.wٿSlګ;FZzѠ7|̄gU<)x8`q׍'F]3C?" IBD=(G`_L#\"EeJ6bGֿWG2Ӊ^q9$ GIG6Efhx.7F-1/+Vr[rx{r$n~N?G%u7$e~0bLl[ m>d8 kݦy夦<%w?8+:ct;StOϖqcǛs$9F҇// ?KM.R=UQH{cEaCq+>̉*ȁ@gTAdKzN:Lvɱ6!ם_{!2a)PGN|1~}}:ްn6dn=؟R&$!.!88OF \yÂ}ޫzw D(OUnydlY-`.^8[eֵXH,0)?"ѧq晞ٜpᇿp&@I"ls4Èg\N-(VVH|( @7hP?P\^d! ?1$E%%Pl%"kj Սm1 T>}Tޖ LmktJ :H+x`$h6ͬ֍ h*ue֍@\PEpPi4 gvZ(FFY&) ɘ4QHRRhdUONl) $s:)v"o9vA׼ڪ&ACE 0C uӤ1ǜaJi I*z-@濄d 0t`SSPSW1?v9]/]S[r(")(a4Qf?Gx`t|oNC쏦SqΡF\>?*`=z x>98C!b2r" Kb '¼QB,jG4h5 5 >QˎY?!m =!.||? i_ԙ>eҵ 6lH#}A UPU<1OHP"jF@~ICX;b(S|޲#~?g)yZ̀@ ca m\f? ~PFFQ aHI?-?V"7." DlX(dPCAq@$)P=3\ST6þ $$J8`!C/ךٮ8!˰tuwABWs T25zF$QT#'&"ʃjHf`bGޫ0 N>pPT2D9 gl/~ _hƇlňROf?Ѝ/`^x8W}vj5!Wت ȐYܡp_ޕxD".8)?ctN aFp"0H (H C9vsVsu?Q@ HP@O"^;$ 1ŻIQPf _P`#aNHXbBNh*]IATXCx'Ay z<jS0EUn"6kk)ه;C8zǍ",f(3O!-S0j>F\FhEezG&Ш6F>IqUP6<B(@BJ) N (׺C(9.͑P 5 X`e"-`fR| 'wNav`zp%=vÿN9>G/qy7A4ϧ>]W4.ċȑPXȍǮ}5_%V G>gfYaS}9Д7_S < ޥB$S`=A:;4hSs9〳vS wg8ELGB % AQ!rir~)׃9<Rk꯾rڨ"77<31[|Z/G " Rx}40=T(x<%ЄDEx^ޠ/װy#C+tfI$ x!`zj|]e& v]68vZaznj<'E\*I DE ,C__OP!Go53vVRq"r;jF T!_DhcAW7>>s!6wIzv@A:L D^{(?{V8i1f~Ӏjxa2pS{6 t_I?It@=`cQ$'1&Wqit~GU5ͽ25p HH*`3x<#;<\?Pgzi}Y[~ %ߎ_sNZۇc#_h4甞afA!BޮmLQoۭlo~ȊSغDrv|#7Dz$ tYϧ֛&tUe*+Kߞ P   a {c6 eP4F:",y !N|t fӂ ;]K_ҩ]E> 0>>`cO&k#G ~cQottֆeǗ(t[y>'G&Ī6M)(  `3r ]_C B-W4hCzU",,v$E*ۅQáZ? +D Wtug.m+bix=@ _&d&=CzkW3rIɡ=3 #{qh>=~lou`A5?ǶkҤ ;}<OdKQD3<D{lk"PtQrN6-I4# y4`$l"- 5˾H4ϼ'Z݌+ap.unHXw .M{n@y@;=h?QijA~h(~|W;(jdD3wAcΚG}2Uvvfv ŝ;(%aS&Ѫ ({" W"TG$:~49se}\!ˮC+1`:'2@`J]x솵C|N{uIR-R 9-";!LC#a{ AVAy2ܨJ]WVe8(eT~l^ vQ! 'z%~&:J NNp !O|HuSn;>NA |2~PA2ijj$x<}{(Ȣ6ѬAe%)H*t @ =t!Gװ,FY b0\ WCߪV *'8飁T_yjqwll,YE* ⠂AQ&*H#1G|ԵNY7\k,P{hϜo_>r?; iug֪A|Nh; ei4汵 sȽBM$v=c:oCl颍qvj+yE]}_ OJ":ħx= DĒإ a:2viL)gktX?]1Ӷ'Ң>x40螓?wSs (z;%3x :ˋ1ס%ԥ 2T#x.o#G[t``#Xdh\zu;I& NS@?=̊wwj)\jBФi ^B"KWĸibb?ɡU# ?Z1;Nfy SBGfĊE惼{ q6eJG'"\ $4!>]>&3F~RA : lVZVT zSH/ d+u)`47|/QX2(+y5㵘#7BݵT/s$҆"7`C~y vϙ_o?gtэBgaΦTXt<ΑxM-s} *`V.?Dp>"" +?13P"<Bw/Qt!xGl]}_"b) 3VjtFmf2 ]'4) \hEJ:'2 I7d|$aec-m ~N8gCƶ}j)}&.hV?TwcK2 @=˷ 0y(Emc\>b_ḛU* =1OXQ0\(<.Błlm>Ȉk,U!; PuRj;A@'}t{9&{Hv.DEeB0ߡN q(H{q 8 w(=NsM_5/.11لFZCTt82<J77tĦD UɄ{}OBԩ݊+fH/$`-ۨl ` M Î~ѲL$0] 8ŃB^htS?0 EeԨK=Tqb* |UbW^ X L 4L.!Sɻ38[,8 Mf^fج򆼸g@~;0 B5V=G8nU֡uZ0n p^Ϋ0J%V2W2 DHȴs+y"p />ZD,ar."NpF! ±fI{x_78t;**Pދb+J7 w,4 ]^=M032Q@' )% (%X$!@o[6ջ]AL3T27w{6y̢y!(Td`:P %R}^b)JkXcV3ky_2b;&?.6=hCwlWsTCOo= dm[r}7zzrǨ2[eѷ8S`dܢ];wݷ~t||2f_-o˷1]wNa2D BH WGg=߇/K4c˂zyqOՄ~ݕ{.o" |O˶d@W_UtSO`llʁ@8.ip8C }-taK[Ʉ}xx 4 ~.}e.ulN_H~#i<`kA@C}I@{O$0JB (ADD @DƃYugRNr=_~O}g} Oqv}\`O/7`7G7W eW7 >-BdU5P_@(?u{dzx#Ɛ./ؠv"(ԏv:pe4? A kbwq~}ˑ/^JUCT^ I ?]%$w6?Uy@hCq|A L;qn >_bb kp xCʔTXeäJ G"0)B7|Շ]47, xu|/J IBoM ~p{^5$(?āf:zvZ*qT?s4RPt"iNxꁢ!UhA?!+d1?tEKeBs_A\d6z{CQO%1k#66ܑ2`XU0- G=R^ 3' H"$t,EP !z3`{ #je;;-&d2=p x dz0"#|>d:9v%@.6O: cur KBh;0N Q6 <:4iG=ƍIH^`L$\ Ä??؈h!oRpCJ́{C*nN?*p]$=hl,茮Sk Ypmyi?YP/8 0혁&ADe0z'4MO#fgiթ_&i(]J! }3=GsRv<XnB#1dri3h?)MlK(K3 6ـNے-q,d5`cQZT -Cf$ii޴,&Q&4s{gHDɼ&LqֺU:1, o(qƶ=XYÙqg1:Qkt$YC7ͽMi@H%Kӯ7HtP٩!ޤP@Xb"E1N`>t޻rH-4cGXF#_08ɝſM1Ɨ 3P휊A4YAlɡFWdxc *("f1LS,9h=x{8is4A IR|?dy_ޞ|d0D>pG4"`>{?ʃMla\"(sP肀 zXbNTDƵd V5P9;JL RѮ$ |5LL.c8Wk ^$GWem]2'Tl&mD5lCq[5CY3Zi9t,k ^Q٢C̮SuxjC"٭Fm܃rc-M-Z<Sw G '2)!䢊lbOI鈊߳d@{٪3 fyîONi`h$ A9^1w%j2ޫP҈DiDdPFJZP))cy)S >pPhT0UQ(x9U05Qg[@?TWFbIM{` 1$"RJa%` )q84# $SI%/L!3'1$HbT z]PKH (:)"ht`@$JP@t,̈́EА(]4,v; :`y!;Rd(:q"bRd6u5RDi( RP%jл35ǺlQgLM%ClxSx h +C8 M` Bq|`hBD O=sCE?ȧ@.I@@sl2{{(_4'H2V5*yC9!2y:$ J#"5'40n5B>z@vq1@LCCTPBBP +P4DjH`)gX3f]gPET]f~'̼.HaE I A-) l4H8' T?pTQ5!@# >ꫵNJ$|~ĝpGc.FHY(GjGOЮ1:4p%D~)L-*( (nEgHRS vr(ʙ  D=>GljL~r}pdӌSl<ӂ^߳Ŝ,`޸펔zuTMèّ$4bl&aR@ v\ҔJE|@u[Fˀщv<& Hv>^x4$#n_f󃿺y' A3r|q7I8= Cځ8(NAT"( fa_?ŤknwNW`) 8!>G̶0l~2g~{Ja%56b&"P^T @,bޠ ;jx`#12U@RЋ!((W1IK14EKKC+DIHҰAKv"PDTÞƊt^}CX f -&R tY/Z$IyT,hk kF"?nHxtd>PCyOxOAg&V.LA 5!^mBϼd5 i"Lwr 9)PR=~l"4b &0~E>LjXNs$S(~%k $J{XtP~\n$(|967MhY` ((f \a1,fMM2">Lyǒ0҂"(bM<:JS lu8* )$l({̓:pG3QHP4MS04LG MЄ@($H04P\昖TԉjT5zY F݇9#nJl$:`fO8 Fh!:XSg`ݘ4b`͒!PKh(؋~刉)<7+CK B'|@E:F:|^%y>CCATxJ:S.‚"?W<OHSJf _D:>MDVT$,RTL@A0R! 9&$|I@W#_Dz|c}5jxCҰ< aalk1J9I'Z"mjUPB RHn^ݯ{ NsM >@R4I )SM $*aG?~F¢[TIcHEl#frCdڎS$ؗq"YgDM8ɑ=$syfu*A#Ui7QdNxv{VD Z\TbqZL " )o#G0L%V4B U kk Tb D`! q8Fi$2[ߏpp7Z3O-gf8F9!V"NJ0 &!vŎ209lzZpo*"MFi2Pm2AAJgMPwZR)W:ƮBq! ]웎ŪH:' ={'V㯏}v ٻA6= L@Su~P8>YMث8dh8i6AOr(71J.%XT" 67)1lz23ש^ ^ /I Y$ZSNɎ"%Ӕ3)-L> ]R]*Y.Dh"ػ",HH E@,XFN(3q,nzŜ%FmM85ale&6cp監\uqkEMq+6>dԈ[!>x|)}jQa$O62F\)VdIB*l3thLuM3SZ 6n(M/ P5Sl@.!ښ>4njHv³-|C#0@%ѓu1˗ KR&UQT d T21u8t.^*>^Sj4HaIcMirF}k -]F u>c#58io3ݎ&{4X|@#gfbx2"7lf'Vt$`%Or\۶E)́HPv#ċF]1aD#tikݏ|b.5țtNqRfb!e #l :} F2PSȀ5t&R9ΰޯYg`_[**ru_t`'ÜNB *"&o1$N;IfE(ī8O]b}P?F*vËỸ 'amb֑0g}9CwЛ#&XlR)J.֨?F&G&40B yOA62xJO?;"x">!q}9}@}<>$d~b7/ͳMO"ǘ~C @b :[ S:XR<> z2"o=AV)+(’+BĦ4ˤuA}q1,[za΄Ӂo/?!fR]0}SD,!LH8*B 97nLE-CM&]Lmk'{` ǟp*p:Camp\NEs =)JO_$P4҈R&WJ4 r:s%'9D:RJ#2xC!@P#7hFs"U.M!MMa?{ ;s~&65D$ RULUJ!p|ߍbh&^]ށ@9qi]2HƇjF1'ٌ h Y~C^lȝW4BH6ʮ b!B* ,0!T!Q#=Z$r6xnpUxɸ ` Eq4@DMPRP,@yH_yGi^@36lru2vl낌%o͔ɶxM.ALH(dLG|^AGApA1GL?D=Zcx`;y`NX<|:\ EZ"Hn0 GqN<ꖓv0hѸ㒂fI:1&StR$1 )HRo1!VuY5E6;Ѐ BPPtf LDI>dQ& QCEKN_?W;AX((H?}߫ECdzwqDDĔԓ5̷Fvخ7<8;thhDc'n裎367:tҞ&"{k`֌+߁t T[e38"P^'& Ɏx"r@N %'M`;dWu HP~2b ]P̉ݥ+~cU"JA7 $E _+bh&aP<{-`|Շly[j)ʣB^OD HiCԝ1P~GC,,2 Ş>N>LuޝxŪ~/.bUE} sEr(̬a <4NcIOM II0fpRcPx b&͒a" BhcD'˜dK"t[dmRr ZQ)P :V4 hT:B*kYhŶyC$8C1&1ă2!y~T?TzM`& !GU)"Zoʘ *ֈ[w!ᖺ\ADEQBPPQ+atr'̽[2xKx}0!ȓ#;vs]B68WAC&TSE)7WXNk0>'pzI X'ztpX:VU4XMct4AYeňހc 0߯uɡ%&f8ҡDntg(]K4'")cPLf~ 1wv$Tnq SL|!GIq)!up:ndIkאi8 Hs|#ڝgTӢ9D@Ԝ2@WO$[|sIcyCmCrM|cMBNd>G|_\GɯOW=~i>M1Ł>R4X=A:;NO\?9i1 @k}D)d(3s598sO뾔M'2J^Mi:<C](u'By,y2-=Qѻ D4)yȂ%JX!cY"JO*s)PB4CYʔC1&YL(h̴R 1A@>CZ bC )7lҒM72RSל2b'*jzC!ww^e\*ڍIdL*)E1U3TE.c]^v8#k7@ v4AQBz: 5࣭ˍF0]DDI=gAPON!4TDlA0v+AĘaE[h(!;GGOIvIͧ<!#%#IJY4J\cOD 7JR$@+BR( {f*?#cX6plwhĹrA`Ĕ5'P'ɠ>{>J{816AT&B D"za(TIGN+mAPAgJWh)qxEЯ:@HFמn8ۤlIYg嚏c6<}Gd6 h$^'c;0Wm!"!æ|TUwt2|Î(></>Dw@e/,R}Cn"Z,/ tnlI݇Cd&n3^v 5bHH){Z O% &z^)MH|}JI O6j!( 䩈$( S 14)E#BtByzDhdzHe=|;[:׾nRh0q0/Mu}fƾxi14Y~8ʊ2]Q6nơWa6ZFpe\zMViƪ6KywJgkoBs|"GCEPQEP#@^A:2H@`"5.P1y v|+÷,cݮw[F=S@R{PMtO)Ti4y,IPKzV>|xX+{p[9 {;20R/$QPpA30E%N^1z݌M8Cro"Zj S0ϛ٠AA516dZp$D@Ɖ}ۺ<F.ty;d<_!(E &J>l}cJ0hi4 !JKJt'@<(C!5.QBn#%qYhv`3P8Om~Gi(P0H6"CAiϿPl]L.I0K[(w c$Wc܁4P q*d&F]C%anޜW??9(bw rqoSqv@j3[mMGRJW$9`*#z$)O(Ra+سP7p[gN;$T bmPkr 7Csλ+ܿj>C{3ƴp^0;rqVjĠ6wkMic;Xգ.I3'Z3_^"BhCL:a˚FzztiOMNi556Jbсlt3$F "Ted 1lm1Q>T>{v쎁|G^C䏐 ;̇y%AىjlNA0ƕ6Ei C}v̑&A>蠠#;^P0~))4`(z " eTaah7_{mP>O^ṣ?gcYҵDT?v q}^e6Iq NF` Tqz"*D7 $CX #QGFaL*G]}q7'O ):CjEWJs#"F#HX)l)'U?d@=^{ٌggw&~p?FdwzJK /fk?G]Bv(GXPduHf!j$mwR%;8<|ADUPP .&d@3 |;|qPH` )|za뿮oO"(5on >LD}^zRd?gNqt~TН| .VLR 4 bP"(r2 i ZEbU PR7aas4`tΰ:(FA<\f!J(v0~:LFX@0R0vM&<8奉{Ɋ(+[FcL ~K@Й\3]N aB 4Gd+׃#Q8)`;n2,:,QCEAGe3ߴx2]h&eC6RGt|L8-Eb.|{fd& p5hci]{ǘ봕\時h([To:q+;3nmd+²41Mq|1*.#\}=ߨ\Gl3̗:W{W")p!<1ہ#I 4O7=^2vF3fNq4)}rM2œo ]\mp \OfP T (B!=&=vFI )OBEr܀q-vS%41`z>_=ÃG$ ^[ cF8u؝E#R!{0H% #"kLp`N~V<&+8@ 9]`~ !!#$3`#)rVg6M>8B9H z7 Ici=YL`CI [ j"ۛmHg/(QZ+8~;}0^c8/;1/!KOG^8tYSvi1rm)u>rJe1.w]ԁCsJd.ńL0cp/ +v䉧ev\Yb|c$>XT'Gm<$;!.a<0"/OWJHt.~j)y5{i+n Gpbm!%7u}c;iVo56[[q,2hOz5am`8*e(eA 8f]Y`0l|j& bEeYe f4{ֵ-OZRbBOփpu:r|DNyNo# lx;!܊43jDC"| }ꨶ NV2(sᲹc=6AGN9HaD J 2 #8Ǘȑ& D,tQtkFiì׌weGJp[-MzC苄_z)=cչfOx`߲L =>-3]oF9Lcc>͛d+X1&sf͐'nLds]bM$ =:k !;IUaϚFz 3~ cf{CUCc3L]4h޴j!NfOB(EC8$Lf 0aـJm3Z>ƢI^;Nn `t1rśpMVPw-, zUjg-"i ݨeۣU:4p:'˜"6]Dvۓ{5^=5)#D%5Ng *a~QlTȴ}7Y'%^C·f3AfK-}VHHWyxWyhNIlrXD4zv0=;NxP v% @>9N_b IYM,Ѽ]w¡F"ONZ|Nkԇ! C03AA<> u{V6퇭:aTڜygְlQVNߒmOtׂ[5,E:)_w7 1ևǓ-g퓭0\wjⶎdup8b|$rhB.bdii'vlF8f~d3TNZ^tXYNsʝ28:\Tq0*E&ia`\ڂpi<89Qw%/;BwuB0 XCLr@̭hz aˌ834m$lAY u: 9;p#[!٩VNv}!jGx"B^PBdp%'l̰zY x,wQY]m" P9"J9t d-Tw1jByoxv8HI^OL;Zӗքm |D[<&klpoԉF{,p7nX [*XbFoqK`tV ([i3ĩBD[2;kSW443 G~%|n; Z{0#hY;:uy3Sld8WS!.t, 6HAXڕCUQM/ѡqb5b:hwB pq^p6UZ޻fju{5`HɓjZHtF:S:S+ƀo$14Yb4d  @ȁEۈ- 8^uA9ٶ.&V2l\D8Fu5 cFNH$-@l6m(AMv-f ,ᱽTƨWّA壞;CnK!#싷O5Z CH 5F8q'iIJ4Yh|b|du7KCD޽133OhV@=)b`e <0,H!D ‹$]9 Ub27%ڐ%md&7g9LP9u a߶ _[1O)4A ^Wn#u|Cb616xjwdh:]ݧi!`ϱ@${f6TRXAƛnaJl!,[ޫLm&4WÌc&2WKz iIx0z 0 !NZw+5΃cWކC;k6GSdL/YP+SIiBAIBOH*h23Xh+|ڝ3qpPoj[R0.6m`i @@Z[ͱ!!Ɩ8 y`Y=f+vhH(6 ţqHR}" bm(5ww]J=TxoqB"LsqлsӰ2ᄂ׎Wڱ6 н\EtWބb,+Omp/X>ujh-2lFAnZ:9Z4--(έFyՉ_&!`rl@۰8oDi"|Z-1EJ"sQ4K;JRHdPG ASv a 9Fi $`Sxg@M *@qYv-];a!Ԁ_"GI`eH͉.3]š9t#mS(sEo$js\vjq MRtd sOV\ȶö N"F kSy\{Gfg:" dsAwe*:\ [Gzu!PBLhl4,~Ӈ{n_n`ӎ$8z.*cN 6a!XD8p_R`ej~{:q LGYή{t-Fp̣n QnRC@"t1qnCy`nG6z=.DJoTYA,ifDw5i4;Vmtrn?sXW"{N~! trm:(APvX,OnltsZ$)"f󌀠))_H*r < y \,p2 ϥU aHA"u^Mf<24*ֵi?'U8 Gf[vYII0;k3+Zy:EBrN`L~ <%]|:}z҃JCzNx<nu;<ÿu=iGd7f1WoW7Z,>&Xl31 AyM;6sW(H 5,EB`ƊgI-֣kZFqmҴw 1^ V*yˀCC ^$DLx N0l9+Y*3 ;:!ر;240!Sm:cif(7v Y'1PkKM2TY fZVp8֢OQ9!jr-3R.BHAX&eJ:[!4 j3q; T@(dZ壙d13ɐ%c/v%)h9ӍƆfTvP0A NhH$Bv7pI9x(D̲HZHDꩧ 9%ɒPqģaaNSH_-i = P%nLXo`F Jaț vJ, D\ 9)lV+lW ʣBOV*w9{od! !/c9kX4n\qڦN7a@eH-c!QPY8E zu9O@eA8L ;R(T>7aK!(@O "t_^,.zi; >fmN-@!52&B .&#"( %x; gB6 @ rrny$z.{»/{.n*VߩJq~:̀ԗx7$Po|}3isI=C%_>÷FNiȥmH~aXo q(ԇa`H!-&ƧxfNc3w|C@91T9$I%p#U*9e:ʹd:Z귬XK`ID00FZPha8 %BYǸ}ܙͬf pی9˦m527 9#r0dK]x6a (cc;՝`hAdĽN AxS|AkOBjm!unD>#$<xgo X;Nm[-; 'ǟ3̈́.zb05zכ;Z7m=e< )ԡԴ3wF<$3Do%y`=BцƔ^'t$;WxuIգW2DD3L`1o6(xo w7Cb~س-$=$ܾ8R76PFg*{9㭄IY:;I{b (s9J9(.#8cHPx,# ܁g (r;YP_ cCi#sԱU CW=/L%8ڶ|>h2/ (Jb&)L U1TDJMA3E{.I9 sg}tT kdC|B!8ˠ1+%*po]i<8xec* XK ]2%ݮl=`%CL=@z8fz%r6wV,qrpȅFȤ}ǴDJA6@/_v2 db{#S'9LJb۝o+yϜ A@iD|=:\`"CGf5w%I7)yJÂ͘>`geP8t>˃HhtzKZ@Hp2&3y3][KbZ26tl;^θ79֓!>;Cg)DBcH,M\W>E `5zΙ?R!Dae_,'pKsnH}KZ þ!ݗn( -d);yTa(ON>B:/>;_o_@@P0LR@R0NV$ђE|It܁> 9 &χPxOמݓOow;uό {i]戣A^'҉|ݺAm/(wޞ[ϗMwAƋ /_ƍXJPE]%*S{N! >J&"39G Vfr j;fy}X4]Xh`^ArU!65X*$ N\s:u%婅^+V`JD(gQL )Ч ${U;1S졎)܆N uU< mcKh`J0H'^^l&iCY}Eqw6dsp&mih~툃X3Ъnf2z{>T{POT@)$-O=G- ͪpzO.fe|ܝ{-bX*0`HGԴsB'%A#: 1nh ƭѴgy:AkXlٲ;ҍ4lN+RH;9 =j^+Cz#4^@k$bh!@zh&V˒܉ӻx8OdKD{xCD%ˋfG {/2X3܍C {Fvs;BδP< .Q|HXBG`C41 x=DBV2 4Cgp0ġd;xљQ0dhbM@ ӪgG2!!Dʒwo͖(rU. |%,{H_HX iX}AS>!(-=~,aϣ|M|P)6!ip4uWX#$}ӎЈJ.tބ7Ԅpŗf2S*ül7&xZ_GF0YCAE4E,֯1`l8EZ@"l#q88gKL ]DlU4OA) v"N6K?+pKtW_i0~=+#t.ӆCL8t㌚g Irc&X#(v:0$'a ֛PyaV0 [zc<|%P:c&וizg3M ƅӚ2Xmp=RJVybX6FcgN E~0cl\jEft UrGEQ!pG6Lo 8h3vPLs&`=k\":`D)|H8^1w~2ڪq1K7K9:(awOzP$Ǽ;G@j.@؄$RiЂ {EdUS>Ҧ ŏ,`2 &>F}MH.<&(PzzWcC@(v4(w=+A7Tb@ 탔ikP `..IAr{֟+0ET>)T>\r!y2~ c/-zz^ (k.Y@rAZ*^!kTElV#.$E${9U`fFf8P+yz')< q|͸ '&!Sy9,Zӹ/^lA:ʌ=ϷY" H@H.q9*% .<ځ)B|瞥ҢSP W;,oP8[;ƼH|[d;.Fc>LjwbG+'kI"!Wdx9~wyev:&D>2"&JR L:ub? f)( 1ʄx^ܥӳT55SF=pg qZ-iW\9@rp$"/Lh)*4Hu~S>"Lh7f6g'i<$pj#JB ޙ1!HR!jB TȆ {Ч |П>q|4r$61ZKGP:(xu*ȡ(b"+&!ƼUsE8&# `LH3@{T9{պ@6R d9H`D1pNI +CD둥@}'h?Sۊ1"0 GMr `OuD:;;zrfN'Lme: sbf**mS zH:"MV2lvmEY53!6k7 $ ؈|b"RJhP"Q^T]@UAE}̞ ǖ@JAzd#y&Ǹɚ;$ Lٌ v4v8 k=#sN1}LN|7_lWo8Kh^3Y»l`$q1&4;y5dY (G^ lfWiNQzdz#N+Ս]Le{0^p 'gLqGIF[OQ8|18+n8:#IGX"(he- cqAFE7ej MWrV)FlVEDz}yqW4qazn APم=z)79uC\@X0%̅<9)1 P$6`i^ҟ_{bmjSCst$ opiNTX_dqP1L}N'lhr}%EDPMA  <^c>k Jl'9uJiGQŦ>+02Dy?#񀠡[3sN/XuRʣCh_ s9!Mc`bs‘IA$Q)ACRU*$QCX:I$V sa7;'2~?Jr+Bn^#rw{7ùGpqXJZic3R`ޯWçR3ꆲՑx8h:)Zq4#Gi^sHszoNsl)1a8c$wuv6c B^CF6#,US ^S I iѓ0X5Iٜ^[$ӎH1@sgC m;8q QeٍWl#mrxh᏾t3Hlpg0km1&ve.H 5QH;k꭭$q),B3hlGrVPRL;3cdR4$QDJSE TSTEQ 2A1n2Af34Dާ /Ƨl!vA]\BoM!@pP5`'>=8q0vDØq%rc@e=snQ2aLa ǑP=g9J[jYɯ2`ݺ 阠8j#OOL;9;zmjYw>ކ|#(rrl"(f>߼Pqj:#z(aiИ?`SnC'ZI$))]F!{i)GD2HeaCϫ Gacb.٨*F$ "n@ং:@ Rq@G#ID ގ@;6NTW`>GS3p!ܰ4&B"!(AЉ睰't*|{0m6s'^GHӡ741VXL!֞^ƝCqy՜{[c\u^#l 1fGל< I>~Uud A%ízvr\5y"plap sw>8nDR/F@cb 㬌!I<>]" .#aPʈhq;%ybZK?s9ءZ +欞3{qp $xdzͅ4a6McRW!k&87B۪e}zkN*}Kd$/KɦJ$dye,a47, ~>25lHQNzz&%;f\ YiQc "k'QCNI1dHMkwq9JpZFC@ӉĽy*C(Na}*>@[|gPm- ~_W*)=::HA !PR0{.=fg8r%Q hN i,y<ӼVAaTCr%!%u}sMTu99^&8qč牜.ݹ+G j9ޜ98*I7tm^/g"C YiuZav%$}{Z8=KC S95$ $*""""jx`xeٴv@CTVDL!(ȑDPMtH |Omǜa4݋fE%or}Gubiڨ&>ꄹ P-UWcn! h)&AP }!?664@~R:6㜒 C>Fhb%S4'؎g'ؠnyCsR1((!@r)|M(5v5}\$]6w<^QO`퍸A 2 8c$C $l iö.vA)/#Ȥᔳ0iYSGgAfXe1lݴޢf5&D39ȬKh\$l71@ Q7 !e]TY| IZ;BAU.`B ;d<]2d!^\&勫S8 F\p*(AGn3(ȀZ_12A8}fb665[!.Í4‘ ߽3xZ4r`S7~xq$T܆e&r% J#ĴIAu ! bً0fh /2Ԕ!'FV)F!s$xkA6jA0)HҌB)HL(1E$ RQHHJ dEΠhH%(~<8=oa?2̽2(z9’֮<2lN{gygV8huBg3]_+/my c^>(fR!KA*it3Ý G $oFCWYp C05ގgd~bWbZz ;Y䭃18 "yNjdĤq6cy^B4U"SR7FX:lqcts៬va0#N*Q pYDA]Gyǩ`]!L]z0}*`v\Op6lk*j"]߬汭'-v+o,{Qb7DcI`k6BN"BXQ=uÎ^S6P`w/36k$ gC yʯ'O\DG+q|+u|yk^rvnQhI6DTjiq[!] F10S{{F|syov8/cj;-52 uY#:o9uuCVbƈu\ڰDpZHȝRTbdT3! C;;8ܩs'h y >xcs(⋃\cx@]ʫR I1c"u8ۼ/rg須*w~28QXYN^u3^ idn7PxA;KF߫M2]cUE)m h ha֢9T߇~k5 ҘL Aqg'(R: ;Ңi{)^bU>_L óF<3Q APW$\/aB">-;ABb^M=-Š~8:+HҨPX*r BeX En97^~t'ry2 (CĖY* hC*jB_*/I G"a'qfK>g)bLQSl]m9)698l ѤC<̉ݦ<&<1Z/6vt$ 1mFJв왊$ T(&*J *> MH!b)i@޾)@UTäm`$*ZK[G\J p; x~ VG$`UyA3A "3n }topDEsP0ՒgӥZ:c(rAh}[m2@cCBFl=JR(#]a0u#HcІ8 C'56 D}#ezP?N+Q1Qi3,b85j)ޏm2 6/βQہR. (kx 42 *+vrD/f̪<]d"wǬ:t0L"$m"pcbD6Τ$^|nqź~3<65 A Z)*(۠i*Jpy񈛅¶<.pt:bQ1:l f Fyb $QђKDQEM!M)<Ϣ;(SjA=/<Kxj~8jCi4T3Lxf0TD4'T;=MI@U!At+Lg5A@TPg`H@4LD-/8Q@2."T`̊?!"P(iQF>=NX>NmxJ$jTSHۍX"$;{cDPV:3_spu@x崣.-lmDu#% |ˌ`8r=D~9TIʤhJPA;!0IM!LM$ 4LALHL0D-E*P%3,ATL0KA@BHDKEAA%EE@ 1*UP"MU1E$TERQ3$PTQMPF/ "tpG~C>Gi!&;tL1@5ư~OhF&+D J xgS75]s4,D6A1c n1ۓ;3p']ssG$paO.zAv7\1!DE34 g,(6CĎrZ,1+&,!b C)I)Pg3EDv'9) |eyxc˪?n`_<#G شݗ9h1:Az#p-(o]Wg;`p2M 2\Rzͣ'xao5{u@aB Q3H[ !   $J4fpZ[YC[4d4A1BpuNړdA~&KaC!y!R aʈ )3[3'٭h1d=񯬜'# "ˁGa)Ky\ vFߕc|EӈK=/G]4sRc~J%ׯ:Ҵ:kݣ'x$֗#(hC헯>'N&Feq=x9qfHi"e08Z׫GvlkM}fa^0a~waPoTӕkT!h;{Qo ;m?{ $-w#P)՘28pq:G:?1AlBB&f`"pIsP% 4/5eA؛IB0G\C}q }=q9rD^9ytP@\8obf?pl^!+EHנd9`JWOv&Lu0 }9ù~B6T@ )H% #dNkBEQ5LRِ4(KBkX(5q$!6k@PĈ?匐tGl`RAw<2b'2`,9 xQ~ Bz1 ";Lk'KJDth}3dsࠚȓD$rj;h}= ]0-.$iZBٍey%Nhq$v[>˦:8ɬAk|zRݢl0amy"D*R<(oQ>^l})=M ~\3ӸDpz^6qdɁ$LfF s%)J)Vh`ѿL{Hҙ𓌾VTuC{uFN;c?D@ٷcA7H{ >҆MH (q|Fͽ&Jp!m3:J*K;ARRHV7Fe 49;=lWH= Db (q4l!{*Py* BbU8-*'Uą- ERQDtDEĂ=* )H J :TB!T>F:oOA21Z4ʆä̟6"Xqұ7*22󾩍V^J5Hq ##GQPD+RLaQ)6䉤 +ly'|C!u1!/r+A="FJEE8,ݪ5$8:fg}eK įŜ!:ߤ)Xc4 I>tlkFvPQ ;d"j룣⑩gh@БD3QTRbST1̎[Kg`=wT1$ބA.AObԌ(N=.&07<'ӿmz e$V >u.|n0d:mnu=ɴ&hM%""* "]IKZ4i_}0{w皯H f~7%~ţMF.ݲv{Xw9`ƱZz :1vSN\80Q LC`&P4JTa7v}bG|<ҸhjP ְ]6*+xNs&(bL XCJTL@$t8g.S ='Fn |dN>P9#')e~{!}2_W꼏: %LFs]ϰdNC7>Qڄs4Cd>yݔd;laWAbF H\ sDDJ+4 I@P4 D@PRI ҥ PP E*%4!!H2LQ3DU5$UDM)AMETDETK5 E5Q K2** (i* V!h@)( T)i &"Pb)"!Jhdh)M8  hJRDR$ j ZBFBB z](U)QJTDI@R,B(R42 DIDTЍD4H H "Ѝ%M4P%P%*ĄEQ@@RM4#@H4I-4S,4H%-E B-% LPJD4Q*@RUTDSBUDJP5CR1,k@P14U,IJLA5 DHR2QCQ TP,IPUP%E@@IHTMSM#J%"P% D$@#M)ABCBP1%.ER4P4TS 2P!IH B3U!-P!JEA JTACTR%PS@$Q$(I4- Х!M#IMlDE TQIQDPQHRD%3PUAE% E"1(E@E%!T"*P,AHIBR4 0ĄBL SM "PM D2B"D @1 RE,Q%%0Bđ+B4@%@4hHf*j"$)(*bA )J"fi!Bf) AԀP1+LAM)HDP IEITT M5A0D%L1+_# 9:m^$IJQ@S-2PЧ$ uQE΋Ԛhؾw#2yPQag v39h)ihĔRj4i5&uUk6pb']Pӥf4lѭfhQlP: QpF)qj[Z6mkYf达ɂ|ʡ'0-+/8V6JRRIH ˲1ƑK$Q5ۀIQHQRDRuݒ cƦ(IwɄDIP,,=)$RDDQELLԑICQ45@QTPs}񕁕6Y=uTVNB bRJ  8';-9_I@r:_<&TT6 Ci(B'BTpyD1[j)`f;g 䀖 (HVeJ$ i*"J !)` (*& )(*h) H&($(Z($"j& Y*Pb&%( &fJ)fY  DLۼCC) t<^~t)T׿P;zåU,&DhPą$ F $D@zwDr~cTp*u Aք|6xjuIULk, -#ɘ`C{Ӣ1"N8{17N2l]4\OI`kJx%Kxܪ#fZ4G# c<` kL TSz=Q}7,ʒ2  aM OCUPȔ6DAMU8Fȏ9̝~x)n{Z[\{U4bcl2 ?SFc ;OAHQSBxv,K@Y8lH*Si0LA0sCV Ljֵum1F pfԁx>2Kݻ D!):wگKAKՓh~_GF7܁o!\I8\wl\ֿ{gOcS"_$ДQFҏđi4fXd6ʑ06Xͬ?_MɧoGSRZvQƭe3 9e#B@8b{K lQkC:b?>1Do)]R@B @$@)xvxax;;RT2/8x#ڇIHj" hF!o D4S% P/Jؠ02,ED_c2!D- X9 PKlBݴˣ b)G!Us(PhE&CIH1SH{D}0F-@RB@K)Ay!JhP)U7hNe4!H}[dAWrd M n8:Njw^˛~n;K>m+d~_5>Z B ZhZ)ğ.HP.Ly@)um4#puFyCM& $r ' 9O6z/FL&؈y24T. VqO C5(BJ@#`>`bם=D1(Ih|)$ﯳ ~00EACeV#JjROȽM-P \F ogHaĔLoO8zNn||h *Iogn!~KFo@v?Մn&SsPnT>B|!:Z Ҵ6 i:[;+ !h(k\=>X CCXO5$FOmM t"8N~&ObSD jW:䯪C.<)(B\Rt: iZ`G^[ن3~>Ƅq+3čwTw]S jD~+Lim{"h= ң@@?=4?8JzMu[jq%$DE,_sk#ՁB= fcBJ=e' |8vQM>/L>U.0O>TOJ6%x k84>T)f>8GC䈵4y~?W8k3;4Әʿ /B=sĆRzwڬiޱw 7TzihQ7;r-ڨhJ)[8,T:@Kc ^ܮ79NvF@+;{M6u)&t̽M:AR@|%w܍JG̈*^Ue2ahOBgR9uUg#>>qJ v`:ڂ coxsD İ X(:]y!#0:|0r,sLe, B0Vp$VճSϜHF_N PN'!@PE}dRd#Yiuj㑙Uz谜wo, . 3.? <ȴ-=û<;ڂ<&{;h ūC KKd 4΋pw:߉k۞ty,kN@vWC8xPo-hA4=D@,f0M3oc6pi$Nr8"$Huҁ #@):#!cHC`yxoH -)1 bLANծ b S%۷{(I^a`$gi țT< QYU"!KL1m;pqy8#UUE:;f>.r0#5̹Ӧt9GM_)CH0*y:6csƷRX Ǎ6;1jQ䊴H`?Xg1Y ?,#)~s84 eSh|>s'%pC- F{U`Suz Up|{.̫7gW^P^0Ɋ-x@{t7vu /t#}c@4OIPGx=Wq rAR˒e_p"4~x10aE vhny ;V,)Cn6_M]C0ĭdt O0sTC M"%mvƱe~< |@;GF 0 n Zn~C56Qwtlm5~e"h(gÊE=nW1»bb)1F8_*~hpmvF.?7dT!%7c`]b}T4Ȟ @4nYo.@EН([w $UU~=<`>'EzEL_B(FFhhj#j)#HPE:L1͙R}C'; Hccb!$dWA-@.RSFʩf YS1ce'qIc2[b^6o>8 gTRk}ZvC@yDS#C((]N^]Ne8`qT$QK'ǿuf"?!NJkȎ,M5)д!#c) 40=Ko:!1l`7Ov~6AiBGD0HĈRL$ $=?ʇXrL%ō u^snrAud\}~+,ԁ s4}?y~$Ƥ#;&'KM| EOZ<6 8e ]^Ky|.ObYίGuJ A~h1i賷'src "866o8rkoQ̠ҿag܅x%?Ap$bj)˒S#k=]<ߜz )إ15Bɒb*"Q)@ #$>B MUVsIxHeK,- %Mmk ҁC1`6ɃJ=02 +Xim9gq y;/H& \ɉkI?,ELN`;PჿÓ)p*qMHU,V&ImY"H&~O@g^Pjq?=-?>j=Mڴ@XHIկP"V# 9~Ð̐0Os>]I䇩vb@EqxAC[z1Ff+G)~;jjg믶i9/rjzt[xtV23O{q^]4BO ryPHЪ7ӵFĴ?-ES2T%xyǕo&L"#mA=522űMG͉:6%!aJ +jcƒ;lXĈxIs:FDk1`0ka H22YM䙗mlAT5s&Y(%_7yb9lcQa4H} D_T`Aly<ں,X<~fsXuAtIƸ:ﮃI >؎Wf$[0Mcf9#o=^o( oeCf;G n kFe40biHi HP\q\4:*ŕxXғ})R}7̹[1LØ1h.]H@5'O؜pŊ킬C0:CXX(=r_MMCOCjhm͘jd6&[K:R7vyoުQ#PBBLK$Hi0Hf8wywnN]7׃g'i"8wnۺ:D50 Z)ZRh(hހu@vJv6AcK 77fceqk耒rx|\ߧǸO.c4hNNy$jb=F52oR%ײ+f"`7޿ 0(/UW#9xz6ȣ1"حH^JU1Cc&)q_$A $}$uDX~{ưZ?aNiUjQE:5mjcY8xds,&.θn6"_W=kKc4͚qOMg6HV 7Ds8ZM[1=##]GQmaL]l1FAaf訂c8Ē,QJ&8hUY]bCRvc8Hct| Kh 756ភ)P=,$H kl ~t TA2lb$^L&7&Ļ82C^Q>WӤ'RWnaOA^>LZ` 331b'0z)ӢTqaG55I0PQa=x S+dYV@v ’Z"  A¦O( {߲z?$(b"a`U_\=;˄w/#ðAoXRI?RPuKR 7>]g8PGca&ze2C+{G2v @,OZ'ZAiZCC|6onm~|KSH8EqkXN$cm>~on{}]Sb&osbGUg}2%:ۭVLi9{+(nVZn5@iO9[TӦcc§ :$Ly*_lV U:}ܪ|t=WTzwttAzN.ICDn!. D DR7z;hyuJ@FE8SGP|3gB1𫓹sr-f-TG'B̿r#hz?(~y%g &I}xX|=\4)tQg-&uOK\:FmFή<=غf"=>z>s;tT9TT >ߣ>n1r`:>H˴adm =gi^N`>V 0 "=: l4`bbJbbB&iD".WZQ@Fdۓ7C-3A=ѱ='pnu#v|$*PK1A )8}⼼ hX#"V=P@ԡa+q=A GЯ_$;yE@PPT@cɬh$1Ѕ1 BLiP1b=<F 3OPgj: jyag9'ZNL^e)^;#y o}aP4VDAp74B7Έch1o``:"rHUZo s @Dy>iC_aΝ180p6Tc$DM,FC2j-'tţ1`w}ĩz(ɒ[S0XF٬(ڶ:vx>"$7HAfiD>*Ǖyʈ`^ĨRDȅ%EP$Gf3&Ӥbh(1O(m=$AЙ!$_6#VTE)E9q9<f& cDX" fli\T!LBacKlJj1bPleӢӠj S!.\KX󭤼<6K\E1;i JZF%*(JFjbb* J)Ӛ(TU;l"LЉb  J|889c9Ӝ=2:`ȁhD6Rak)`飜sMg9; |8=Tv8H,!O?DGiExёNMs5 &V=H -KB4RwuS錒X?[[*hA詢lQI?h4RKͪKbwETWK~xsUDLAP hH$Z PiBt QEUl"**bL8)b""'Fbhgj,ThB~1I@o? E=}#ђѬ➍EŢ0X (,Xf z$Oq|#8:"rJEhP @@@>,_A tH@"j9 PI#Cuf0G)=TkJ6C/<mуɈ8D44Q.ZZ4a]44]YWk$0y_;#%)J)2 PA4tϥ=AHM{)h"?<D>#mvBW:J"4CzC)A QA|2!\ԓan"9,@d?{۔)ܭ90i/LOeB>ub$>b?,DGIt)}St!);|wt W8:=&w Z}Ԉ6!w<(yq 6 _ħ&0gLt OG4aNHhHl7V6 ģ 뱝 68jd-x)sq +P`Ԡ&IbVJF X@T%*` R|j]% ȈB/!VJL4M)'$h$$) *Q2Aga4d3P+FALkTzy'_xqzfgrq֬ =??KLgK8rPYmiqggFʜ00?= Kֻ9 d:h6V:}Y0 @#@Հ-c)Z 0mfa[i"OmTNkotPU\F[2ɳ3(wȵvѥ\MATƐ4wRL&vhm;6ndr01fDADTCOHD# N(WMqk"9|M*yA"IiH.=SvC !"GT;MxD e  VDٌ<q wP^tzu1Ê91l2I"r4ZmJ؇Ύ ꂛ] *|mNULLO=c_Xƞl8o #ǧVh* m8ne7Ft[ tsɭ^t^7ZוxOCEHlmeDw4gM3^p1 QF33-ZzcuchO8!kg{*ۤx=W150ӣPdxt!5AqVRhj~; c# Bji=6 XP&f?87&F2S}Ѷ &:8Mp$hZO0n=nh;#b$ B2 , DW_{:i$X3:fHALwQ2PEF2M1)h {@;N@-8%'!K߯د8#cIlHsv IA+fh`*+bslWIJJ;Cm`'j̑ P@C!BvŶܜMCxbZaݸ(Z nhmY6DRP@W\27$HPPMKBRSOǔ6fE!H|5!= X  H("DX(XQ&bbҬt \O5 M4(ġD,af9@0>3 ~WtS~g)JbXӝ:[F [)зEݼ qڛđ_;OnpSEmn%ؼg)E:v 5G/ b}C ]#d?! 1BzfsЇA z¦' 0m@{6үE4 #5 QT nMwM!180^JNKqLD$]0ezBz}l N d]%v_: :  /}AD֏aGMI((Z(R(P;@PHE*!@@B!H B*UPD"?.VP(JQ()$ кE BJ p{<4%TU*U ArgeW>rrdʊPBp+NTYv~֧'DưH:FQʒF1dۋ-CkfB٠ĉ=ႧߗGoBy'UoO'CϿ^EIS2DWR 4NP01ω18txA1QMпy4RP㔚r @\!Z@N&HR`I*| @z0C D^D=P3Ӑre<_.pO~݂@v' |Xr=tkwnۿB:}I\85p#떔 0r/`r⇷QQ9H!Cz hAB)5DE$@K%j@i4zA)7rH0iyB:Qr_5 L^O+0鈂gFPCv(nj/+Y%5#7B;v>e60?)oP¿s:N8sď^1ɡdo5|,f$(z4y&)\Eb@RP9iH'CEDjHTDyB@0>tkhaOv&b"P JQ͂pIlJy''BȜr/p'(m6() QD&@&S RHr7i+"jn G̀I}o|5vqEZ RhJCf jCĦ:hH Bi\` :bJ'Pdz)zHSvPN%Aň: wd8(J@1!JѡiNwqAAM $ˊ 6t-&!h(ژ9SIlr 1]D,Į&aD.V4C J4)SH6EA i X(Mh(~#@d$&MVi &)P&WA cʔhj(B J-(D]@vNF0"),PBL$,Ui dl'JJ7 "eJ 6\@RGtKPό,v1ण4 D /ʙDa{A&PBYr(~Gk`ҹ3LKd4tPTΓTI TiBE:!#PUDb!۸(L)h1)6gQYI'YGݷ.|" ~_2n=wZ(iY(rAH _؈lzx=F/!Z kӦAhy "G,A 5ABHCv_")M4R@P Rh`%`$~oO#vymn ts(_[_6 =4n m4@ٚi4 :vfO^'y\RlAJE$ TGSad~CBDH֐ciZD R!MI4>ˋ;1'a)GW,GL* zh5'Rrw@[>$ZZZZCIQ$Ćxhz SZGPqҔA 4'yv#IZǡcJ0)A!# URgfR&3F wK$l޵aEjx:6"#blmd/[ٱZЈ钸m({o͇ 0G2*j'6<$!;i%KQEcZadfNC>Q;HnPY{+͏0tC>AWD@#TRAtU nB |oO l^e }kBbHrqvtv%<2H̚A7ZqR/MCG`a1}&(nwc>;45>3.y2P] 2pTL͆5D5ݭUEߥ`w9>~p@HhӃ0KT+_T h` 2ƉwQ;UD hi!И@$$eP %P*#B##$"K(IJ@(DQ 3AUESDP441(&)B!y!F^:#ɹHנ5b T(?jL/ l( 4hQġx<8TGQ %3 a5-~ԔτH!jb&% "GlhĤIIT [h4FhN6uDᘓ,` RЍ%ڦ) 2"S/"&kAE12%L)BR44((RP.%ŽUpHoQEBH B_с48@$"dp!H+%(J*4PtҪЈP#?ߕ46 OSg'XJ{/ɭƲ2Ĵj =tY5?̅\|94|F;GUhD 0nUMµBQ,RJ(1!JP-"I5 ;=Hw/Mw5Nys>IE6 .)t=JB۹`:H2LĄKrjxRb~%OQf0 >Ntjc a$E˜XQ?Ў@< %-8* {yNI[̉ĝWc۸;gGxy7Bt %b("`.΁JFe WDQ@hfm) Ę,G(EF@{Q)x t"|H_ G͜Q4-1d˸MX-f$ЕK?bwN"lCJd4#Bv zm%ĕ/6cdbe::.>Hih>mw 0DZTO٪ڄvHn>TC< H&?%"hZ뉠~l}"G 0nVҎ: 𩒮Cr^Ą|l3K!Gԏz00Jb]':*bV _O`_)y @VdҙB?XTNT8HP<VBD;y~<I w' 1tN0{獍!bkg/ _ 44a=]"XݜW8:ȇH Hh,^ZO ħL0T =g=h{CMU>8<]yS}zo9:06:Ch&MP1ݐM6ʒD H%($ S96+ӯbhPJdE!HUr)DBzCH!JJCɣR#U tE JD 0)2EKJ)Bb )@hj*%( V !d(j *t+J'FBP!Ĥ1AP4n2TAaf >HbFFqvXNVi'atMA>_<,p e)#~/1hi݌K؂#A<\8cET<M1%AgV1-l㯯:ہV0yj >Ŝ(F&I ͠؊qa8Łk{2CWXix{ 4TW/l|(\U32wywD%G*8'y]\mw.;ȦF/j `1LUCFDP cDcTU:S$"8*~gb;hdv(\?욐cvGZhmB`hg1W]Ah)pш vkhZ idk4 2Fa\棡8SqނC,1ϜkALGƝYy[+h:+ADZA#GցudAq'@t!@:g@"Pcb($zG!FpR&1j,fyƺZ7)+P[efo=3KSLGY`Ƌg#iri.|#IfT+= 7ґI& )&_s8ޘ:?[Hy9㞾|P4(V?G"30Uym1{ P'%B /%z|$;i4;kD# $ >ނJ/x 0iS Tth?y>G>gp: I\c{#ڢ$xd1 5dJlO[ tt6?;KѮz# \YFbMQsFC$MʫiL'4U8P:(Dz燗 8ΐ r2;X@d6"glTLF07+T?HiJJQ B!H/@HiNP?4‡ L )J)& 4!@Ud"F )(PYg}n*e_[69r%1oa s➸{# 45dDDEL@å+Z)i@ihKJ2D"@n|;yϹ?2Mai YSD6i@e2T ˮ1fW$4 pz:z%|=$a]`'R $ c3 3:|xbiv $a!B'b]m;.(!l91\PI4DR~:H}zm@(Tyj S B` e ThGIHGIʉPʻpFۿ&X;?),zsbCYa !ih$e3Ce9~S]mFVU.#?vY!mp vFe)? !AV,Cb|ļ16ѕeClm{@9tkPݻ57b("i(S9 t(} QyfcaMTZF͜`6t-h4EHPP;ah48Xb 4f58Ȣ,*1Ɍ}#qnkDHJM51BzPQA ځ( @eLȧ?PXݍ4Aây"m}a}QrC02LϢ.͇qq43OVzgpV686ݑQ`?>^kbyy uR竓4PL6HezzЭ-ĪFqK\2i*_у]X@Kcrordi1AKk 㰀C013S0Mǖ )tqD]1 y33]dqy8?W5Tl?FfH5f6[L%PCu @a495u"aѨLHSPpS@$ưE tdnQTpR%9 p#9Kݶw? ^]YOhτeY.{]n(ҔuÚCd4~,,%N-3^it3;1蕋]mVyFOx7nLD7 k[5@.+I勖kAd`/291ұɟsoXδ7]VjRFHSݡ236L7وUy4$iE#mt"D>5 f0AX3x0"3S35 lB|)؞ob%9HJG_xs }MhGSR;I>XyG-:SS1G(Az^:]8,zHA=%Ӵ_/c)!d[9㯔;y}m+ @&J JD|>?{y;w/t5&}n Y86ASPXs0ގ)27& R{ !^08LP]40>r496oN ^>Q^X莵`96)^2qW RӝzOK>C{@t zhO3A`Ih~ g* 沣5@Q@Je7}JG)}ׯÑ=䔥O5jZClEL%*n@/N~!\?} $ľ0e~白u8yI0O_'0w6 2 <xIp_xO4fᢄR hچLk ο6x({XܕeĉB bCxN HĤ$2-Pc2hmTl:M& bZ6 `d Bi@(#cUL *4zo>d&~DUR4D`߸>AQȜRiBFGOT2ʫq^ֈvl83'>E5}PsS^920Fi}>`n "?F\hiFܞ s dQ8#b FMy,sz,T|К4btKFg2К4Iv͎Bg@Q7AMh9G}'\SJ1/agrY-Eų611 >I 1ІOPsلo0>9zv凶3[2Fqs)l~GFxsc՚;#Nmp\"P:r.gG j@&2Շi#46 ˭r$`Lȸf7`ȜӶ=2~"87١6JqTä7w僥5(PcS ̡T#BœK\F,?ԼQIg#mMM0'BC6qv+:rH&O)~qo7wnӲkN `YVakfGG?.Bc+K&S9 S8xƨz %-O\6E0J}>lƟKֳ]r!aDALc(w>?xa5i<{h$f)8g_85PѬI$QF~RI5KR"QN"zpUEklf)8k 'G@|AQyCL': D2|9ApON=d&7!?uw0;AV{y``Z2*"{AELQ" D׀j .qOkMEq>L@ {#C|trn2cI?GLfeD=w:AB"aig.:?e3ԩ} OR?[M 2Gӂq~+ QDDUQ}2fP`m8޺q46>FfզmHp,X5M^ckAs Gb6EOA=h{ V_mtu5Q-G]r[XhI(n MIC 4E LU-T$!@|EJB0K~oO)6cOF4΢ lUQ@D D'ӌ6pCI$T4y4,[JD'B& j($iEIT 3@EM1-!اv4IKCPL!1UDBUUIBS56#Q|R8|yκM1S)2%Q%$F cQ.-![8lmaMJ ;"*l qEKр`8)=$( B35Aty '& AJ$ tcZ֯F(#)j Pb#l0CJq.Ę5q'IоOv:Y*0IK%QM ^F)#d,AH(0R4WJf R3C ,B ,ADETH4C@WA*`&|DhtХ CӠ(E%$TlE{5{y{NLTvWEqWy8b&" 3Xf)Zт0y.1X 1PDCh&*D`f5t:z4 Q[SA^sYLl&(YNwG5 ResC1Dkfe2DSSD% Pt"H Z*Y"" 0)Ii(ѡh*J -/;U& LNG8E3cF6*S^E:j]4皞)$"A;UDԄKG% nh>6')#! CP$0 F쯣$ w'g>&, 8"V2kZԘFv5Γ:O"(v;bF]ܡ=ljeEf6p:ij4F@kBяpEaaw.prBE1P ? Z&@q!1@ QP(<QQDiê"i&6b`;i&|k[mv6"_О" L^GrCٜyG"h{IiºRA)|O[dniF9Y  bCN< ^K2hEf,fX85.*DHn dsi35`naQ)JY-=S3d^X8 z*6% k6]%8/@#IRNyO 6 7pͧ1&4|sNϹq[nh8ʽP Kq7?g˂h*ZC`&8Dc<ѯu;~0Z0!ho[#c#1+oa;uPpLWo̐OS.>o8",b4fB l)٠oĩ8dԋO 26 ,'t JhxTRC۷JR6aO~^=w9bD`v˭*z#!Gw+ƀ6tRAR_(l@H9g[$"f`3]U_H<۷o )#?:#P?"D4hhZpG`rExUǭnL ` 2H*B%6 ؆bJ<=yDiG@ t,@ Hci{}Zx[]hj/jTݚ++Zk=;;W RW; We ,qx(y fȦ+z>DCω>F*|WLHɖu=& xBp$JW{tq7hTpZ /s!1ҷ`Kb$V@ú/9 }rDg؊ގꡯtCL@RT0䢂P(iH DM%:R;zN4#h?  2m TSS!@G_`2d>Ͼ.~W&m<|4 1& i+QYiq-YGc,v++ǎ&65U~CTD7$q#Uq׎7~ nIўL'LbZ! ejӈod?L?;X}h2]ZCCo &Ne *Θp]ݵqƜHIT!&?^ ppN%q"nX8 go~_O(8&r*Ì6A6nlݩ`˜wzI4zdD)t>ݮRDU :M$ lbB4:1F-R9G~XA8d|30CD=p>c(os)aoLGq3-'$k"fq!&ӧM`OrCHlF8 L] !`&B3&G>}oSr25"d#d4d!%CQE~߇"Pd</:_ϓKx@ˬz B?/d 6JSJR% B5IJ1) jwj0qôs)Z"]B4ЁIbhqnF <55 @}q}?.LNs1@M/6qJt9% țdQ0J"y -ٻv_Lw>( 2q<)Hs.0 ty`@ &/r2, A$~ĠATU bDtP03 LDeL[B_  Xr0c:ZƦj-7tbsܦv9ݭD}OtQw|z'Â0I_T8 ͙Tebդ50U;jZM6-0 <~Pf =/Hi<~^]"=N @KG H_PRHHFѝ1EʝȠ M<@c눚BE4M(@@cCH *(0ຢ/`a$LtȦ*a&HSL1zL C(*" sK '@s%SD02|Hyu48x{yvrM 8[ )K4P~CB(iI1.!D )fnC iPt#o ԣ4)R33$P1D,5ATѤC)@RDQ4ĪY2:E <腘;ݳABi*] Wg߁U0)T(B**4 H gB "a*B*"""$"(iF":`T6r" (C C؈$VD6 Ob4}A.6T?Ψa|'(?o=@̣lz!?:f+5 ,m4|=tؕ2XXEl/(ӲTk5nۉG'8xLZJ49g:E ؋fU$KMQg-M Ru2"pf*h^eu(/m/%Gձ~)bŐဣr]"LƤHO.$pGKQVaFZ{o>ꃂFrfeBͳe] Hk$Eƪ낮m8/" Z.^UT2y.^]p_y6q@:9'EXD\L|"M 6߷E5V3[]~c_\U&|FRg` %8{Б#Ìz]YOzjBsT[q:_{ =j3 n'"Q3 ŜH i̵ȴѦ"+&>n<>Ztlf6PZN݌-x22dJ89fl$/-7MZNDclW1B6c23ƨw)6iCc#E<מQ-&%a5RbUn#W4ټq!b)E,-^<7 *szExxcI`6[Na `yC1ӊ :L}2刎3Xӗ{k]ŭP.&gihPqnk#-+8lۤ$DfVs0nG1A g^3xm͑d# Gr2ݷb3Exx 1#5]K2ppǞ6@:6KqI2M=1F|]Nq[viϗ58&kz{8@b G~~ X0G(Ă*i+-7%DggJ^86vI0F\$vFg1$>1je n8zxP3'߷N{(l+ $oQ57rÌMлIۿ^B.*!.E֔:D!2=/xKxfdQznB"`:nHc4<y}iW͒,pD CaId&sb̰LHzv5=h:`3;9!~byw1#>3{n #PQbpzB:}Nv3NJvxp5cqVe3^kl@=/@W-CORⴜ{~(OF >/ۮxaK8}xrZЏ 7I0ץb`7[Zuf;FB $ 8|2%+I뱜ii2Cw$X{NMԱ'f7x֑ye36J3XgֶC%NB22 $aی=,{b39&1pF`܉oMmI4qMCJ Vq:gEz4D;#` ή5QD$sHr(igQn=Elw[Tzd8,*3T@n1eKx:5ilqx4SыKS?s՜FI4FFjࢢ~4$^e'IO;jKљG-hb8jn$Ilk'cO0ǨT~) ;||4oy뇮/~Γ* !›rO0. ]K$ii$sB ^PhCGOR(ֲ̥ٺdq>Ϟ.3Eh(\.m R :rr f&ct" #ȸ-`]T4 V%A je:3vbFܫhҗ0 L2{iZ#$Yc++ ;f6e!CŲ;`5J9Xl!qVӅZX;V%{G"]([7)0Q.HA".6Ikph |2lBuPSRQro |398cԍyf;.JF i!#XxZC10, ٩&`mnDCxNӊ^6kNY =4H;\Zc=K2xlm\]CmSdy ๚OSs.5`mJC2#YD(Z0s;z3:=,i͵MwUfڭa@;3, iww0E \PkAcI:"r_YVC^AV %D%xi,10i]dXD""9`Asb(:| 4]tyҌ#BA66fS=z[k6Fِ18ßG ̑k )@.No%e,C$#&ʖۏ؜#ᣞzi+QIeVQ#/$0gAS$wDחwlFs7нO[)9m֝} T|mZP]N6 RF`p59Ku:e@֙D_ӑص }us 06kҰ7PM1&h&d_ӉmBcb>1B Dx)gE{ |È]N$xÊM͜8il2dd0lm,{qŁ6vI & 6 t*m幞}Eb!z[>`GPOC+wYX/E5 Nd@Z8 !OF8(τEek W#oP畾0ßCx /mX? sMchu?x-95n46b CF+ 63J_9B0 ?e j\!w>dHp!t8ߟM$IZb#q@"ݼ؇ݍY Yےiu?"Fv%4m{59;T,1Oj4ė\od3OU_!,<)@68B*}SlEz<}N'Pg9NK0i yN(vს|#HA;ZG3;F ,M>\X:,\hź9[@z2ߟ/r6h<;.!g%6-QajD4L{w#ncWp)e3WPz=#]jjG"' MK`?3!÷iQ6t\2C]@Oʪ&C&\۟3RuLP.iRЫ=]%D} C ø.) Z`4))v})Ԑ3hJI.WU@GHlՍ;AL _;?3>+/H%(aPFW~"p|ȌǂfH_57 w PiWiQ">\9&FL2pa=XS5p^di#DT>`;]T~Ͽxc+{9plt""8<|T~fHߧ{3ı6ejR,Bq@L903;.-|.H' "Qa~'&Gt5@s01&O줳Zv' 7šzwܹ,AL+I<+8nHjz:!!m{|N^%:efG쬺 8Ϻx^~SDJK#W$]3Y&NᴧҔc EB;(T[ dt>||C(&}b7216|c;:Pm g[DJuN;.ov2^i`T֒cU3,bF7j ŲņR$H2;뮶π4 ,R9~p"# 8sB ۋ-w9%Br 0mA69~;߼4'Gi5P=q` 1n8"IV*fwJNa=vk,VC5c%٫5丝AXv{.s{up$I$I 5PQl9(ʁJ'?YRb6k~c){_F?ׯ?`D|I HX:.;~I:할B ՚;BK#~ xGlzXWl@psFcO:񆐠Z\IC>'M}σ5fPp֮H1[SyCXQ+𻄃9cg J64q,f^`l~QapDzkonVcm-_^&G\z Ct!1ִ=f"Lh 'kv8ٶpA.k.9Mkt$F7ĭI ̣.-fcz' bJ 25LB)By 7dm`&`X;hIZ,LJzoxqkG]|dɌn 0ukz2NK'-2fHpѽ7\$k6-52Jn@8fQɸAz.1W7o-vJFؚB**a2 RIMeD1m̱&0nfbfԻ!obW%IQ@ Rv8I&RTə'6MdyC6Љ`k&ATp0kE[raGO1 Y:Aw~ѷ94 EXC&;Gw5vPW6}lDX6=\ܪ 7xǘ& a<<1GJ Rj tW[}CV5 n9o wĈ*CZ.@=ri׽:y[0Cf0W , gcopݪTm-4ՙԃcZdpi{0$0D *kU=f=h?K_%!^ e2/cl÷ (MOȁS۬%KV R%fZo0?0}HQ}u}1QB|$aauɂ) TPUSH@ )P\CPG+h>''-=Nǀ|2ˍ['r:  D0"QY=hRlJ-f4iN/. o!ЗćU1CHty`94u<t>.f.{]hOL 93 ݴ§"l#(fI\N­aאӃ_τwc}X-d>v|ϵSB2 Hk?EBKKcHlnlssq.m|ײ8>YՁZwU miQm q>O+Zy3탟{9 phs4i& aRhHxC lN, 5i~" 凫IL2vjWԅ\]Xmq ` #LGxΉSaS|;YB##ч t́疽XCcrHsC]r9RWlb<iSIzs7^<ť?@`{ug:T]ݮc+]XѺysU˰OCyS~_ 9>C ="=QCFɇaG*"1A "5,T7'&9E |C(@o ?5>Po4c~\/F/La,Ikq@D!J%!}؋3aF'pm;C"Кi5uL[ZMX`#2Y-/ #PIv45cZ(eC1#Vƻkm6";=qP3mֈ i5Gl(n>bia rPnd{Pv* ub%s`;uJH+LH>aE;mߥkHe6mC\aᵓvܙ<=!B4$0BPpwvd|U2`Oon;_d&r8mJ[V@Π3~vZ Q6#j[?ylw} AM+2*ҳK+~KTE*R TDu ӬS{ kQz!)NˈIqmEM[#&yW п?=#JX(ZƑ> %s (vړ 5$5&Z KdmBC+.ЗZ¨B dcF`ARQT (zdxl=كy}& D f9K?"ǐ{ nV][C$4q4"R{o.8ػ-CCń>e(D23B nLA_cgwyw>k6J 7|Kmı$~{BXIjl0Ӊ<Qv:da:C*QRE fl(k,,!DJ%>ܣJ!?0@7^{fQ]>g=:at3BG_ u>&cG>M7I:A&H`>]N%8(~t  f")Fi֩#Y*(&*$f*(( bdB*`q Y%_$4AQBȕ!%ETUouSQ- ! T;fQRZJJ *JJd#iC(f`#LD4RQP gb  ֈJh i 橬%I: ~&J$5D%=٠qd bT  ax^ףG݉s#$0aOCQ~]xK$ʅ #Tge>wmϔz,/k|>^WpÂ)t>*d{$z]IRH`J1tU0 B zzH]cQQ`( }%b!Cxx ^3f a:E5 NL`9v*Hw^a "#EPNqr.h,JE$BNp<0fKs`. Ey>2E%%N Lu{C KDM,Q%pQLL%C֓4>_P' yb` z#Y|1 k9]1 a:N_:_63n)RwO̚@eF~ȍNN9^wI3Ȁ) ַ n̈o](G XbJ@߼ɢ|[R ]S4ۑvkY;ڇ/ 0aók^T5o (\K,fj3Nj/ 2bBcܗ38/@"gNw#o z`N0pg:ͅbUHR1 Ut#V{-Rm bț8psNAٴ4ڝruY8lo6(*ձ&($CJ7Ch#0›^f-n ; >F ٜ,zH8xFrkRiQQIQuGsTʂ @՛O ;$n@4)~2Xy0#T^iM'n˼',yKaв@@8۔t8ͽu %90=zHQXr", &wXf oX U1#5ؼK*tR[8ha(0ֺ-\Xʭ_^5!Jt-|+\cAXcipۮ5ltuE@VTj"SIze}9T .A.X=Mj+؊&DC~ 1/bmgt`bCL-UQ7&vl fp%zu#Ÿ IRBḡ'aSuAPf`p nt^FdbhT/RK <#9@ (uf5krZֹ`DO0@#]Pm@#U657vİ -J:Q6EiUn&tP4Մx1whHJ 43 Fp&{Tͽ`w@OP-_l͋f~]C{5Ρ2e)6h0142i: /O^2D!.* n-*v4ÜƯˋ9<#9=ؠq`<5M;'qq"VO#k, (Ԅ q\T.ݤVKf4vj,wp벎JZG!(fOD8xv̷dPb:-F\qīR.dؿ:$.Y;pYmHTa<:ɱʹ;.NG,T?KLO4[A1qx 8ҧv(A-B5M!_H1 $ƒTuh$&CvUP(͠FTc-y=vEߣ GK<͡=~ B%y:ύh ZCwtbCjt]*J jTɱH9qBoPh5ܙ2sj%+o" )a@9 <e5#fd͹`:Hk}22f1-O|i8t&ċEM)l2fP?S["o4LedIXHvg# 飑5ю::(#fb8i:82Ig\!n4@TDAjAGW.WcCP1#SdnwTs|HCl#ARED$ j]M/hbwOiJ٘]ʮByXC3+; \Feh*Ml#eT`90XI{CGݑyQrAbNSi8Νlيayar(He*1b ܉hˍtek/:|eGa#l`H`'[ޟ9S5̀ZFޣXNr򐲈)CQshoӎ3 `84_Ֆ%'@iYa/5FN zS= u43X(W2 sЭ>7.줜κ"i]%npɝUxF Lp3K"X z aJ:k|r*UVn0EU>=6X$DIRgFmI.8}+nn dVsbƕ&'K%} eBlg=P JjBΟ3t dZ`C04<6ьP"W3؁:qxs(^n3(# H$"hlJiI%4o.$f8 BGRVtIkHAglL0ˎ l\&Qm4Y|!zՅ*':'vcHBP]5Ui˕LZyEUXyI4`T ΒpJ3BEU9"]gQu* Z.r4Sx4H{2v y- Z!bA >tw&lXTt4A,0W (`M/Ayzw.jsL7&'ODah5 `̀Q%J4JA2H<~0! r쇏B1pi6ɬ%ֆPΖ4m+=(7 Aw8fkF b`=+<| LH?FS(Ԥ|/٣z].UœAh,S:xÂ9ze-RqjVhA@>ӝ_Nfo$\7m+%"cf8 =+"}^C `Q |%Zt06ݨ!G$$gu hքN6:i߾gzɃtCP> O-9r>ibptuUrKD&Oo<^uN5kEwNq${у<@}4Q0KD0#`n&"Eh.ANi^2b(Nk3t3$yδDl-ݢ w#lV BP8XO& 1kA+P.L*O:a4VN"|?гh3!e]X}[ˎ=\Ⰶcd)9P@S#/ޚֵWZ9f@`)fPv(j 8H.AӄMɘZ.b48ʫAY[_l 1")C@R8B(F{!3DkEvinFEG"JML%~Ms$_fq{%ss,*L=e'`.{9|#|O$,dnM=a;޶ra3j˜ p6Е9"IIIB0z(_(sg/(yu q $F*@Shр=2 ްt?d1&cj Hi2M੠-;w[A#ڨRJPA$~L+>}zP2DhJ(҆$D44PĎ V"gQ>sӳUن. ٦<}5QQr B-%数\N)x)z%R'Z,"qN@bBVy @Q9u-4@[Pk<XUz#%*Ka3U&Zg{B"áYPl@ద(hFlP$"9Xh-Nj@Y+`,,AT[ @‡ebF-"H*p `NsPb# 0ֵWQG % kq3Qk6=>#@m#"9܁ 2<&&"RHbB ))f!%Fl)E a }>{ˆYfZ J?LV,k5X˺"0~};%PSgۙuϲ9If%S^5c`$yϥ-ьXv80 v@Z5О:V@fC^r-ow_s5t6extt ֳg <ʲ}S5& tPEp b. p7C%::|M$hӠ7. %9 @&EC`8*q"jw>:mt tTd⋳ XԚMd:iZʗ}; ljkeNy1 _ĒTM Gѓ@',OkhBIȣ"$SOsH=)c4=fv@f^4XHf9VAi ҴxC<ЖN,a1 f8Hyq`M%SREt# y|*Ͼm1i;thqZø{x0]#К i;m>uIQ̢>v8'KV쎉t9ptRgj@626RLPD U!ƒ>0@%Hbs2(b"!*M% zj$It'vC PJzؚ=ߚah]AE8ÓmK u H\r-!J H<"<䪊"Mu'ɁAؘ4nP`Քg—eߑM! AT-R RJ <AImيS ;5zA^y-qs홠rC+zmƥKME$aTA͚8ox9dQxCB)J!S|I )O#Ndh^ZA}f#$2.$ PiP1(^El "%(J k ?D! T\Q(4!(ThCPOh)TT((ӡ:4FU+~: U PB@#@iFCH&PeM+@HQSQ]y=t )uaU9aCr HM@pGp@MB@У( =%C@"| ̨^`~{ JPQ5$:@d>C}fQ-cƊ۬mpSTVA:=^k`v(}FG݋<54 yRL4<-FȐI'x=%CS!X  hddD:'(W0) (vLc"2("RN<̊?K@ *;E䂀!]gU  5 k~$rHҖ:rN63sJ|N>}V8Hf!< 6|yy n=i&"јxi|7&ϟijso:oRt)!/vj^hЗc87"TKQ@Tl/6+mǘ5.CED$ژƌ(M1b md"Ñ]/<ױsQD4Gwlzpu`1 E4pv[ɏ3ѫc{."ڗDDƗd*3J;=t_g2̤V4AT&Zx?"5MR7 L6hkXQB7dO~.=KZA0IT4DnK9j't4IIƢ#1Ë Dž{n kx8笣ɖ&8;HҮ&]yŶuH!";"#M{zn,^!kFհt18-yݢ#F*58Gzƪ+iw"l8x̻e`]{:yyDlNO[}(b fT!F$j8? "e+L?#<-d*-th@U;Avs`:.GQ̚0R I`\. HpIıvcpqj4hü,Q'mTm/'OkȻ^Fgg4h1b*iѣm}MNn0qAuv,V#\ݙ16gxL{x1{cص˹3uF(ޮ uĐ(mr\EV%:i-{ ~Toa 'lCy14vRh&MB%Q l$,}@#ZW~ުBU6n1SfDRLA@}5)ĝRum* =Z~f6 :gk bђs&G/s"( PPQJBd@tC6k>}h'޹9 WZQ^hba6}3`q-lJ5~C"Lä!4}W-1^^R5EӂgTPrT (K{1Lq>^Q;s|)RB4! H118G;uFG- 㪅_px{҃;@IvhՆ, yTcb4iy/]Ȃ\O"0E>& ;)':9r@q.!h^ x b<2Ho"@ "{T: P|?e C*RObuiFhJiPxsB *!ױY KAGz-5Xf +=c- tWH q(WNzrҐv1ŷl2S1ڨ#T[f@TDQ6PXy70nHxݐC>yUDt" t>2E{@%aI{Zi햔pzB|x`PD@TQ?^B,'0PGS`)xǹ3]4hog*Ѷi=Q2h`{:ǶC_{v@w88 _5h?dAC# "W>y;PX:"fH$THa$I)N@GOW󚸔& %(T Ip)HLSF+ (}jcpʠޭ"a ٥^i,fb׮k@o5lL\!1-a{~=bwq Cs)Cyߗ#^A h@5~2#B$R5ӾdbBT:JJI}(|j z~w~~]L$ݸ =qlw@N|?ֶp*vI׹9tvBQHP! Q)M fK CA[BR)CAΟ(Pʀ?~CW^'H!Gvsnkl@[dskEOC@8JmZ |M'.@_GTz;ϭ%N #Msa< D}jC-R` 03R`hd zr65d6  -RX$!8>-YkT_Fss0l"@kI!#>8AC$tzs"cÒ6,Bb@wS+H EX(id'=S+Nc"a0b#L`*~V'WH{5V2aG']ŀh"zo-ʩm??zkÂ1F!뙽ăOl" & #cRͺշ??<܇$JE,(HgV&xd'@1~I.xBtcLL^!ڨ2|gX,=Is/7DQ"d ،j ^;G㭮ZYRF64D,>>?N-v &_f7킈%BNfB=Z`EI$$%J*@ ))J 8CCa1īB$SI 0CRJsѝ(nB*Tb SV!$ћ~t*r:V^ Dǎ/iɳ-՜g ٯ gzJBRҐ0ҬB ҡK2r\@RH )V$dW<֍_HxñvCSO[usmiX=78f)p90d6.aZ JX-&#Y1vXxC TU7!`R!j`rԭӚF& , H֭9:#jW9^!-~" oN)N6MeM2~]M0ۇi\N yʙc yqjU`~٠7`4.XJbDW1$ c1#!̇2 },<+:eXrD0cAhV,6md*30bE"p,%Uޡ釧yJ9gLC$ \ofriH!a#4mUFfig1{rI,*Oa.SIo|l zEK8ȅ"Y0rYYP8%..$-='H(ФH 3BrS-vÏ3;,2^5 vl{+[sI5c#M4GÝCt{d8t<շ9&PSN qjIc$[؛C[j4.jLT8DY$"ɦq(|yO}\yvzҚboi{hQ@X;@Dqpf(ۉ7S[Hm\XtvܬW*.sG#6>U۔KLc5 /QG+vw 1dgWhq]5b4`1p i#&I LG.K]3w;^$5:NMK/ NY3L@[F LL$L$g3V=lOccb ҀwZhn5ki:RlygD-0Jj4y)C>}yǶ!>W#MN;p clQֳ5lM5k҅XξTO{)ض ։c/pnEz8)b chctˣ ّjHP;ï:1jM FbWB.1m`:fy.)LWa"~Sbxn$,FF&Y&f * dƎ VsNZJND{Fτ[1!ȣjMFqQq¦20} 4mεu2cmfzhilm [x}5J#tsS0pK]"a&w*(i6vj~iGv##Xhhre9iz!yGHo}.Y(s"5~e55XaWІވs{+pXň1(TFTZQ%fuF£"]6&WzGp}$ĉ߿|1͸⼓R0MA֛o")pVݩ  D=7x"Uw]9 @E%)QRC>~3 λ%:0j#m3LI(:2*R`Z1'̆WkѐV{NABqE]BપT(QۀQT(O hd +bR ?]!"BUY >Bh)?(|B?_[e1%UBgv Gn&;<1^M<=G^0[Ev^VVpyvɢs궂0p%5wJC:}W?v=y^Q/u9M>nFAA7ƝJiґ16t0ɿ;4f<&%)Rf+wqm;7%4e>:ìDI3;Cא oי]\e+^) q&5g@ Jh?g~1DcY{rk] H,8P uK7)R*Q?{1kptrq @Θ]٭ n)I,m#$vhx2"46ֺmg+2Y*7 V08557wRq${ ??|>_1 o ׯPL3Vª?g ]_BŽ7NFC5 `mlƒO]WO|v?%t oT4F= G{;OĿ|7(t >X)ӪC?_E4}D PPhU}]Z.vlҶ5ݎɇgv^p^p=PP UU%:ܨ}̂CBǮ@$ 3 h#T+@fl%A/PUR!SiѠcEY]t h` XD(DfŲu Q磯E(R@۱;![B 1 F=Jw|/}5sͰ>.J(֘"zܛmPR-$AʒU* *%]5ZQTU@лk܌:xT=J @qsxDU2KXl0@2]jJhA ѤPXy H0{5UP d[+#GnؒP%HkW[{1ƁR-<Ӷ'd`,R]%C3piB4 duV:>SJOr)R4J[P]cQ@A{`K{wvA2]>k`m!1pnPuGwABABMe4lk}ΝP0K@$JE`mpp=pHSt7oN%(UP ^`u@(Am|7vBL h3cTJH B I&64PP((@*JAd'uh-fRi0&Qmeow5R 0gtv!@G v:9A@PhX3=x mmJHIFUEUр *PD㓚nT])@GaTYdH@ĕPZ(/a@T ] @Uj` qJj#]b@ @{p lU۲U RFm|9h(`T@E<6Q" T$$ nx ^$/-0^JmGA@@  P P"@&&L&FFbiiM4Ѡ& MZܕpȼ/_]-Rėuxkt'dxq yH3x!ݍ"~EXxnt[TM>NR5JGRZeEIZ@*ф rhLCAА-Hz]Y&0LR c!U~O`.|?{,@|$.ee H\OAF`{6#ز@Xyw?4ك>{=¿s4_8+~E&7D1|(*G@Z6z٠@I0(ă4m!1~KkdR6 yȔ61)AھM{8%KS >j]GX>ދD6hGnTWuN;Ω{ͼ|𤄖O rDս ""QCb:S$|B/ͺ^Ƀ@/4|J!_iG0Gh%d$#oާ6l>>gTGYGP]-}nZ5e|tD8Kp4w>nPqG.^(l5}P OY'y_c!:B!}F(b%ߜK“kkd>btc(H>žWg2'3m3nþEVuT3GbΚ$۪:zA9/eac3ߓ*/3k q1zgӵ;H y/>ds/{vkD} t†^:Q;%.mKfQ:R64ק/U@O4*>@0'.m" P6Am[/ 9N]gqHU*U0?wZCn>8Q%SdPØl%aL ) Q F6KS݇I` 〼9" r^C.$}Ѕsc2DR`ˆ>F >?^/ZݠKup٭C:aCd Vِ93Cx~/vccc됡wE-} ^wm7ɐ - A/z w `h_ Y/?Wx@Gg  Q@*COZָu?=#h@D yX*iI hr?{/z;+)Gԉ&n@tv֐$`ф=mC\Dh#|h~< XQǸQ*xT}# 3_$ǿ` i삆E!gA38o-,,^˪Jmi&@t}gɡ~ #62Ë˚H)(>D9yEMU7_gٶ)5*cib:P߆bE ~قݡ=$oؗpI,:{J@7bH9ZG >GbG$b@Gb}64A@C  Z]g^)몧uSDU&#[ q<^y>aׁYhV?l Q!A7>opi 4X#!lH!?zv5U!=V`/U?/zc>xb|k a9>Woh!p1'¥Q2߁r^nu_/z.=ZZ 3_/qZySi8G>@ٗR/ ?#Tizygh䡙Yv^p:8T=K>&Oz)PqJM뻑NKK'e0A;@4@/(@9[pkWE&$ToHK>/iGS`w>Qtrh7r10BX"q@[RA*ஔCJqD{-Y`ȈA7ڐ,} v>GkA}fp? o{mq<ǝcuD`4 o‚ծh~Mޚh`F_A7UMgel/s @XZ}?y?M +zsmJ xfR{TʜPާ*b@3PN K^A@`XyB*;eO[ړUvb%%D - bSVzτ]CMms ,ݯYs3TUxbG|4J^9L(~4P'4~x-yT;e@]۸eyE QT+MAC11Im@q |Z' 4hꃷ%LAoQ_PA/ueVq. V&սȀ(}@Cdm6 jc=uQc g>‰=jEaNΑܢ"ǜͨ#^C+xsItI ӟ7W*lw6IW[v2\ 9ĵ= r )F@$E`V;Udu3{.]#9og4i>:??2it~FGW'Yrƿ:< A:[FG?z4 IƽrrxiW~I$$XfaB 8k j@I@0kHA#MQTd-"F CZ$ZeJ 9_:8bx %).w<},?huv_ӯAZ.'ާ>6]fobxRBzC/lͼؾ2JI]UT+K/c#1_GʘrӪE /q".)%0{m{ ww34_M*Tzo=%Pνz"Uut84VHHKEI4PQ}mC S@i3 C'D5V&Z4]y F+ReCXeCRx_I/ŏyq8!eQ bDZxޙ;# :x9yP#j[9+}CUB<66t3¤zfy'q |WKMrpɤhcʊ0dzkOT*JqqF0m z'U)J"ER)rAI˛[zЄAߴ%?M)G_ HS)ݢW%q20! ${DS zA A(!f}wLC yLhهgLqt-!IvTC{8 +(&լBRXY5Jyt4iՒ%m?rD f ЕX*^,Q{ _|b[G+ED`Q "EsA|A2Z%D rhk>ҤhfC^9cC_=TV y:9z_sH| $؄ ұ0zҰu=gv 5 ǒW'u9W0 4G6<(>Zl~g9HIO>pv4;'1Ml=k-R&]UUO }~N|6U*S9y0A)HI4 `i*\wZC?z pV.#IE{?ݽw61㉕S'`'W*p;bo3twg*萪0:0346U Pc-⟴4:6! Ϛ{a5P=iO0PԠ(>d֊gٓ w5~f@*U2Xϔ&h@O=ryo$ON9[ξ\ +fnjJ["PIͧVK5NCiI-D#Kn]k/HKɾ Av(GGE$W_lէ~LA${kF?4s@#*3}ւf=>Xo}6OP=]܏nIH 8b05* iJLl2L7lWAqj Y 97m{W!:hb!d PD,La1(Z'jPNJӉZsS5_?|+_ǝ ~_`z3o^Wp|(sD3;@5LOGG3J(V$B?vP*nį5&PI l9uSl>I:eF9KXێ@)w:%1xoCb0bdl$a UL1*`"5(&l^tH+p(DAR0ao2C˔ Z &Ppt{;cxsF朚("~I8ggG;6NTR=l?@#:w:?<MI+'9@XtL?J!fii2P@҂[͟:3O|;̲e: Z}LzUU?,X0~/(/COEtKQә9 plؼ!_(\G{~?ɇZR)j B'PlS_̿-:&*X2D(r" lip΋* y }Uq#9-$2?sEgCbӆ5c*D78Jg>6$Ϧ{wIiAq RqФW1|{8j2`B'[b|P!y Ƞ(*QĊZRJ*\o(,~;a~tfU _J&삆bVMbkC(1RSP637h14Al_EZI@|$='N|ꇌ@TrJ>~.)''aeP[y 6];kKq^׳%; ..H=ǒˌh[,m_rۭvL=8~2 ãjqNΖ6LlEIW8ypwQu3BFQuA˹⥶s| %*"R`C8AʎNNͧ)-9|Vq(R1`{>6|+e9 ITYQɝxt>)$Ieehj}oLАNj7FXBT%wE_T 0=~Ϳ?u~s4">Lקp؉u,̲J4鏡~|(>1~@MQUU*(GOÏm*]H\C_%T~Z\3|__B|YUY Ĺv GPAwQ.4D1gW\ߡH i-|S[] %Iυђap2r9 XToXCṾ"3j }G^וګk~9?|8)^L>*)Ԟ,.ul>Omo|2[oӖX&bX)9+Tc.RJ|ʣ_JVЍ7OlCuaT;0}0>_Qcetua@T"HdNRM:>#l6;UwN;u׵Fv~!xl~sm9Mw n:2?=80ڊ'gz8fkX,@.8sDYQ,Gh9W<8L#H$|)CU+ooLu=Ԯ4KXtm9.=tk0fۿ \4n&yEi;Ce]XR*qJ7Sks^g[3gi)Y/2}ӏ\T;c s).^;ddaȪaliuo3`ZJYՃ$zV)708.gA>}xqI.sg7F_Qڒxb-U} ] Vsٓj@4 e) &d @kB]NW;$g4 {#cz[5 M-)q8kzUnE򬏯[jFI!7ﬓaec"[j}e_'|MY}KÙMb+0mNJ؇!w\5(9ܞUdDT1=73iEYj (mYJ^~iμ4kL_6Kd>+2܁BHbC-dADd(['ntxii}6lmSX*]/Lζr~m5a3M:0,(܌9~>h8O4suv`@5&s=&!'-$16 V`"<̷ϩ(;Μdu=IAy|3ώg#hxr~5{5>!֧11ʝ&& M֚NkKZK!Y]?0Ze2a;e1RKw<(h]=e,ӐҮ q7]P-})V_J u&d1Bs*!uN5~:e%؀lgP+,Fs˞I=9l= >'~d:)Zij@jĉ{:AmaFBT`-hQL mYV;ŖS:.3,GÑ%hHZOm4X62|f wg{ˬkQ_yLlq}/YyuUPctU( o+bCXE48b-`fjM^HJXdUr\ud z1!2iUFap}su5KpRTDp/Wk,BPNB2%ViD#E-2dtC}0ȔɊ[ j5UNW&a(|Ѯ%^`KSi'*m kM9Ail2Q&!=|@[VkrNV}i^WljF)u Py%ǁ?VM{<))d(v?(PS#(xC>h}ry<}J|rQQVW߸B~@,EfU(@MRxVNѝ^)4 6MNy$[̣OeфPd4!CCE"SM)@QMKYys3k}ltH( ri_ք #cUϩ$cI-*`3QR.3K8)筓sxр&R0#? -sL u 0l 89nrejsIs>W6Eo7$m'жl\0\ Jq1LYI:< ?1'y==`"@exb?A=0璡>/ocױ}uX#'9{KMh.XnN$N"v|DsTiAI<鯱 ܯFs> +>G=pv2/s,m0zj~ܪ TU?vk{A0`8,Cɠ RUz=#[r &j_eQĐ"-A|[#IVo3%Y[zI ȏpm?O4^ń,@@ O!%rd|~LMP%@1$ILK`z%: gI*,R*o'FؗV̐5&|tR HP(p{wo^*uG C(肔)m|yo@]Hm)@Qɻ bh,h)("Mf5ML՘=eǿݧPFz4#B<o 4dT/Uݬ |Gw5vh綗rx\OcRc]dAN|զXH f֒I0x;y>ZY("ҋjZAu *7 N-;dN.-"LC :7FWmt쥜 0]="AP_ )qѱ7Z3)eo Zt49$Ġ?z]w)% w9S,ﭴrZ35+3((WުKx?Fh6bǙFƱE)`{PAP)C؞q9WoE|vLܜLC RYڣSNÌE?J)aA)Ip~ (8=E)( *s׳/POyCoY#gU?!Kx"<_DWEdts4{wP&LKe(iХI>svIM'~qڗ7UY|eEIݾ,Z΂UVWWR%@,#=Tqkte@]bi$2!3)oTBW2Pi) `ᷰF:hz9oo HTɨ'_KzBGZ**̨a]nkLض:> VdH\6*g8;G D^ʶvtr 93Nj(͑O>thɪKs.aYvZ;LA*],+lbZ9wͩîM:X/6YPɛ%j9= uÇjr*~ 5*ʻ"kkOBũEN WS5|y$>`:{ļ&e6]t[k@#M!CӁ{{t y4([~DDyOQeT .(OGFȯP'n'l;;N4䣉`ǂE}O0׿'=l1vQ%ߨUE=uɴRN*{֥dZ[Ɨ]κkYɛT^yjT;BޡBl]A2*~^"ÑޞJԖ̽b%Vωg0>ߟ<ew*w(Z7 JJJPŗ] m ${ʁ~M+H9`IX$i==lyѴPwYҔ)w STʩK4Wd@ `S P s *ȊZTESy ho}4K6x0<65cEҌ惝rF7CRFBL1TD͛IK)&L?|{Ȑ_aP,.8IJE{9 hCO dOt݂kvWH*'&BnvRo+WQL| \5YpDY/E p;P닌uS)h¥;,Dtd;T>k\JÓPB{-\{ j8T݅}u$ѝl%fToRs{)Mo}Yʅn&.>0$t'%j FZMakr ^/ F Iۉ ^K3K5e$T"?2-ET0h:m)rk2QͩJLl2"TH9ι7/(Ͳ&y>0̅?ȧf|\mӧєoyPfƑV d'uq!HXܹy"t˻Ycq!Qם a#6[TY,^-JoUW%*>-e E= qɔ?lIcuIX׃NH~G9(&4VI귄70`GR3lt ʟv'JLIZěY񥟶L֬ۦ9]ʻdo)B\o9}ֆe~q8fM7:Y)C_pn׀`fbgw8tYK L IBxzw淽T/Qea\v-!kCaj3-†kC{̉*{ˣLX#Uu6X7*zC?&w?O}E9q5miJ3N>èrr|H# CE "VfƘzl\.7{ܩCU"#u'z]#PUrh)4=UrylʾlOw~YKX;X"Q89B>j3'Ơcrk1xٯAs2{OXCq@`QXFY jƕbIH-R?7f#A*m!\lfB7اG3|  g)%`xB[pdv|t$5 R}Jǩ^D@&c>\oL)!Κ,|RER m\u/u( O8YLzmK]x;Fӣ_&u-D65C\ή^QIA$֕?d-U^NYgZbqB SwC"@M1DQ،th{ڴg=!(-/4ɀ=!,9}od&l-u/at(j-k uk D٭%r{5n-v @@U!;5M&C?$0Bcb|}_#Q?|R&[i%I/@nF18:=v14=8b㯻IDZ s4J` U6jG;;4w.KyzEc<-@tg#`#]շp0>l~7#CՅ#.}uBCV˹=ChrPe J*ᗩ19jvcf~W86(NCB(g%&2*dN[f|AGO!ӕHnP R#u͸o3­x|3qB&_&(i 8aBΔBC_ )o:fv0' 7MTP)2G+[ oPHY2,\KxĜ=F]~JUamϝ3_zӺNK1̻wM|JhQA67237<?`Ηqẍ=a29NwXH`&"]:=(@yxI#래f'k,HG f(i015o<寰tjd Eۀb-i!A`AU25:0'E(ΒPƣ`=\Qj/w1zQ!]'9YyI6&ќP xk,[.T rJɢ4@| $NPا<3ˆυ$./_Shh" |c@~JL UZlQ 5VmK}߼ڍJ DH&0)0~E;*0`!+5"]rF>rsh`Ed1Ƞ c׋d=ZӃsaXrmj i@9z9tJ|W)݃]NغiU!odŇi:ʈ3)C@^JRmD w_3go۟BmhsLMß {ScOy}ؒȸD󵝲D˽WZKXԛ+ȕ";o;{*%/ѶWԐ)]bBR @ I^nxD\2I17I2 ~EL w; lTTÒe irjGp2o3hivE~ :GE %i!_8M((>AVχk۽xKQ?ھZf`g$%?luDgմ {F۟ ]C~KU4iձCSOcX-E(rFʜO\RT^ t(0'\A+y<  ')kQ+ >U[doNj'ufz݋Jܯ39{y:ޤQ2}O\aY_~>@Ӿ;\N5h s`9E^t+$^;-V`9'oQGÐ%*{&1!g>j67$hbZyۋXjrE%]JĈe2At)ّ+cuM ,SG ȢKaRr4\n *WBZBSkςt_6jEFKElrN5X}q=Db9ƹ<W|=y7!,^/*ȥmw:>ųSCWtS ~riG1&P:.ɉ ݄T\pIA# mBNgoO;t0SNtN3wMo&+.Ýr,2d:j%XmR1ǯqQm u:(78-d9eV诳/SdCɲ7FxN3 s%y~c lm<̳xڲ_4/C87ƉQV 1 ,s'~W\*عV(Gؤ_' <@BG8dk !% "IǰcPC?uK3u "$kpE3ig:ͨ1-{oֹOPaX;LoF+#_'ؘ: /GltC3kpR@ - *kjbb@Mu)Pn_$ /Fl^ # UOfs_(HeԈC?\ύlˏlhц>0܆y#?UM~?,fEwA)X w#`ύRe(˰'V2ap]"a}i3dG\.㜀|H( NP^GjCҺM6]C>Uf'H=Q V9[(<2{/=%l e5PPECjiKW Q=l/TETğ (byΝ<>k*w΁j[QŻKi6OB=+̅9ױu?aMv!juݳxy$ww/M<㦰k]\etuUG 0.Nm:[荼xY_%jrQ\o93]V|C8*?ծB}~[{Jeȉ( 1wE8>xt}(Ol~s PTCR]wTH~?JOD =o+n. ?WꔎjP fGU h-_|7d. 87R1ӓi~ɟHbƟg0!zB^vD]{F3rD79ĸNя7ьVѭZV"yXYA-X׿⠇`SZ &z0?2,@ )QB3T@ގϼisc?1#>RwrCf$iSE^u展Sػz!x  i.ff3S/=_iY7ЄD_D)r^}?ĕ gdm'{()m4>J3Y[R3LвTYˡNH~#|I⏀hÝz-{V!dH3¡\uLBdFItlpg3f?d򑜭> tZSO:_;zi"}4쨭2PM8Ä`N׬R Åf[#Lg$TȧذPcn_pl :hn`# ®p{gKLkWc"SG~>ͪ#M[́v?EZ5JУmoB}*R6~Pxn]{򴎓V6NUiqR ~?="0L0Γ崹'{ >NcNQg=v >e~H^$̇=l~-sDMUG!%_Rj5;A7ͰcgzL_q\_6P<#aصgO 7Tt4oA?)Fcu/ιdX+X^{ctDk6ԇOTVMRPaB IϺc)ߞrNs4I:^L{ } m5ψ(rG ;ֿa&YFspEnTLCo_C ; uk.sRTF ?oPжsCE#4kW*!ܴ>$ۥjťiRY#,[8=^W㎝xsbx]7 (P(_h!@gpFI/* _[7[9erRDӛc\Iu x;յ7qv¶,5)Ѯ5e SSiaEiiWdKG/uzΪB9OezTCc9yCm{/fqY !&HB(P8V{!BaC9,Nz'һ$.A$gFJ>ǯWc IY/#ǫ՞nv+KD@SJV )ʌklcD_A?'&XU}pLoЪ*Gb@p'+GhL@PԸ!l󳥽meTI? JR@A'pj=NjmlKœ'ht5WJ/nO %j'jڽ+tk!}Us\N9Xߨim K҆+f&EP1N(;uF+YiDov!/>Ò6Te4&VU1YBcZt4`U|^vi\ $}p@sr|`f7LwKe6쎽F{s/35Oi4=t(#RdS4LW 2G5=j &#?MVD}ǿ읠W B$fb[EY3zOon!P'KeBuV#[{-E(Z NK\wdI}֚!lE^W0åyFDDirt@l s,Z>]Z#,*J ~W7"vԪώόIww'?_h+U(Zd? ~$P<~fп."4/'FDj4-KxKEsRb?[KYjDPQOx5SU)lȡJ4OP70ؤH°~@qq>Go﷫CfFKr8nXu7G{ó=19zI ,QCTLEI#m f?kgJ %<(8ΝgFFfffV^ a,)0\-le @ AA*%% (/y4? 2Eغ˼=[@4vڊ?ú{rҞIaJ(+GI3pc8ڒ'\S˶L!H̲VyaHli naJ"#IG,Xt%Ik2N&8Ǯ* V0 dQ'7kw<~|y.' ~UbJ$+9F+?N!D@P$fd$lt ,|"!I0 '&=:]sIFaME 挆{-i9GJ$3g!xBAK2 bl (H⿕ P֠ ($R# ҋJ "%(4)HD_&'M709!?=RD)L(=R d+9%dRS5Lj\/d8EN !HBD,Q1dSQ 47( Bbi(BHfR "\̂J*frLMo TM4ALE)NŐRTTLDL2K0MS5T3%Q9aJM4MAK%A$TPEI$AI5RDDMSPAbԴR$L@[EU 0V 4PDQLECLAEARQj &$)jHJjh)R`ldT@IE54 AP5 JZ"*!Q& !I(rJ*+%ɢjh("jX*AL*H*5D0UITT#T̵QPTMfe-DTUQPIMLDDQM4RQE%I51T 4 T` 2> UH2(tbe3P)=TvB{y$d @d( !*J( @R rCR@ҦHIIU@4ד CMBTeu*ͻRRPE)>4WhBc mB5!TKT4&JRB21ZFP"biV% !i2^S^$U$J1:DrR dc$i([+%U!E(H2(ii)D("P*JJ**C%Z)rK!4EtI9]?6@fUo}# 4ʎ4d.>:X>k!06;yp0r9 \Vh6#S)L$1}Su~OSg,PG@ 6ѕz-Tj'57~@p A7Lgsv֔$xjZ1̪+1J}4Cc/I~vDžQTb59zc9< sȍ`YN#f5~B#HM8T/~♊]G' M9<(*3ދ7{ӚOSGmT3)]nTRZhD"cSb!6"RT?u~qr-t ۘsi`I#|<'NKwra~(z{(w=!{IM|c;8K)xK{A+GQRHGo0X7{#"-II!Q6,!-1@ Uz) ТPTT%AE L\M%ś%U`au:o>G$qj2mXブFU3N]WSQ&,Q6ʵ~,_P=goQ&==Ͼ? `. ߰R 3oII}+{%>8l[ seaDPGEe+X1wOVHJ,:,xX}_ҕ8BA?Bz5k^}932T{T~~PAiUW񴸒W_yzN=V>fw|/XC={;":8cԈ9u %3Z ! 2#k j2h{!t7!^M7' q.`#|  n ҇H1[L0u!.rnS*`)Fł "$mA#uQQH o3ƏYtk3]1kU0'LIĜ?Mc3ߛqm[,mޣpLH'ja ݭ:ʏQѰܭKO^~S9I_ ´z5^lUŭ`Z{kt>ǩsVG&z"}(CvtoyijqYyqHY^]nB;ACи&/O܀^k«_;@PwBE8:BdD|oz 'F%E|-3O[qADIPa\P1. 1,hM]1_KEm RNH- k%9w 8Ʉ?'QվȜGx7  ȕ'BXvMH=vU č|T/م߷dX|y(TE&(=N%-d`ŒcӽU[P Pϱ10kv,aN(F8JslƐ=ˌoZ!1ێJ1CbM%)8ϦJR$J33U:eU8==eGc۾Z(+@u )Jف=Ϡ?~Gk҅W$( #|T Ż*3EYC6{HXiiֱf-17yg.]+o֬O7x>?=<ܧ?4sw~ O v'x**GqREk8]LǂTJ4sH!*Wz<8|&)Op5ڍA˗= KpI7p7H5/϶o _Xzj16)@"}ٍ)oik"O+'-˪-uQЌٷ3.pA}aG]T QEzyoJOtXıiJuq|a*(1eNC? ȉ%4 PX Ei+ )D+1\4ӿzq1o~pҘiVvAf :tP:͡ gT)@ᷲjZ_):7/V(;Ma;vc0ڱ|  P)D@(.lN{:nA>EeR"2oHS5nK)p 3`VDxo&G>|oBunHA OV Б߬jqOV9ꡑ+(hH4hO9DzA.+r"ƪ ea(lq,](^D_,;UQ`x= ؐ= 6([5CXk׽#$<(w5^Mj|T=fxձa1Lf]Ӷcs(P#nd n&C Hhj8[%ǢhR+̙Ŭ&}̄fz{~{쉜}whWEz >~>vIB6$rџgu\"{TϒK;}.tElܽ}1xҊ'!օk_G*ɠ=ҾP8!׼^dJQ$A0|l2cdz ]Tc'ѯ=*Ѳ }Ϝp{`Z g@1 }OfIg9:6R|Rŷunc} vOo%v= 5D|#f f){Ҏw1r$w-Q7z{>ӨH!F=} NhqS ]W{t1[,4x_)BXƀLX:09 j@"?*쾈J&"~3 m@&GTP_8{UY{퀌PQqVCxN{yZJuY<[4C1 LϯS",$.ѫj#Z~G^ȟ:#E(QZS|o 99ϕ}_|$D@[T*hnHQ0qgb<B K(.#W|| q \&ỨʭޅƣŃ']z=7 $0/Xy jOJ FeO8j0!!0K1$YI >Cv@BCCC_rASɔVň# k#ve OǸS\;(qG{L}v>8}]}!=)tO7 rX2My G<@ORwwfKOrPH{ H`Ʉqu2PfXf|{C(OWu4} &} -9RI>xUHg5x\J*uʲ#U [t5_a~ &#iy̓Җ-< tJ4@ ?هvRZ8LA ôԀlSZEf>&(ZrD?wrO&P}ՁA3rj&UMm ΜqlW«eK۔A0ll.XITTձWى>~޼迦DaPC{PXQ<qhȬC״::A~sboZAs޶g0[~t|3U=%cա݂Eޚ xL ,2ZJR[`M>kT#eʯɃmWV…3qTvJ[g|y2&P?˔'K5y~ѝ8TeI)y{ȯ]#cw^u"T`cN_OШO?Z`nn$0np[lӏħ;o=!@ϘZ"E1*2=mh, Dm04ivc?|X R u@/U׉HpᘒKAD$w-vt)Ԏ?^)1ЧIqåH;(Rm,AB0j1Dayq|=kȨJXtk4[u tjĻkn>z9 <֞~'V<ZX@QUSK1L1bPR}s]S۳ j$g=Ƈ,Rk8۹vШG`p+vLED?w$]Qf"w BA/RAUޤM0m-+-$+1iAZȧF%݋ƄKއ:cd SSPU@D!IS4T^sk* "ETEQb(AD0tհX#QSZ!FEYTUOѶ*{ p7Qw `*(JT{vtgR4 r;zEısV:s8&MIT2DRLPLSDEGTeERA4M:߯+^[ovCH4FMDǾپ_*?Կ,Dv_>gquyY U_}@P=YtQ4ltJz4SMikWZ{W {1cLN(YY퀩tA`&@4p#v\bbБt0v));Oˠ?3k 0`L`;. zXNdr*RB5w5<^r X7D% @ wq BC-tJ|.5QT=XOu:+Aj|!yiP3fwmE[3⪂g}k:6|tATPYRU(?,KDe j&_MniW{ʇ(QYO(}GE/k2eǔ〞8($NW:See(N V4J5Z5GS v$ h $pVJaI-nc(9]@E>k5ۿ6e-]OMM o9TUPl lf{SkfJ0lV΋#6TIFAI-f⽃uT,w}̂T]Va3AXr⼯(ېk}Zմa^]4NE%:xxOk#,p3!0#<eNJNܹa:b~yOaJANk @^; J|1~2RnWdK>`&jEiVTGx@B T6S1Vy^iȠ?; @b3ӏ_1_Eb*2  l{%l. n$eB3A&g2RQf愄gYvY j AIrc-}p :#F ';?;jȈSU0\Le)21 )(2E"Zɋ gߵ}P$+*(T(us$PD˘VLW(Y&5EUMYDqKD/W2(XbLǻ Ξ&+RUF.Fw{s`"e()k"5bU 8"E_۾5PEAEU @|ّUP=c4сGDeM,Eb,UԠbTQD4[2Ĺ)r*S÷0+2RmaYTn'6 ~L;x2@d&UFV(ayr`fMeFwAenJyJ6ڛ3>£:?\y_&`bPąS' p`\fdTN/nN(R~! e9) kFP"q_;jnMS\?#ҘE:M;oWftEFÐ ~MYemH|% oߣ *g Hzӫ1 78b>yߎ|[ I~.ԬJQ<@ܨ4D`o{;'l_iFv@,(,C-$Favafn]ٞki  ( @AԆ,m4 {9U]!{<~ d]J%^CeB 'A+IS6*PO$"*XuqYQN= 󿳽4&#FPH*r+eFig}f0, ZE`MYGגXH%d @ԍurСӠbh{ʗ7üTQFp͂ݲjeD_CLdFPm8ǹ?-~~߯0ʬdwo>(~3rO,۬~b[GzNJf$%@:zh 0k0,rӌi')c= B=yeU\֯42P8+ b3 vp:M{8GW6Q;c6&T`rY$pBx>12.Gf@t 4*L\/!h1܁jc΍IUdBE^9(qVɱǾOS|W$y)oWU3cW7?ēץ:"\taE<`8qcxW8ꤳU["0(/DT>ʯ/tsXفcM-ujWz"iFZ2]uIq LJW (8"}.iU-tj HY}M;^/WhY&q 'G[P*h 1Ĥ6$ o0W."3QB MgYtٗWu Ϟh`K7#ALla0ڑ"I֡:>Τv! C@ܙ3 |8sy[_Ezf+>-&lc2N`: էr-g_{"=j#|0:>=6*SYd(ژqr(ƹ\RHhBk 'oqB]mAjT܆BҙU]O3|h0 ܉!Bu/8DWϗ Q#81"Q"!Nz:]znCV5 1^PU}؀(W8ߦ迉Wjf(m&絧k%x5@6QιqlCÿvax3򺣀]maZtP1fHw<v@AH"ֳ#D!8\AI&Xu;#6fIČltTmxr1]V;#cT]P~mzہl"= n%J') i`Q!\'UtZgR(x;ٟUL'9 $ԒH;4Up{@ƱGt"7W)U/ *.}ʽLKc#d|]DieڹHH:9&vFVL?f[ {cMb@T&bADDlyHGV7 " =^>-E7ΪA9*yC5k҆C:p$&3Xa>S+U˶/ve^6b`"Ū OBDHU}0ZMցIR/2eYJ8@CgIfU>S`1Jr\:Qk`)|$Ym"C-8"zo] jf {t,S64_>>YY+/7VJ'N~gAW {cÒks P2ܤr\So;~=x5g]FS]iG֟覑 :9'i9 =VWi ,r~jaϢ 2&ᜥK%]2qb7\5 3dR< RYROI09,ѳ/?N.z]{ VO~ʔYl}1!\`kxzebjȔwZuFTQJ\&^ӕU9X`#Qpp l6aA!qpGMp:RziXjҔ>,3xUP#DA%y!lr.q}y^9L/,KzWuAWBĺsiilU JPW l[d\\XR REC'^k\ieYJO q0$⠻Wf>U<6f ZbRq_]iz-#X2tX**;<Ԫy8΋!@AI\ Et>F 8!)M\W)6dRVLb,aXʦHl0. !}oPɢX}\]'c%ʇ/L.Ӛ dc9AyDY] l7ܠpr1nQT ݏ1j <χ:>W8 j}!9 V YTDl@ȬD"J9Tq̄.heEl40 r״ (B,9ҠI2`Ydšn^G矑DAR(o 0QȂQ`?)38|% C"43`j rJ#b(F d\Qd?fh/ڀfݖDgVH8&JB\[m(&lBCjDk Ȅͦ@>Jɢz#ce%_ 8+?w>qCλ[ʑ3nBm9%{e)wX6g^*[*@'iC`ho,R5 lZ"ި[)7Oؒ m+4sXm[Dc 62UuZwE+Ay$w8=Qe@Ւ k] 5.3ZB5it x˿ O#[ײ?5["ٰ+G"ob%!d21nBH~nwav~@p"3S~Ǟy7QA B1t}9oy2ڂC.PH5 RG5±D 29 @YG iߕt%@ϑ;lFIEuڧ,/[^Yf(6KcDhLʑ3Mi:Em4bDB&ӣNpKqp܆?33 LꍅPAr5^vET>ZJ)mًQ^0YgJmIaRDLMݠ^<}3j*tt-4,uMXIKTQHV09eSa J%a!eC0fr;W f׎f[s0NKGWucV*e]I S E)^R{N8ss"56h1`QHr 0&AL4!NHrHd$9(QAK nH|q덩 DIݳӭLq PS΍1!Lq xmy/E vPEٮl9lqV~^d'NQ:{XQ E[t'ۿ1\%6CB70' @ A"EAR$fQ*B` e> #/ _ǦĂ4AŐ0,HW;40Bɨ!͝BbBz2Evh,lMt7Yw2Q-ތ_?WOO =mCfT w'x?Br(ڬ-RҊ"܈D"I0R|YvP0@#lͅjB fEv.%aǒ ouհS`g8.sðḻ o6vd ?E!54Bnn`SqjKd(&gN e9Q|L E}|_]̗#LuRۦd\ܢw-rBk\V,jw!02ks6TZ2@ V 1v)ґ#6?sǩ :٘QٌtThb doUslV 5 w:)_)|jح\uNwȐ;V6W7J2*AssY${I5B(5ĘX>Nu3NeNK+((mh(}e,不xLoP@* ua"޺ञj4{+7sӾ%d]J gp5ql XR0F#$[ ېο1U ?A8l=~'8eW>6:}CGo BTYku֕=?l\9+Zt_GpBm*Ei/Žߏ06di _s*HOw?a5snCDiuuM*=uyHD0B/u*kM#!@Qh+ CUDe-TbTN^Dn/()fS'?z 辿x`irH 8(p6} D||F# B(ْ<+[PDNc"k1DeI'?kHk6#irWLE!xsZYtdElcZ?U887al%$X wGSlmJeUFOa ƪk\+iޏJ;ˍM8]W=*Ox @|j`g/G[OBy"dWS #/`hn/ /oDuU:);F|3'*P ͙6#2` #dG !FZ KUui4JcĆ.%' ׯ?ۺc%DDf)N=f\8B՗qDV!ܜT<`RӀd_h:#Pj}Ybr:FoƒaS!`Rl 0'h~1a5PQ]25 B= B饜(2~)0<\6ʊҒIq%~RY/pt }'9M6RC2Dm4b,;@"Cv#q* ?E~쥱~Gn8⼳nwoMur}d5Ƣ|GVZnˍPqQ#a~wf)NT[x9Ngd_a%5\U֘]g;f\dה7U(RE9NyT4ֹ>:$`C/a'MHqt4\ިtó&L_}1}GJjowC4 ߩJC}-_:QST -gYa(mrOΆ?.Pz)^}} 352)BӚnFwad·tXG栘9՝j4K}22] bk˳PS-+#BqΝy{{YטB|B yusDN{[rpOq( ϔU(6(I*l'5-: DG7-g\=VdOL߹K)6+9A笱t2#7"8vm. Nq(4AvwG~APHd/LQ]m%0O/? cӣߥJ !p"?IKݐL#LT̄bQB ;B/tC@.P`pd$ 06P;'˧*{ܐxl U9s') 4cWf w/ UEWkq8Ĕ+ Wg͗n THyqV`S'y7W .RTƂ&]^3SF"˅X=;80m?E|ln Nr>Vl"(~DAU{L.d25)xUs]hvNJT] 4mU֔6[Jbq-*g\G co ψl\ΤK 8,Af^n

de,LnNLފ\łިdϠo}%Y6g\$Yd\sBrB7oCk=Q-TXZ ρrHB' v )LȂ#!F*=7*hJ S>J6L68 Hn)46'o>9"U(<6>2|r+k8ucܪ.A+4%@dWBtt=~^ .rՐTykX": R\*IlʁevLEUio~#~칢Nx{7 2iRk&@sxC^ op4~"9|]Qs#q|tҙY)pFYlKNkpX1)}Ndن}oRBVCh'MuDQ0YfUg@wĺgP#Dl2 u#t^YCRyê)Y35WK5WeRFBC 1Jr׊P Q" K!궾.hgkT"օ DR(S$Ȩ,7ClY;JZ rhIjB-v0%URl@4 R  (Hqk9]i7dl3o8wmHSn H(*,P ̉"2X QF՗(),l`v w0~Nypw.9²PޠHLpd+Ӭ A(Xmy*IrdQc+Q22(Aة;M [ITWO!>(]|A WX.s4G0t6{)MEF`WJt5c 7$%Xnj07šGR/mZMDuFAAf"Ԉp D/]u^щJ}Ac ~HLTVaϟIH9I}w~|s.7CT5Ͻ#jϐ: mA#+?/O1e : Ivf6Xlf9zVSu"_)DZg.ڠVM'@3Bу9<@3PR0B]b3.2$Édguz&;$%^/rE2]KQIk-ن a  +%ޭY+f+Y@?X+23އJ_|_ZxiV'P:K\'f $ѡ:0u}>B\:w]2@m 12IU) Aq|D |Z> {٨H(Y:D胷}shYWRe5nGN' <#t wZMar7ӥD>-")pv@ $J%S.Utr*rs!t8zR$f= Xc -i]eJFגJv/C(i"C\j 2@X!\WʜVj: ¡L '@R[CnԿ60d B %h:M|+`t2@]1 1(ͷjUgU YBR콡2 8.¨ɦ)"ttA(-+,*i[e-baP䃖LD*Z0$r".#c& }@E-F(?Jt w auev尝 k13!$ͥV}E C2pu1_'fKȀȖG/W.;⏓FAPȡ|_tmPZgPd:TWB! ES?:  ±GrȈ22,M.kZ7a5fI.+rf $Jt~< -;lϠWJdkHv-ȅz.=.]8Q - 0QfGur |dKp&ygV@^,~ ͱIы!dInz`zjldHt|߸økޒg۵mDz=96ƈ(l`NARNqGב':`P9'E+H/:噴ĨA5y;^UWVvKN+5>+O 0:+Lzz~2D?SOZ5D|c{MG D3nA Ff3LwuMU~t|lg=Zw?zA,=6=?/JCHLB=NA4^zi(RNDV+\ydXAUºTMZDJe@TcN}D1:.mӡnnηa/Π&=3? ՛{YZsMզLrC.@ٙ7zdIRN!q<3''=$4)BK*[12?ҸDڏS_څM\UGqR6ٶ@v~lf%A!ydКQg_ vyR>"1{OhpA@G>}q~gv H6VP ?t:WSM3´Ռ5_ޔ5K)2>X^C H<+.!EvpN%B Qq,#[X2<8[0Dsss]V#l,c=NQߏ&bG|KԂ+,wz[j [wX.\g,bqKߦ!,|WF ߝgxכ$Ħ&U)gH%9ݙ&R9άNU=-K- srz!Wa T{9:Wsʰb lOEJ,Vb͇%'+XRSݷo|fqNUzƚͤ٣Ki-'f)ETǾa PD|Mt\O&ޘwxc+ K|8#.vZ=ךӁ:QTTQULPL=\79aY߯$DWe}0rQzLw:93!daThEL*aCDq?PDA؀zWAG3:s\E` -7mFHE9 7ڪ \ܤ5Rh e*H.B&AnvXɺZtVHpy8D?R;4HsQiAtG`90l݇Q]2#lտ?_xjZ7Ϥu44 VF9R)?mW7 )?aS:#*:Я*bu ul;hE{'}`5?oz}0q1UNj<̀fa{ )픗;/uv'CRه#\-\{ I,j(iüX6gᘯc҈0a'PP륵"(ڟdO@r RɾMPXd)N9@:+Je4׍vEޛڽזɳ.ch<1hz{KEAX?6c#=4Se>&S.d:\I0 7L@ qA^+1]x2x/CB$*`#_1BMxkA[Y75L5#_|%JHkEr~R5|je2β^l\ȧEp3!|fjoz\qmU2^S"Е"((?W*])!ͬ:4GD[6s}v5\ sFAmc X$e,5/2DHb4@(}i 0/j苔LIFvm78x_4 a@ȩvQ1!ҌC. CkZ G`A @^l 6yE2"vVZ8nC|EPp2vj-RH'7_O!6(dRd1N 'b# >_\wxsŕH6C#o|`b+^\Q.@p6;@ˠ!,{0ڳŝ7Dt79[CV^yX"AN(_X`WY&PNlC d*zCHZ_ʻwcԑhpc31B#i~ھ4 h(H;̑á(Yώ3$4+M%ŸHd)&~GJ G0A4#7F kald? 5vJê5+.H&,ptR% ʱ. !vXq'{m)ZybStr{?} TΏÔaJ0 ,]؛bx_BՆ&O 3 <1 []uS.9O7Ҋfd2+o% }$;C+p>kR5\t Af?th(Т ^A$8`t(pcdĵ $M TUUp_m܄[[4Q$j1%~k+/71 G,QfDm 䋎b}#L>"Teo?^fŘO?vؠGXօ|hP}oOJ\_3<:jfK9LXnHQ%3> M$q @Q聖SWb}Obj9ubɰj0^4VA+A,VyL+ V dSemdfXN G!R!! w,$;r?ʴ ee1E>Ҹ!Z*mDbM?_hakx]@\)}ʠc0vCaNE?rF}JCi~O5weꟲ &|zEwW$]ǣv(8ɅaДy,"^]U!H^Sd4(A)۞n얉$̱Yx%tE\GE#?_8:31P ;wR'죂F ^s>Bvĕg_?=in$dۓ6i;yXڤ}.Wآ`?$Gz Y8VНTcr6,/UeT礫(D^LT4[vYëd--#g_"3X)R& hKis-oSU35l>r~f+пآ(mo\1 }.u+mݔ7f\m'#(ٔ)2? 0g uSuoFp*0,#:w[!ͩ=X"{PF9/^Q _mKJJ:X#9Dj(˕L§3yn.s\^£(jH3Pf!j3bP .*YA0+ nsF`ai2"lG; W d\ su`HƊkQiEL̒ue"ݓum#,)0w43aڲΰ*T;wqip064{gZg=jjH 2!\k9݅K/ NM SӸZ[66ˆxO+5ATxw $2S[畇@~>=\BrXa$HۖbOu3)433!h (77 2q,zaھ:+dXE5r& . /#;/Q Sa0`l9@`i1Dݗ33¡(zwZEld_r4 j2&^K  ,dՖ9f~s4[)IgFԀHQTIk&5 o1K232BYAG)/|YE͏[SizE;Hc^h%ϙmV.鉥Yd5YE`>zym5wSd[#/ʕ)tG%+E B Up(M鬐"c` ҋDA+ *\0=5{ PYً46/=2XB`ȼHL0k]]xA=1a0liPCoXvd?lS7h`03} ˛b>D2]N~(FJHo=^=3*1'I/QĠ|.BIDqWaAJH:0kW\0py-KcҊGҋG`1Ӈ'*0f7jZq6q3VOkO{`32Op/Vs. >b[bнwox3!w] u֒0]-` K.Sҹ ˭ CcmF?~#.r_bs =>{5Pr礴TǶI=9]fD[Pf9Ay&VFI+qj{b=K0.4JB#ݖ/JRz(G0K;:`خ˝j9͞3DT^$޹b$wiRdh; 0'#UrƇ2:ҷvϟ99,H"宬06u.#l^ssV`2Hhg$P{:ZR.ڰLoe@qڵz.y !H&:8@8i(&"Y2W@0Fw9KGQ4@~-UTpE=J"R2pHPGp"HDaP M$Pc ;kU_(: (z++oQ&/ll5\E ޢzDrlQr;V{R`]ZMK!rH J;Uo$bACV 9Ꟑs[]yMtPovպ}@Mt k-U Žru!' UCo8cxxJُE,# oT?nIH#B6= P*`)2t=ۗ~wG >1n\Nn"5VAI$#+eHU`;wwkw;h17X7)8`b@m?S`3_'Xr[aW*ȺN5eSs(#f[dKVr?/YA[X%=3pHpRnDf!lJ,|9HG |>ճb1:U9L!9HOZ@0"0˾V ܀VJ:M^EyDhIP8ȣױ t|vRJd(XE@sْ($zin֧'Qy>;>4B!3wNKݦ* ĥH*m1BPu}Z:*IssIV"< 8>$3]VrMF"cs܍*=qa9DKҀpS"ipdl&<&TRuR8[^ 5V!6TS!Dl3+cM,.tP mQڰLЋ 7y(2CGSp1+3PA 1s>}NK]M]c[a%IxtXU*+2p{f>mFȢ,BH~S:N~xPRji8ԋSr@Ag ҲMG(R*B|{`H^;qKP] YQ<("囕@N\H:cJbH'C pbGr4+2()iʃI}*.|>9I@]FTUL?COL&*[U_;Tc߯fDk֗*O,#KU&u.6S,[ןQ_([ y$SBޅ!@z WP)?0=y?(wJ`.EsI?2hiK_Ħ#PDc%׳TZqk+*m:EoHd=.Y"$@ LBxH2rzWe#3ᷚBpuv|=(rz2 g _${[V¹J@U=63\ߜ"`¬=x;@7P়/`.7SEqDOWw~gcvE$"Āj)dE~vؾLQ|53iv;HZr[z7tfuRA)Uh-,Ȣ p.6y%TIw0=@KUivHYOiPST,,;\fT e2 ^@Rx֝~J)1Bee3R=,Eؔd-,r+R5ڃYuQMj>*zDAqh$e_>Q%dv FXιަj_cIr(e};m!ߦz&pvU6Vw\aseAck,sb)q|f- CVU~d0'A*0bTC CRy^ CS-T0=lH9Q2^̞k^>'_CXB-j+<# {6XŃו!~+AbF ` H|;ڸW(XTKJݢ=`lBiPJ1Y`3e"YÿJJ*a)ο Qzx`g*6], 20$Ao a|[LQꖻk\I>&I;.;T\0( ȥT³ss7!*NP?Y?@ kvfPݩ qU"@Qvޗ Μr,`pq?r>atXSFLgF$ndq!:ē<-3l%D$ЯKv9dXnܠbjE sDD㹕<ԘH"dfF7nWdqD>R65TU^\FTj2).j ĥ "<԰`"\tGeL^)PrʂA }DlUqRI lkr1eۤ Muт.D dX [W>!ȟ)Gb O3|1SdFDƮ"O#(M($r*PHHɯAypFd1oD~l(KzـлJN0yd*\^]`yxL5;]o_8a{d `&m*Pr:SRQ2^ \BـSʄu$)8Z<<d8 ԀPAb8fyM{FR엛CXe3'f/rzPu"*_* LfJY\KG1%`޽8$*~hi!_"qNG.􄢏=ﭸdg޳ e631Ft>79ig*]/rc(*Uzx89R}Eٓ\Ho 3xh,3v8|;2k+eUK[C0co1^ǵn5=j ƻjb#qHcڎkbjn{Ok=,n{*RBnf[ 2\7Z9l#KA zppJZ ܊#OLsw?[X{Ot'fEQYg= ]T|8pu32\>9ZL >8VsY oemHwץ+-D zoҰ'5GV4MFhn_;C^8vQH) wB1nFuՑ9ɬϞfςz9^oPY4[}Ŧ}TؑLЮz ߬nZd`%B ΢~z^lkyٯ[!X?z%EVv~Ju,zjFuwєr.]ҫءHyT$ZGn3^WЎOgJ.X޴ [NfhRm(VXLu[, gu8`k`"P_^R+Jǻ6PԇTՑ c`Nzpn]8@* Bp(N kWOYvQ0<QTD jAfI='2ތ}a].o֦K~!ߘ64ky!@2A:f28F!\0Νʔgy#NEk:#Q9cffƙ\*2t0C NYxT{,,emk22ՌtDItyxzi (l;Рw]ZtXN HX2FBҐ ʼltZ.ג$~7,y}:2͆.;$NX8(DtoDm"A|?zIbV:ZN2,rdCXwT#+EV~XǬr&>\bl:s޺ݗ:n7$LXTsOּԚ>z{6ǭE!j )rEܾEǯd?EQ5߈|6<_Aס.F-m\q9 D@V1aX+?4rl72処ʤ dr2L*˄6g gҰM/l :4; t߼ZhP [%BВ'OeOly׿4M^ߝ̜Υ1G:2;(frfZ hE6NZSFoV)5 A)>Pdw,G2A0ԩ"4DTX d*r2L*GV[6j*ivopk]1|ue1,H*[mMƒc[M3e ) mSp͎K_ y{<‹RZoZJ|q]PˁUOc̈ 3:ǯ~|eF OJ.q LChc\VV<&u,-`D JgRN˾VuSf k1h!){i| fwh=KPn}sh'= Ӂd1Eb*hJy?IH r)fN%<:s:^KTJl""XO]edj5h'uAQgNL[fAtÍy򄡱R!6dWUx<#B5s "]v/e]<'@vubAf%m` J ,LeKObק}8? S>/|Jj#/t,YTh'8N&1NBPdբI JtJzCNKY όj^-m_*Oo;!0 5Zhwֲ]תa4}yR)LujZs1L zX 0ixhf6:T(8IP@'n7wX{?Z@qT d0e3Ɂ#7ŀ),Sa|P!I1,huѷ1_H'auCRC bڒGndV_Maer52]'åa*dG2:h;Q]>{}Y(e}k|T il2IcwUBJF&E\rV|WnJK!xED Pf ZᴠQA"<qM@/q[Y1}#t4]G"H4NS?a~؝OyךߣR `&mP&҃3Y P-O._*9΍BV8NFY 0Pv6Pj͹C Y~<5ilH(dJҰH!%I+=_w^Nq*_X_؊݋r9lyHE< 9Tr#힍 VZz R%8/U^g?Aa2 fyNaʎ?3 8 9utgץzy04*Mr泓QY 6p;\n3yeX U@AL(X DqērIk'f /tbzoK GH2.4џ]u"8 cS ֥} 䡧D3=R܎()_f ŀ&Gh@ EyM3[G+Ғ%MU'W R$hQ4!rSE )Rd:OXU:yyWY2upJB"z:@y,fآHiOZkM/w%*x\9ڛƒtGZiLQ0Lg[]&<%Zt= s{albUEVD&{?R',d$mvbs7Wp*[0c#vB-SI CK꜀! w !OҧAuÁ e!y+ˈ'ZvO8ޘ=6 9X(Abk ӦɧQs|ł$iӛN=l-S}IФl)(ɥ9Ҁymxup4!L-j\Z~pǯEK*6k̽Y# 32Ӕ!X"j/;Fcm 2zjR=n 9Z2в\@j LBŖ\m),hn2ZQW3sm ʋIEf(_g^_ ?~Ŋab'"DaKrQeL&M*9u3hp߂dNesf^arc9BӶvLTQ1Z<9B~6xpOWߔGX)}{q([5*DOVٽXgQ[§]&1`ȱ(Sm^nf}'v祻/䧯EvOo5"]Z5\K\FD9z{w[px|FT&T#1)dUx`{ sUGxQa`+N'!ZuCevUbtR0-'+_kBe!J\:Ĝ2yk6 dti#Їl+Z^+ \;Xe@&v25i=j)DD0,"Tb*T $<ˠ) Qz^@=DڏACׂj ] (SrNfƐCÂă454"K`'VrjTB`z0nOy5.3qoLZgۓbBl#\rD+v{~՘">׏Tm/rU~Í%խ-$# l, " ”Z 8us:R{VEVIXI<tq,b)|)ZlH*D-[_ =,6x#@eHS0 ԌԍB?iL!TEO+yE|4K ˠe[kP[[$M{ ac9+ ($4ʒ_D@sdq)B߲^׭{T&F[f3 ٕyޢRf +54>MWn@?Nybcryu?Yq(d aܑRC*6 _*C(>9ݳT'!m>Ohj/:a =KA ΓHy@[21ޝģgH4KeʗM2.03#)~s}Z(Zai7Kx/GdkDtb> 6 Ej$(3:7ހd6uxC97sWW~ftэc#HVJ@xz{YA3:̕[-RfWe؝V]^%o+io8R#LNԬm_y*@O3ng /T@V} xbaJI$ HQ 5PB$!kb|1cMЫX *̺JgkT 1Axm3(|1Cޚaɪ1(=$W5D)5娔Q>13"LZl V)u.ha"Φ(g(=EPR-fG)ty;tg W_:nLlc0c( *$3JHB+zAE_Tɭ{Z`sivQ"C(j( %2j-](8ҕhʂX\ *J eN>>zWS&xUif>FVRWkeod؜<< ;XZRI'.)'"LdGX@\AhPݙA$&b=RU,9Tԡ}k+BJ0,j@aH)g(`2AGRS$P 0 GYO-9Jti^Xc=e蔪 c5\SELO]{7̙ߵ4TX!eYeN@ﲮVV ΛYEG0c/2,ڨFS,ϭ^uv:2̛ 4Uu(;BAcAʓd6*o*껯&%.Z4Ն T/i8{dĠO &B_ֿm 94,(xb55X', #&tTwCsuy1{o:7`=WLW @q)1Oˆb׽/QQYd]}9D8g OvP5jБ_s7͓rl92o&Z zS,k8TPe{3-)z#j1N⃕dB)d0`Gmi9CJbEv)zOþ{AɯXIqa Ħp_"g0[^OE[bSݧl,F*0P@ 1zp"x8zIDF](mY*DXI|3j= '҇_l5>0Y#;#yesJ#!=&6/玆;TDi6i]LJ5Gfmw"-EH61 mxu&[+R$A:Cqc 7PGhӎyWR9O>c cE[g+H,Ciܘ"43h88zVhPbZҳv ^GfkVN3IPkXXssVߍW`+G*Gp1S;39{-<sĕX=FKۗNÂ[Yu6 TA+<j@>!l"s$I}Ӄt sΏvs_:1т\IP5]K"8]=ۑw< v$2BդDKA%ӿLw RLGG໾;?}33h0W Ltl#;h~ha(  ( NN" O{ /&dUC:ἼͮM5moمD)o\|' #oĝZUdパ(*n;^OeE ⲭ˽Q¸/D*u-Y(*.WOf sx)]5]۷%4Us/?W#9(C.-߻}jQ>Z6:r{ȯ>xCFv( <|>a4;ThJ8s"RCbgSP[#goLJ>S5lVIY [6Qd鹈̡ڋ`4a$0f㜔&2DmtO~z p7WgH<7B~GCgӢ_ϊRpn$uT"f@}7᠝W 3|G{nKo G}M{:#- ?_MpGg/NwMqѶ8*,UN U_~R^J/˲f9kc3~7]lZ{FcR`^nADe t2J$GZ-"m;ax \ŒMP_QUL bgN5D"c!2])dejL|xڌ!6PPI]$`>wK)Pp4e lUЄu mنBZxfA"? VT Y;Q[guE.Gjs]* oy0rw[ڟS ֦tQ?(9*>[ZK?|jͣ2_J|J,= Q1Z/̴֖:Gﱍ `l1ԉ&I` R̍ U*$#F~«2u:>!g{hs 󃪿W1 +*P^?OM;w~;f|="D~z?m [$+tKgU@R:.|:&v2˜!y=עSS=M24nJ[SSD7s^=c8l>X.cH$Q–.5 ^j{^Ϯۧmfޠ[_5Wk'!b,8y5ljCM,`]IR 5s( M!Ag܌@KD1 =:R#P^ &_C~jaJ{&JNjתBtA߱S>ip3t)]C$!I +X g+?_IvG\|A#!0H}[Ϧ-˶{?lDŽ^X!*{Rbר?5^jG+B1t9V *\w&MAD :>vx:+y.װnA (}́ƅ!օu"Lth@Hh'4/> Ѡu)QS`DB7.i~5"<ׯaEP 2~a}Z` ]UﮣeWBrqK{*H@!ߴƨ%*=OJ}%TWL­΂N^yqIt$q // fHL~af쓷Wv @D.ONMmc+2|PR/&mc=@lwH0ҝ67.}oP~LH!Q%29w5W6ixq*Uv7j{5cow 0},{"7[N&զ~ˡ9s10-A@QEUP`U?δEfta9st1@tt_FL5ɤtv?yt,$gE`O heQ نe$~>"0$`_sɋ[мMgϒt|k*K56JyĔ!#ih6<݂a 2l Gs{m3=v{j?F a~e=3PLHUSoG#(v!WWoߑ}[O98y-NzѱW eԟkj l0ܧHW!75w';BgSʆ\g:4{3]>qZdg~-e(߳, /ISڝxckFO~c>aMtPD;D jۇl&*Cۨʽqqۼ O0;:[2ݾ& fMȆ %c* @9 ^UvVW p^3p_\.+{?j^̄BsG]벧s6_1x4jNy-SPydU?vJ>^Y`~IB75`mDRDM,'dPY2(bq1WbE1~b䝩D q󞢀&D9(݅4E'ӭMlt6tF=4^I5 pb՟9莠|[qP tF.n>nBݻ3cOpd0CzFOd^M٠iv P*$.[p DPƺ. M Yfu)wFBQE I%4Pu}%bXNSV]fהw=Ec[wYF{f*>{ۯ:O}n(5cZlӓ]2d|/UU5 5 8%%9d w u(ߌH9w>Q]4ߐlnP47~O-|x14O%>8rntO@Hl)wxZgUZgӚ*"4$&!~BG &^)8dM=9aa}lP|b% >vp1TdL[=y8y?ɚ\cy}Hс{->s]u[A!)^3 F{bsA7^ZN(g)]R3Z?9,"D2)MVNs +x*-,#GK삻_PoN/LaF'gf<4 юԾ ;m1 ĕơU~xJIӝ%@_gD`A;ʦ 0*J`Rw޹:aj;)uNfleb%zۦ23:&`x7f?ޯuBF2\cQ@QEV*ԸȮI^W)dԯeXNTvIVD s% -Nlq5@%Z6Y1V1R_~ⴁ&t$S {wycZ[$2ɴm!P("%Le}o|Is=8qoH5>$*TDhy_HIS,iĢ#@2>Em#V2=(nAD.ʂ3+B0+xBvT[95ڢ'@ݎl q'UH+z9j\]])wi YbrqM1rBzw$J&8W@_߮4¿i<~: 5z״m x^)9]"sɗؽ^K_PQ.\jQm+|ra>!J<[[|MjP.ݿn] b*,z6G!MHLMUlT(A ׷WQkdus[| <՞ T_XPUUAr'emaNrD7=v%kҸ_gLkiZǝ弥B-X[]x+1Y^}Eќnh|9%d>ަ. &kÐkn 9,4e;Dק~Ϙ f<@v'g Dż< ~7s2:X#yH x:g=ԢV#mPb[HHF5K\҄)Ƀ[gyGlR5Uo+cR439)*KBye|yV)6c4A0^-Oإ4qRw5FaI ^Iau} Y2aERVktb_r0s OvzXQTjI\(uЖŤUd#5R ;#B%)+7$j oiWM:UzTEu쭎sdWuGq?] 0IFy&;GtmX/9v?Dţ+Cw6S&wl>c/` ؚz):_+N ("Ы\l)g``Z+;$M7A r|m#8v ;LVU.b!n g8HsHk<0 jn>Fk}O|t⠥ɕ.חr&ʉ2hACO*xߦkiڬbBٿu2}>pĕ+bKv&@YMهŝ%'!T;(&D){R2*ʚϹE!f} uf($A2 C bmդy%Fd(VtB}$[~OaaO ĕjۼMsvEP$R!-|97^ߙ2kg'd/A @a4nF=_>WMP?f7bB-`uڨ'x,L I_*GaN^/up J nnB1yQ}Σ*R3K׷=X^?c^88D?Dͦ &ֻ+gZ/-=䤊411"my<.Oq_^JA5"џ<27Eګ5:/7{aU<~ rѵ$$Uspn)T0R#|lɇl ")ZEn@Ӂ>o֔=?ٟXP)ʢwr:Tʌ!>.q&O=5: Fd1}xmxS=9Ql ~#A甯_z /~h}|TNyjT̷꾿J/i6_/Hh"D`Τ `}10}dMb Ox.H{C7wG4#$‹T*&<'+3\Ǵi^4G~;vfO],Mf5*6n:(~[N.$m#X4TNRtH;*泹`̌&f`=D;Ej'DHnKN]4sRHKKJLJ5M0Ĕx}Dע|hQɸhPx ߌfRT_ BgDfTTaE%y'<|#mkR#mkWO9~ +ZL|dQۿܓl/Csv? N ¤^ h>y:h6\fB5-Yzf8nIF+@˚kG/9.d\I=.MOڜO= ]PT PҾ>'WPS`V2{3.s@]CBc> \lq0$p, x50WQo4 7컃άW 1]ju*W 25czSu)I{x9נ fϷ98S;*KhtDS3j9)ّQD s(:(P[EHEoaT@vh$&VZ,,WDlҊO8M~0^!\'*\wbM4r#MPEJ”oOw.'mӔx~Jp;=yYY 琵k{"鳝^ɗKwvB3I07V/]qAWuu,NE ȱdz-fe! $[!!"sΝ X0# vbKAڪ!]+Ȝ 2VU:"]G1FeS%7<  yr.fSg˫zFg| KD(!iC"h $j^(?a @6St{<Ǒ-q^BLl퉶h%1DօC#d خB/ Lq#惑"_DC(ʁ?/(f % ix B@@CGrh)bC-D4RLU!(P؊xlFMۛ>L$Jĕ2 PCBD \k.g/DvT (*u)Y}I+|kW)^:iȏ1uh,wP a)hu%=t\g 'pQM1֭_ SrO̷O,|ٙ t5^L^iPR 9: Ki6X{9b󬧉[U$0e_M^A\s՞j1jQ^XnX0- I/c. kt`G,3FSM(&}ZEtzCϣ\?z>O|_zN!C#eQDnC rM{ՂB8MP8F;آERկX` DXaHYfENцf;UJP(cѹBȰd< b! D8)Iq,)v˜.4qw3P# #B$WaEt`cLe+<윃'+'KJzB{ 35Eǯ\owrL$.JԢb?JcANpHkpC2{ T:U& ( (0S^<.4ݜ2W'_y r1g^Ϧ~MYJO9@ƒode=ʮhP)AQi8I~?O /:>ᖽt)0s֊kņ}aJ+Їz6MaE" 8w-)]%̚(T:Dq.=Z_; [.g([h'J(r4(CfNVQ ؙ ++=]LE`xyÍ:~*O=W1H3uuo _z Q?Bjl2=Y=tx~ShԉT+;5)ƽGAoL 7쏤z ߈<Y UxvdrCi=?HVzr_3O,<ٲgiIO^Ts3pm}sNf='XF詑y,9G'$;˘f!Lų }cDdiGl~Ytn/&ΡXBSfYJo7  4>DCy+\&pPn+ = [ך5tA-?1.#Oo~&BE%OHxE-?&}n-g l֜% &ÔrɃei?Qc>/@׉O\#TfqgYļ*nsdJ#(' Aw\QGڍ 1,ɩ'/r~r責UBXUX+?=ˠgGnvFX5G|([gJf@eaSy/L^ *!G6'C ۆa4%UDbVXP;%_='=}!f6=w8^+a]z,UẀZм "Dp=ϷaΙLvk}-վKw;ݭpGv1fvh4*BotgLS{]rH%<UKFʓ P}AoJfEuQyutyBQ q4' RG'M%NS:*W%DY=4{4~2Tm +.liz32A*8NfѪx0 ND@\Dd;'A'x[d÷.>J-h~2lg&-I-P*BC" }iF\SQUj'}^j>"=vy >;ɘHm?),/Z>a=!l*hEM7>=Ȃ 7erBX;'.c y H {k *yE"w7_C8:ҺvCvvQ?au 瀅Eڿܪ]?(ynB{\jN!}Bi#gzBP38Z©WQ{A"JYZd+dg4zpgj>ک|UEn1,O Q0JMf-iQPUPyhT, ANJX< /> 5nDn$3HqVͽ$g(k%94csZOlɵtv_dݥ1 ,5i>o;('_l4Vg2{@daEZcuŽlJv1)a>Rgi.sdtbw{ӷ;Gݴ Sa@wp g5۾MTѾR<sh$pےa5 #gt@ ~]'?x h ޜ9PP d MAC3a C4؛*[^ty0ga;W]Ws?K@=2+إFGBX Z4\g\xyͩȌ@9.bTm~zIk% 0NZ@ ;Gc&l3i8F 2$/<|4a4OU'/OywoG&=)i.;qc!p D9%}ɵ䞇&çt/,y_|d8vvam_[ܿ%~!#|4UQ?=l>Ƿ˫3x2$/p+<pyY/bG*߹:>GpgUHP_iq1r@ L((h `&ˊh`0CKruf^z3{Y?BH?aD-D,!4-0RP`! I@ddBXHT e bT$HbI$ TH[D/4BuOb̌0!?_}4{?~<*raeDM#3̺|J#ExG&p^@Of:~E@&YAz%f@N2^ h3P KNf@Fbz;Jʨ3$eE_jvaR`d!{%1$IOݧKS??gzK$VtaQ.RwKL²bPWP@h&PI*ELl{(!H0R#g+9IdDt4sàT"6ec*xMU$hO)6m`XI&e,<+H~n7I2f8񀭭  ̄?GU&@hyq]~0 8Pq~磸c6]Q{6͂(ͦ,Gg_1vazG_fa*c|ȧ̒t#p`Ҿ$5Oו.vYJW36廕]l`SoVQ]}f_θhHLZs(1~_<'!j0^YbK;R8R~FH^/0x` ?L%jԀA2a]X% [O/  2cKm4ӟoq|WRz)|s{`!Sk =[q(_T0I ĕwAEOM}x#t@. ښ%QOtmuS,6E6Tw{ &c:0H#8a@C".- ό0|L'ANALނϵB1q-hd"@@x*g EP,p pY9A0}\=DpwGqhiei}VkcмXCC2]S7 r GY!R6&H3׌.NxtL~(RހQ9>@هل@*w=g*E/l{|ܳ۶367 Lw;r!ȏߎP(NO 7uGair?WSAl[Yo'?2Yl_泚#(b+:mig^YgV ]ܪKU>2#IeU;\rVSbD=UM29YX~T?E!CX&IuHRB}3'Eh1H󻺓Ĉ OUa%M M Я1b"a.s-z4$ZwUs:Tth4p+zIN*{C}e7P */ִr g,H)k٪]B U b|U(-ltY]+ww=rWPEÈַX9"bDftϕw;v9.d?8,iJcYPsU??45 `bJ=<14ƟhG’EA|M:1UԯxNr}MK_qMA H4}·u.r̺ z~/7ue-SfR \uJr,nŬ2%0]j.a\5L<]t޽O9^s:`ԉ,Kw1~Z*! 駞BSSAt ) 2Ȳ<+_1U;v ֔(uaIh.q(b0n *z y츝kϼn}w~vUӞz. .~?8nJgUNElsFvbO )PSZ3uMq(ʟ,ᩇbljgJ׾1VCJ4&݂l#Phd7MExYZCB8y$il{n?Htf ^MNg@Cs$J]ϾP@")ͫDl{^t?&CYXjzyYd'C>;OuDNY:5h_Vϋx8.O z Z5XDhlH-jz/"dפ.U\.^*2`o7#sxV91ߪ8,>_ϗ\cHQ;^LٳKX5l嬪 WKσ,k5몋D,/+d [d iP$5Fwԏu}.,a)6.sh'1Z=_uGx^Xf^+g#v?v ^AUr@O#eɕ-C+5_ IfĈ͆s Wݥ5eC-I%4h6RRacok#;(R6Цe&l#VN'NP2|Ecm?$,b|3˞Kgjҏ[㚱HŖ(!$vomMdƏ0|&mF*[ 'UAxE>Ϻ=O v~=ֺZ}jF%1!]ݝ&9yr?\ P`Wpr)abX_H#@KD3>߬Y瓼8V=o!iD]x+i1CVwym}WJ?Nx^3bG=Vop;͉JOYpme"i&W!cã *JN Y;ᒲOyf {P (3nךUѾ73ټ^3jZgowl QwSsduŠZMl531y =f_݌bSiz>tGۘ+7;}RNW']ϭ'tϒ܆CfW#v8>:cջosxַ~XQj쮹=^QǥFZև,y[$+--z-v'"`_9 q_j{]gmPu]fvJ<DLsEHs!7 O(Xe @˹hoE2GyS9+AԏheȶA[셱-suLλ)*z\<~Z FbdUAnaC/͑_͏ ]έT{OT>'1 yjfS]Q22aONj&*z<P-"53EfվCEX_-Tz6,a)F!-zZvʔm#%\eVqYDlJ sVbfůyAigA]|׿zD@oX8pj9@č At" 7%ǘݘ&VLw v;Q-I)DJGؐ'nuC fZHX1*O6Kv٫u26Ԡ ꥓w 3ɘûNU{$#%(+|UMS_ pm]R@rB̲Q,̐ TE=*|*:"">]W6t\SWs>Gs>J8MIGbxӡx(=447{)L e0)NfUGRSo:NЪ?߲!!X !NkSd9 &(A@@l&JXM̢o *n"$" F"%"\,1G uJ ,I* 0X '6 Hȑa( U(Z5I+-HnTe`SC 8f)_l(ITsÇICŰ;=2R[;O)0AX\Y1e<4Mùs ?gҟw5Dmj^ϛm5qu2G>Y0Ӂ@;Ί3?=3 CzLV|IXN" @T1褋--d:UonME] P_ H14l@52k&%"("<H""bX WUT]P?=˷GuHC>რ>_d-*$I"D:R 砨(`{M 9ΰRQ=REV D%c$Nu/wԒhm2ݾ^ )+ A !5@]hPP"I*X0-]NB(o|£fW,DP !z/ ]?? $*(|&a=l&W21@?%p%5y @ǬJJ@*XqKD[ hWBIjзza?.<*`BU9 H@0Vм5#;'if_ɲH҄Pn3=6`b epVVh8d$2Vy-:vv&͙eRY70CpL;gMN8%(>%uRoƯRHt](Ҥkj2-ڰ~:d d*\ΉItF$ot#'PK&]2SRuWf= P`H,Z/v.gײ(ۛR~1(}S d?F@"X )R6g1/OYM HX  ꠬ T_ ֐ۯ-g?Hwq õwUz .gyؖ{~myqw)UQkrD6ڜwSGЪ q燊TT)8;Oc'k.-ɲ$y>OڤSrm5Y~BٸZP5a>)q W,GjIjp#G`_`Gނ.SoU.m?s7 OQ wzr_vڲW=xb]$~K:\mO{ݡMo?7tQQQr+wʡP"?3> XSډ \/S 00nZcP*?kzLĖuv9>]xçܬ<-W=7ȀBa /\*Az\ՒI`멮Te-{xF{9׮Wz_äɽ^ DM/Gb.nίwZZm65j௳ 7"ݓ BHcæI.[%GrItUU3xc'6I[ul89tRhSq_yv`HA$$ I?Y:;z{+c X0ci4de xQyjfF9bfY.ᤲq\'͌xXqvt\*z]u/;_-/Syd)J ޡY m^]U4̢}DDӏuft<7VG(+ᔰjƍG:SjO[^a<Ǽ.QwUdD @ :&l\ga3,zKzZ(OǠKq+ZE\^aRBY #QIm4{/򏋗f)>"5bFea)2Sip@`e<[ /F Wܧ3ːnzݟKSyyϏޗxWt/ PQ{G {{6|02Sa!H PVՃeQ9;l>qϠS홮FƩzR{? AԞ!Z4GG"(2RjʈSiQ .Q`Vy*$t#l _TJK*djX{ &90^W.ݚ,jj|sUd/fs}NB"Vt@N)cCV)"?)AN\A@@%zR馝!A@&SB) cqɬ˚Y ˅ډT~|FNJYi!Su2theISc,Ihb _k]ai!EZ)vn̋1Y={ob]7!EN`_mgռƠ:gwˠح Rw CJv `R@1{(% TO JSPcAE]e ׸MCzuS= H(Yú۩{η$]9#чFݞYdЃ7@4p @ J^uP-;j ,S4 :v=uW kwKziQqqd_!Kv%eǡrV=jCݝB6qBFdEܮJ]~?VP|eGàk*[[.$ M¢]oMЮ\"=﵋3^hτ箪dZ5Oul{缇į#0lf}ˉ=7g#!mzSj1_% vb&|Jd634#e#Ig\g*QFΫ~M۬+pLROFQ/*C-Zy~KIo~f6;OnoOls6:6ѐ~~TIzkϐV1Q:3~t{v-wr3fe c0$A"; ni,3Oo~Gp J3c4Kg`A:H9Pf^)y֊6^N [`f`*&.|OAO5XBPVօQPTRMQXRSAD p_D@]#) ѕOHaՔVܠxNd|#[<'7[ppA7/Z.cF&`tu(J=]B憎aB@ݷ@_0<"vߧ0%N.3ӷx˵21m1Yi@,z bXkYU)ZtW,т/[)-W M[.ߝϞqWP*.AʴkعWTbNjsͳ3]d=u L6hatD8e e4)*4@J,Nw+˼.im7@`/ ־ 6#vpoĹ]YB5p!ߨKg`ϑW~O5G/77-4sTn>tm".mQJ2%d0N#߷x>v^ oT:H2sAB (+!oߏrip>ݐv;hL1i3Հ7ćoB~0PmL iHӍ60=њO$SaAh+(ron6} HZF4eeFL?~g?<  }z?dm"QyxF"qJ&B6RIABh G# /pfN $[;joȲT]q&7R$]C* & * )Ǯy kWV Gq_sFUeyYQh4'D 2U;G8MD?7xCWs\aui^3Ε6p]yZj  ePAjWV۵-TȜV' * &@L8CȑnüL ?sYUfPP>I/etzWU&XcpeqƀO*<Ӧ>ѸYZA@tt`us~' =!_^ Ϧ /"2A3#L+i ngYh݂o=#qO}͔yw - _Rg eT( .L8u ,.ŦXp9ZO%6jE$dښ*C?`kշdk 8HmqHg4QQl3+}~(22V.#]LwܥhTPI$rX0DBr4C)qpǽZV{<8dC]P$]p{ z4CLL_/ )Q`HoW>O{}b+8Z^ 9z)X)&$kaTjYݺs2|ʢ:v a}<VR,G\:}czL#\4 CXaAc- zF1b67)L%řp+Dfs0Ǘv-wRbdۙٛbڀ\epԉ6e 0fz?W}UQ@-~  @W$3>V^7 л6DgHMyyBkE6`hUD%յn4P5|h,9~[}рjZhq>yw~~<齑*GX&zΫ:餉ftFTYQ#>J&aX0`ъ|2`g?- .]&.NOwL~'AKSu.+xW"croyL{ib< ,ae6F!x?2{pJ2*kC(tf܍;Y6^r3v}dt_H亥vևB#Ab-k6=u(MX$~,#4Ñ-1}N^2q/[I-oQ[ړV*=@Wpqѥ&K[Cgg䭒{]$y**sM>C؇U|Gz e>yifhhz*3GJFȑ" +W{o$P^zX@mx=v~\[__nkI_ 'GJ[H) ޑ#j]_"}(DBЮWP:JX]ՅaOQk!JCz[j@h0T_(>-ߤM( g;~!~k>ʷv;1o^<oPj}Qv]+֡<߶ua8TYRO?jhyzZ?szPkK¨^0d O(0?Y}xSSΊ)]aO(4cS;+$9O>đI$?,Qf Rl| !f5qq2UND\dC~O{9xCWm"Fׯr(H:NS$uG2>LZD #(,p#KUǀ`%m+zoM:*u RE4:{ޅ@+|M^.ٕI2HNAzXfd Ke* \E`ubL`2ʴ $$ 1>(3N g޽&ÐVV Qߊ jŽ?ozh2͋"rɤP6*nLakA @z̪ۤ2,dmH^^2AY^U‚*ы| w|/71l}]{#Y:wb H6W&J]$e@D Êxy %|ChOYc7XnZ -:N2%˛ZN[_cڼ}Le 9%Y$l/ruvC^WaGcg ̕ ք]i1@N.t ĎvA"9U7RG$5EKҔQYLӯ5 0v~:@~z9q\!{Dro^b*W LP͋a{n5^^ԟ_/Ԍ||/o;O^]Ul+L^GB"!T1Ky=" HX宍)ձV#F q %ҹQ^Vi g^wOy^ûyg:2W_oi66lf]¡FP(ukgʆJTy[@zF|ZJTJ)  N('JP,oTE?ѵ}4]@I1~b?g~JE?۹VV0 )w|%at slϥ' [?glH{JJ?\m1" eOP{'<ѝ 5ΐ2)f&, h@E78h;\ p\[0Y"A=bUxa1@[᭞-1,q|rl4BIRQAE,GT?-ZDIa31>y]h_Oi9HskG3|baT@:%b| RѶ3[FqX=zK{#yZՇ!4i`GZae=J9%r>67K0wN m#}eTdBwjg,#9Q)floG3 "b_p*L6'&O 1AiPF Sc"JDYhP bst;hX@WL=WbOwӳUER fy9@f!E\ꡄ#j+ ]ܘx~ LmOsgtʻ|ԩNۥ 'a:#$ydVša')SPaJљs\TQd^=t*R땓0"kͶ hfL̢0AALE//?MM7@ۅA ѕMqI%@SmEo}]tM_@/^ VҲ@Vyx˙r1(UϤҿ`]?_DUkE/tI:'f8ZD:{(){+#}*sɂZڵPyɈ %W%5PZ2e!8pdGt)yf4#l( hE!~<<$2TwTz6S;V8u*\S?Vڴ.Ț 3~8wׁD\؏;Jx)]5_M|mxQ*M6%NT !D RP~{=BH/vU6}xlk'Lc`=[WIz":_^@Sη[&iKC_;656qxv+sK;|_tCG,ˉVT_4 s2?z k=vht!OɝPN"-m ەMMe}Phݸ74:\ ]vyoÊAL\7p~,`_F:>JAaP0ȶgT<,$A 6> P^Pn?/w&F5 @` $@lv>`$b/ub8v -2*nRxQNFi@27).7W[0=f7C#7 a'X<Ʌ/AOP6r|/s9EQ0S+ۼfSѪ&U~l,AnSK 񕥢;"}׀v= I?3]w_-|m /2l_M}?IN`mH0b;:Iկ]m!/TŢs#IK>(HF^Si㪵{sy/2ip;QL\_].}O4{|·egMbtl7se&ИlF Jvy|,F`7i~@qs=ϣa1u 9`PZBu}$I,/T4ж:}<.0[0f$FX`.h̲@_ a , ")6*m-c#  X&Ȏy9qzq_qij{z;Ө`M;^ݣ&%&IoU{_nBE$` i"TIs H;fi%_>su/^|ݗ|i^P9,"Wd^{8@@PCS"3%'9-tyػcJFvR4|G b`- '[(^R2;NE.lQHIґ 3AUZ5xz}}JKXt@yL$#䌰0 g9\+Hcgt.OmK (H2E}PH!^#/2t .,{A@R *q"'k|ֺI (Im vRPS?9ɞ{X} ة쓽*BTȄLJ=N$-rEu 'Ru$5Z Bj?)}-IIw:o}RVXȦjZ.fCUd$3"t$W;2a8ζ~/[[*蟛"e ~լ'DH2 "13yêP)C˭Z\;Xq)8}P H@=R3 Aa 2U{Wl30\ԇ6* +BxqmJJd7=\HeG0 :hQAj HcޚMfWw!uB1D鋷*.O)72 !hFx $, _uN"oFZri,_h}cˠfMQpHdDe6@B }6 nPY,*mx\108Gpd `mmJ2 h߽$:\C;tG>I~DR&Q˯:vChO8/'r+'퇬s^Q9#%2E0a@-Za7SUJ jch p1'+ %5DCƒRJ723㤸`B@AI rs 0Q{SXwU@nr̤ S\@u%rWz 0%]+ՠ eh>dE榃6q[gc];/9Nk|Rvc g'H6j!`;{*?%TcJrj[)a mD(Qʵ&KOlͦޒr&U=bF#!`j!j a'!ҧ[}<쒰 W!}d=) \ҹEQҾn+mH:n Օk]tW%+/єu&< SzS&8(_RէJfH$JriI.w^QNߧwzݗ6D*%⇎XҰeNg!R:qb`}o,l5iqi 5a A(ѤgK'/@Yb''/&U&`zg`!.xBf`C\p;O=:2YS }']X )w pgd0( #C8A:o+6HL 3yA!pII04"y AlCR@#Wn&!1t؇'D{C6gMaّ3͚eCS'g Z.R7,nbP;rFt,TB;lάtHwf.ίs!3NwEuH{f3D8̠)U`TH2OҠt4ǂ1)yebh5 gmMt ۆ kiqIzz mTnAyoÅ, r?aW*ݚΧmWjV  gy0zKQB1U0ukYN%#ڐL;Um3G"’fU]aEz™tmIqϟ כ[|c&(w& %H?˸9!#ͧuq?t7S\D@Veз#r7qc?!_n&ƕ0͈ (  3X"0)k~dn )pS!oK>WNv(D9kV{2xV % GŜ>_Hy\D~e66tx%8eA20âzCߞ/x/o;5@tdPQ)۔}r4N5 i#*^K% G@yürd՝U j ~VgUAb -}3S;]; ƸJ8/j&iT؇|g.7V>cűrHl<@ik3zUEWUvQK=YPjؙ.[nEDFR.j],c%0;v$i.QKTtO!2\j;ok?Q/aMk쵿US<}?!d2J|oSl[^MMtiFO.&pdfJZ$Gl?>vN<ʃG}<4<]ߏ汗2Bf:HwT=laL>7lFJȇW؝5CVe1CHP0 &(I ^,9 GbLG`?sM}O1LRC "'coXqgIX@4"da  iYR~~wӿ `|>sb}n=4|*&NJ_r܃ap.N޲sjH)4 ,#f[ʵYvJtzRAƑXYfԦ>7gfPli~Y3lsV@9;zAx9dVRHQT~FILWL1E9 L+EQQJ*,'HcgFLcЙߚFhR=/(IIs /nQ4$o$ϰNʔ 1A &(JEOȆ&Q-iYEY5LDIE4k)$1;Txؿ] 4(Ht:(IJ*OQ E3~Xp82)q5?̎Rn%zf.e ?ia)QK˘گ9bWy@`njCv dTvN,W :V`  &P 'pvZ#R6i6 lYPV!?ҳ㙡fgYkvo tzacw۽RP(q/;.tev]N+$n5hhq0@tɫ k7|>'qO WEϩQ }jG3hVX4`H ίQDXC22'cpB@=`@:/:>~z'^%>|e3%K ŴX1LTy[>*)dpP4 X!)Y.juSW]+/(L=8lj%10QdOr1%*o'ݔ\.93xy6 %^Iy䦿+mH@X|_tǕk˾$ &q#Ҏ^܌xQF VB$a9?_ٯB^!pCr[1А}98_~)_kMăPA2MVfNJD`!RQQO43{;-r]avTYa"ی>g]? |8C'lZ{Z I|(Y$3f{dQ E4` F~<4D eWЯgu{בeLAĝ]֣l~)ʯ$xmr5eQ>6Q }u#.ҋ9 GlYbȯُ@ާB| +O2FК'(~&ٿS!lRk.wsmy6w])X)-"?y~m߂YѺ[vQ'-lLY`r{]aFUB .:-Zݡw0b}2GM寷ꙨV"$d5UDHtͦ_j>*%<ےu (w g>;g4JOn@VIGRT݌z6oO*e}u70,e,ȁن3S;Q1?`M34,u97vCPnlQY[K$6J+JOwַx33ѝžUͳXޛw]na8IgSߢ(hR>շT*TQ<ퟖ'rK43!QӫOqF -?Ù#qYݞq9 qB;}Hj?E"nIQ|1EmS"㦑%!СE~C }Zkso8u=M obU"9bbj |NJuwx]1#T.zF=⾍W/NP^g3=qK _Vןbh9ID4Pm$ @hrğ{?b"_bq`_R b} {I2%BaH=id"^FjdSP?HYY?jyO7kPxegE֫2iARED剓BσtxL<[wS @BQGA'HTU%#h胄iBDPD@s5 9#NE !m%F (0`( AP> B}B}-?LY>"hvu" lt3/#S` ] a#.uǗ=֗s?ΟOg .+}fk:(DxYMtl1Ⱦ8Q/DSe2V?wE66Uĸ\l#8- MqQ #00I_-{l{\T_ݍ!}g=agࢅ˒9&S(=c9ۼ w众t}`\~i7SGo CAl DuCUV S9y_'fRI6 xj/dgqҷ ]KXfX)# ==uރL٘%@[X~~ayG]_}`uF#QNR%)DU!cj/Kam2RN Vf8|/00m7E''PeZDYZVju Xc9Zop|RH"#QpW-YMi.\bm^>c7 =# EV[Z6(7XIJH]J(b{t$ʷX8w[gi{\zd4sT A#6л>?8oYu;=m#C0Їoa2> X,lP @V/o3({H4\&Q;|N1*< tDQ: xďiA塃P~OnMπ#N'NFJr^KoLnˣ_6OD̷cN#ǭƁ6~\HiR8vׄNprl=G%ܷ Gcy5?&sX*Ngv~su_[6`0ybS;[+!d""9z1n#QȻmTsKavj״lu!neRG9`8 P8Upm3<}nl1aV$c: xXI''nˉkdAkWF}9~.5[+ b̑_|꫔{ "Klmk>3{8lJ{ `|4O%bnVDл0!KM>svCHbX!*pum5isG^BgzPF11ȇ^/=̷ϻAx`tfΑ hu672iA7 l%8~y%{?ƿѲ\Z;S6IuAC).'Ct 8ZUNC8~~_Y&9(;47t3Y,)/KӦK(潝su~(!D.U%6L%=~7{fnϡ3 >E,CXP )STFm#wgYZZ-- %t V|"qdW;?aviZ)o{/ <;٘"hn `VqY4z-Jt\sU\ө)omo1] 81$7赝;j1⅁Nj?}B, tAf0`9n,<|AE@S?_3]t@l>`j(0xQLFTǏe +#)QݱŠ0@,1Ig}s^]USFȉQئӪ0Q5@`@Ac+-/عo0l<_?^ѫ}W)7;mw @chϫl>ImpiPkH9USr]ҙ8[ = Ά ׵2Il ^onT>4wVgC\7xXP=qT@$;MLxp$.,jkł>Nqj8YOP6+tX#9aSzU#_z@&QUވ8V~jG"`?kf7]џ9~Tݻx˴]g$/AACI{QSBNjQO_a/ OoF;FPRzxP+&t2DZFa%hI-8"rKgۢ'vJ<a?8L%p!Zo^Ֆ/GnWϾ^#% Swl^d/۔Z[h+;?:ZCtUiiǂ`y(1l,A b0d4=z6I0\}_'k/;vC=Rcnt9f0FGk=DpC'Q[4yh/{zrdQ gv.thM }gE'-pd L IcAġSYMC94RYQ3NPgLF@F]?>“\0'%_ 4C$7u @Q`IJ|2N;sIIA<Ή==q5SzK-{xi$ߣJ A(b7yyvܳY~$}78CHu ^{=I1~<_^m!KIɇGV03 !6~g (% W"yB*Y'B$(Q_ɨEȮL@A[rQLp̖zR+f6;eO p \<MF03  eDkyO)jv!1п&,"8Q*^gXDdBq14lb:xor|cK/Cz?W&`2O!z[O*^>^as=~|<w5ŷ|'S#cYS*L&FHJ  %:gxA:9xtjP<\}nB?SQB:oW*'6;̔' 欶.&);FdOYCw/j~C~D/+Īxq:uTow:vXKٕLJFr9Y"V{pOAyUc@_Ϸ`TDiE%)i|AҬ_ $B]JA},_kKZQ`EA!~]`Jpxu/Cߊ`ܠ!T9:'B.\K kwxo#6 p=]Bv|9a zMx=(C+),  YKٛx|{Ņ7jbq<(hϡjy(P!C(QssU:P@;=p? B iyϏn5;bOz}YuH!|zP(Ah"ij0DSIp=?,u<}Y=/+uh72ˈSͰ}5m_t-n!⧴5m(m~ynGvG[»L Ky\c: j59qH_NSBu^kߙmǵ_c.$'9!#q 15jiPq<&IHT{ ~? 'N򳣳4L( mIܦ߰T2T@Jg7KryFbc!IfaP9aJm!/u]{nl7cn's(18ByϱzO_(w}o^nw"n?xPe jlP WmϴC !R,ۑdwD;FSd#~hxΣzA/LMjwl c"ЫkOnC.-=ð?=й5k}כ&C72PX @{-|"5‡KnY[|գB9:!%ǃ~ !lz.k>P#~s?ǀ;O. @uS c;\F˼'v_>)@$`r[w_bߍx2} 9Ya pwAVL `(z]Q  1`YWө%SD))ǒn%(uYySO ;|?·^ƯoxI6}jEyV{: #%.%.Y2*>}nW#uŷo4Ϣ<3Ψ2wE7;KĤ>ѕaϩ-W7+4)?$>~sy:+SstO(mJU=f2ʟ/e>\F.#G;y*5ƽiR R#i_0)|{k"qRgLt:ހ8$gh+5hK%S)HSaý ഝ62[A&/LBdIBZ(?@xJcf~$Y`Y(OlTљ!@FђHYHD,["B#HᩗpX""/;@'mudb#,3{ݍc OX UܪW7Mݗ2}}K<ӷdȍ Z忡R8 J_IbLd+t//B]:@ͭzs Ǩ Y")㷴T6M/hN2_>kM7Pu'G g;T3F͏]OΦ1]0 SscqB >{GhgzCAgP<án=>W$Z5VFD !#3X“?uW%Wc=٦w~?17)⾝γ~zEDhl"K.ǬUA%\B<lEug!_M*Gr_;M(cX4cBo{#m4 mvYٔx]>GOx?I-1fU 3g-|[Uto["6 )sqQ{/)LT>΋YwF?]byc WG)O<=c0B/5G` &m{I- @1/3v O|s\7x1G 1 xcEz],~-3{ EukOh (v,}rF,TIJz ZG5J}# *>XmT/ؒ=zt(C\}wST2" <_8S*_" эfTS.ʾ}NvJ 1 MW.W CGU!""ϔs8y* 6bQ Bϛ]|!@Qg-rCA07eop?(Tvr$7?{>pݗ+k4t0;܅Bz +,$jַO 9q>3d2DO16M|ڝ{5'PAa-plZ+@_~c ؕ]_Z_$'$8WG%t@(Y4Dtʅޑ}~ @%- ~l zXMߙ 2=>N8P@泀@@P,v" vWP&Z)IJA% I0/HX,oLLluFD? /Y,3_= ۙZ?{Mi=0(/hXDѲd)CƂS g1'96NCsNAD@x@,$ %9ןC0 6<7夸4*9Ftn /q ]ʿ2lC諒 8O]/3ݙC_IewH°0W PAʐEhNYo++%k3~~4st'4Ѱj_}?ڰwPxd8T"gت2 R]']>щp5AtIJ#hCpfP||20|ΆٳxWI`\7*+KO#bHSpzAlI?qA M?~MD uS+`u//A8Q=y9c2u+u`rZD-o(nvW x^}m @7r'KZv=ٍ\ϻL ޓwŋ[$7|;o#:\׎GyŔZTdB (}-L- jQqdkY 2=R^̥byhR,B a;;cM{ϥ~[TuѼw܆*xHQi@YSJ05Dj;7*_[߯w 1~.ۃNG'avT!;up[bՒD侏s1 GqٿjB;c B$6nI$SGO7L!2||h&H`rY^/Ӏ3#SQ=),_/pefw>N8ys@؍=I]-x5 @`z>, &^>G4֬ Χ.]O+7EDRc@m%" ?뀵k:pTC) 4KD$_]msYUk}>ӰUqs@bK})Z,?$b e$0翽KU u:g#!p0C l/T%]'VFljYXY$qw\>QD|ؕ1|i4P4kq$n!}^dV҂V&igp|or٣בw'.<<]:j< d$hFNeaJ 2zY@7 TPXڭyUn6+TבxMAh^[iøޭF~"7;|ԨP "<$ʓ2 T4D68h!m 6:ZG{Cynlw_ӨmUȴ`*sGxhXsLFStJh HykA֥ }nwp8eLwQetof)dj8g9sf2{PFҽ3nu[j ~OL@.+&L4},yo1)*>HEEVj\q1s/8U8ފ@?Ӓ<̮p|8Ed'k լ1 e_)w;X'W,悖SKÚnֿ{3I6d X(& v&ʴWlrۨi5WҔgk6a{[4A@SΜ勇0o L&Õ!u]o i,Gr gϛthۏx9^ʫ7jkOjɅ~{ױ6usZh콈wVk@uӶ$4 ɱ7”kڿ8QB]K\xǃ3|_ʟ)gaԣ]qYW;nLJ42A$ }X;d׻ MAAQiv<&aBZW-ő!Ր+QU:B^.nP* wx_FU4CY"ZvOߗU\="P`}Y*:x߆$/7?>Ѭ#*a [zF J_wC +%G)Ү"jusXWWB\ǝ⿿U^"<\MT`˶yB`Q@.pAD(yuSk4a۟y%YoQˡ N̮P=^d\,zw%;c߾?|.~,!JYyn~o}DY*9w!W֮"^}}̵ᆴϤ&L#8݁?$,ccuP6x1綜iM>ĝ/]F$!GG5Qy\ƄYPQ&/atB CwT?g]0O>ϒ:xFЫ@{Cqs4Juo0_-HIb7Y4T ] UzPAV(+$CYh4мUt]?no COJ;y]t~ܓޕS\ɻb Q:A q q3:c'S̎FEEHJ~A3~u? S(|$((?oLLJTs"<"JjHjaMrp)mGzRP@Gre6/2aP(#ыRRb,?,i)B6dPUE%g)G)iT!(UT_b,dJĬ ߁fd5ZH(*RJL j/-X%bfeb Qxf!"!,TeHm 12Սwc@QJ2()X dXr a" ;h6!" UUQIb *A8NuCEJd4P4QCt d hhvPKj LM)S5)LIPP@z ԜH!t= (.OzS!Eڿ1lgВq`#Q:H6-~>i^+xA x4+80=R~楄{*.%EPmy4=}l-y<|;ɖsGQ2α|U 'HDP1%>טWSJPQJSKIE''c:Pퟭ򺆩P?abM( IIzͣfUv:rs(_{9w'"*71Q4`5xR4Rx[j5;2{qjXUZmO0ףR-H1cpWkצȆEw* ϬMӉ˝wOjQ|UQ+R;E{[E<ӓ\Ta\^*b Vr9# ҍAbC0yqQQ>bGb|K`]{{^&J)g>YUT(0@9zSQR=oB e4[W=?-wj@1l, a @gKKĠ TP ; Yf'M N{yP ZYo2r$Q2te}|CxlX|~j8rE|`RE T2,?{7s4?$!(hF&+C!oM?Sa|'9Ŭ8/ū5PLkk>7[lmN88n}H3 }" CI#"l?gՂR&W{Zӊۿ%/vQSV6SqRȜ$=|O׸ïrBC# 5E/8b#c<Щ^ SO"$=~+8@CMGpaȐVvﯲYB2)OH AOl|06in :'c/c$ɬd?m'x.8p>0̮Le=䲁!5>߱AlMD`ejq=/䰘vH1K 6B] )oQQ!{!}VbMx\ P 4-deբΝ.’v"\Pq4f۲>m;* u}†F+>?CL +m6Dgb_/ehL[D:l摇D^TF}uij`D&I,;,6i1ļv_i<7F0A]䀳kiX!S*e#;e˄8~vWB,?^S!~Fyݬc*h IhC w$hvI*қ5czvpʁh F~cyFCeRL@"mӝ&ga}a\Bq rо =.O(}~ߍQ̅q'pQ3l~+Rn$2A_u?k }&0m?ߘ\EXT1%a9Qf~cp!0 s'fdnhlcm4ĿB&G4ztEZᶆMceޟ=}?ǭ ~n{"F=m^{IZfLd,Vu|X@paW@v3HN ? Qf)aʻ7[RuiУ's;95"M%яG)w͋h_=G`Tuؓk9Isc-t(w)4J)auH5^6NOu:W{~vhw5hH3F]/WYb33k>rB hlRὟ3 >7/_?@ h4Hizc{8>}c~ d?lDX4O/ABS 2hqP>Y( 2C졞H\Y"fzXr(x> @`Ab8`HF7E7u\RBѱ#B\nz{/j+RV1BAV'e0 pƋ_Dt@RcW $_4޻H_p1"4ehQI39 CVhYO_95cO( EN}b$zɒPs;w4>5_GmK A,ύ^ͅOE ۲v? 3}|Wl7dބCM+DgGfD!K.ҢSw#5"&/0wC΍KgciC@s?s]pGi o\DD{b?RkROmCtʩhX9͹ ~v ЗDTHy?(O "bzCg!C6%IukqO 9yGyid/)@Ϯ9uc(g0*j}+n3}0ӌ 'Ҷ`l%|_ɏi;#{%(#.Dtc=}o I.' n?W**xZ [t] I>CG+ĭH^b6aƑ^ڵ H{A@oyUdhEE gDxv)%!8ĠsBNQ^KG\S[R0W=[1|y&ѱ:Ϊ2?mߐ)&VK&mH`2]CI|Pn~1ִ5{ Y>.8XBM=2YD{H  e{g )_zYRײqj\]?„vΨOT!C4'=T=Okes{Y؎rI=h&!ԍ_|&y赭^=/ƏiGnb7s~ $K.9Ѳr]/o^yknU|BAߚҲKCc']6i뢫{YOOi>PZO~b2)^cAA=Ĉ_$JIBऽݍĐK/H;`XX  R͌0B0'L{z̙mP3,JS~7_gMot)=ZjQ_RP78g!<^L V ZX%"(P,/,&9ӴFdBx"sfo8xjUF{ʄPT.fGVa|;wsLj1ggc&̈́yQ^Fyo?gzߗ0/i×[e_8XK'yEb^׍v%kD8AEH?A#s<UbtpD3eB!A `4> NsW@>`wn:|:6o9XN}_^φ{5=%9M~.Ϯ(~pn:llE : (- d|$}qjʋ+.7#azωFw{_l;`4*&)EMWx͉^5b<<&Ix]p_Q0P?vխQ=!IL8F6@j339r[w`nX}Dǀ`G[:Ê<@wP fXB0~^>a{,7J\Rz*E̥i=.y5TϮ.هy>@Q&"TegRy B|0VMOoC<>vs~<'jY-?KC+qqtbT? @n2_ηؤeMv#nJI>+E*JpH a62ҖU>dzLcH F`ؕH6WnPҋHpyY]IkIt_ū^krDjD}(h!0c經t9OmU[FʶPʯiR=~Cd`xG#2دӕwzNJh^9yƔN8KÆ}H#Q[u[/V`UtvJ-A0SaE>t4phin]VP~ Ε6Rs>AǫmxGp$?0 J@(уc@jM*~;TB7u@p^3st4of)L`.SGq*[rf)z[/atWyvJ"MUڊAYSU~}2# 'KU'FNp*wl*0wcOuS:];EV ~rT!bIwp(b'^.qc:B{̤j;jK~4-bdxPP?Qeyq[HJ xo[ LQu(CK}FK4DX#I{"O.1|@Ng^or[:olm&C__b(XxVU:D?o*Mmz-pGUޮd(n ÔwB !AYʧb,aN{{20 ɥ_s"f Yp 8- {ϐӃڻIZevʰc^f&ŷwqF<*"^Ks.nl[bf*]X\Vӑۻ np!jZMk BDR>љW1?Sҙ8ġ% zO"?HEVT9I;3v 7BdEjTC!d</?0+FW=e`0`"aOh"gA$ ?XBOܠs|rtP 2pLaa3\܍.yPO"1&=Z )z5tw~Wf KZKdAKT8ȥ-~7ح Ґ ^LҚNmlPAz. {DBv -:.+̷R B)yI&=m_ ?! @6^-5Hf"X .BZy iL1 ~GZ\&>@0I(*(DEani2ܫ'.2jgN⛦mJD˞P><7Rc WJ5i+,LmlB15fW :Z`5;(JRR4`4a#N,-G.X$gb2%$;Q¸vTۄ ʀe{$F^H`` TPvv&ިlOM'Gagcs]C!kS9[!NRA> 'wFd^@@l6 (O +h&  >0f~hW*=vcN}ENZen\w؅>ؕ>Pڔyd6*]9zj/K%T .,QH14˅4'ieEû`}t JSJ*A@J`?0QDVDbUP8;&9QOO@5Oz }[!ﮭvJ% cLB lc-`,}<Xj'W v2O`v=gC_4c%d}L Dt[G ,KK(LG_QzֻA)H&*\qd ~%= %F;ol.m,V6r3jm(N4S`?:"-{2p<_ʿvI#-Ӡ -f'2$cl?5\9<B"@pE_P`Ɣzq +LH'8IѷK{}:e.{ɇu8(חQ-SdHU6d*}][0T3 u`)Ǜ%6i0E=_&+Cϊwsw; p *|9TYȧv'V&FCqK\ڶc-Ļt])dN7(U/.Tf Z~OM `5- @ (N^ E/J^Ӱ *O %碏Q@ 08缯MJaH ɿDa n֜/ yJ9O􊢂D>b@TWIs5Yz}奙\3U(@1@w[OcUR yxzmN7 G R/}]T 50s|`alO L_\M{[~χor4$ jtLZiv@4LȮ6_Uoxʆr|K82)194bE` IO}Qˤ1MnM|n _ڝtkᜄޱ:#WDO[z혠G}~ !+zt%ҳ C&0wLG! 㽵fh-2Jfl!\s#!#&ܲЗN)8NZo`Jh4$dZyPq ešS$I>iQ l\}N^-gl SiOQ< Ь*԰` H*mɽM$la&z97bZX r3 r FP30w2`ulG.wPɳ 5^.ޘ6lwTU}*&ex& "u]x`OZ8jDfY<^Z2XL Ѷ6eLرUqǧd*,]/E`6$u`+^kmw/m2/?xB֤!̜ཐo%uo.%g&1|?',0:ߡM=a"~5,x^rnNx7o-'٥Y[E~P֫6Y4گ@ϲwCY{i, 1;8ʥޗle~Y9 N^D 2Fj `C3" >s TPy_mw@7(0[̢D$8Y6I{0^;?Ε__m(ֻ0֚shu5\ׯ~ nEN4ɇ݄ Q*}ds` d0pPe (+LңeK<" Ohbt%.s/t+p֔$_NJ4P,RnQ$Plp& j^ezi0I{V堛Xk1 7#J6t$ٴީʒذi+Uh , {̈lD.G:kL"(8n:/\&m\2S. ȯ9?]n,}Ͷ!2=?sPf?-Ԍ` CI"MdR!wr_[|\O s"ɺ}GvN{#E0|? ?""ḐPrPei 侓 ʳi~Wȯ>vgN(RN 3#D^W; 63'R嘌ڊv׉vEZwv_VSbQAuJ;|R`q\P:gm@dTdyJe^=2iOf"Gqpţ?a(^c6EesSe{^ߡ!ئ/'YטxȦ)*i *<ŷc?7 .9z{ioq.Ⱥ)d`9x)L NZ*QFO?R_<]Αkrg A@< bjw {x-߾>3,wؗA2Dat8m1RpaK 83=KƺAetݗPEs:J?}7ʪ2|+QgbÖ5g![<[MVKvS:`mGg𗭿x O1?k|_ xmӻLij#,Az1~Q}K~ t;@{r8jsa 1YETd1ZҚdhamgEveV7Y:j\K3]-9KmҎpEU-:m{!KOMueI|v7wMվ \d5.tQ  na}ucQ9^a5 ԅJHv0\it=Aޜvd1@'ݚj8۾. Lae9NBL<f| 9O}UR_0p" *0?D~z|$-N~zޮOnMk{7gwnOeYvmQŎZ2Iti-HH:F B!2bc  PE H0츹Icr"(q.Sp9 9{wM^ѭKUԹ(MkZǵ5m!|J w]kaOz XdtL4Wg|v &(vJgTpPpQ ;ue3|zY0 59M 8){ 3e^\k[.km |h%?:$1'Rb8]#9(gV`Y?qaݐY xy( ORVfԷCi&eJySAo +_/T pibʼn' EWn?7"j:ω6fb=hzJӑ"?S t^ e~*k@+'ͬ+3-Qq-r/2R%1|~FX~ (M Ԯ `ʍBH#T H8 2)A8m*dPP# H,K&lJD J&$1X"Rɀ:61M\%phT(5"% dr"(p=w|_Sa Bk&)_cĭ%@ԲC$HPPF1)""NPA@$IM48e0r0qj[ %dnbi/EL.$,X>VHk.]TV$ @()H9Jd~!E+Z\0K~\zCCx\KL>f`PO:u/&pa"I!+X i%FklzBPד-bU()JUXcnk%7_o#ar EBD5)4@\e5 J#NhZ9J<9m<UB$ JARWD 6'ih\ CA`GD)i Jr8J$B"` T"!ăD!10S$]+Ƿn x2i&5xr _c_2T"oYpJ5_u? ,-`wÙz\rgs^ʟXkc{A@! \S8twԌ<QFSgD_ ͚ 膟/O2ߑYTI\A3x )棖9^G s$iTyf!$eO/gm{o{vgWpE g"b++e?~3"1V1d:s%ѝ (ZLE5n JZXa9Loܕp?|h>/)@? m#h)׺K"{j@OIRX}R&i%a.!a#1S+)LpYrƲj) `T,Ĭؖˌm d) 0Q)X`%T H`)aL&4#P2ܹKTTC3 KaPUFE%TR cF(S҂[M?:l`ɤ2 'Py4-'vT|BԖ]1ͳS HBS!;2ƖF-R (0V'_I  [J!1wC&ڡhd$pQLJ5DH'oˁf_4Ӆ cAf"c)G"{ZH`0$3y=qGN&E]j33l]WRl^;=/|dm;w#%sB:X0MIL=ͤW c1CBm\5L!HLTxtOJa>+"ӓY0!p/#Qp6y@2G)>r='-P"&)L]Vic^s8@9J X?B{e^{Oƈ4ly=XtwK ']<~аkz>ϧg??rt@O5+ .GU8$![GEħTvrlwmJe b3LpMJwlf7R4Gu qC;pY`y"R(|Êe5-fdnK:JN>OCIi >O'_cK*UX тRe1EX[|8KSl)I4U{;5sY,P<"R 1}hGiZQ*YNQ| 1+TM҅9L"ad#OH)XمTIv%& \RoY0;)\Ȫ"E`".*? RT158iI2$$q!{#0%!a+!Jt k,gcIwzg 'Kvz];}ʞ1#Cxug^d\@*!*1SzSި7<C!VlV .$5!" <`d9`BEA8^ x.(1zbZN8@0èւ{GE'BK <9cpC8,4Y^‰O@U(C;r@m@3 =XZ;:a ZVx#`_ q*CP,I pベ),t{EϲO;'[ uUM(DK8= ,[K 6z\2%Q~i䟛l;Eeq1H21<1c pV6C_q|(u0Ր~l`L22S2 r;hɬ ")TkPJc''0 B7¿JQPC8zn1(H$)i N4ʴD4m&HRT`'`\d3.@ҽ0=oiiGy)Cx=<źDdKM$@h@eU&)7[rmuڳ5\ws8*ux8:]D&7Srt:d&;:"%kq!&v_?}ftC4o?J"UYXc)&~-$9 V91Ve9696E$KQ2Pd-;I5N AB d-U X"jEE2ЩH`)4 hL0b&$FCn6HJYMɦ Y" ()jjY"% h1} oSc"jǯgA)0PT@ tTy2>IchϦ74(O $'PD!-or=A rb &WVH2T Rӌ& ^'y+&e"R@ 0&$ČR~T,P貳Df BMF 4I2KHX4?0ҁY'Nfr vR!0 ꐏf61,!aciwR;$iC 8Bj(UsԡǚIdiZzL4b"Ha}h1$Ez ЋF؀e pYF|J79gg;,lYUT=9IԀ:O4/PJoo!"J"xUS~c (/bDHr )r6` "PO?[>afawfXA9 =66D< 1+X&vJ! vf:6f„ڑp[ڍ 0uFHW a).o9$bv+s JX>| IP_)o0^pXR&zehḑ8Ζh#:J!d,\Mp~w0U}৔#tP !C{xv;:=qGBo. G#WtqĆ 62P \vyO|~`#풹BpWpxѯ2;Ԫ}XP(BxtCCͶPRE swsa )^~R3%P4-=-ޙ ܖLgk.bhXwm 4Dašز(U$9< N2|;Ӱא!OADZ@@Dmb|ły̴{ʞL2K@0|4gS_I{s#l=[GM)JPP{ 1Hs–)'Bu7j *M. u.%.h`|G"J)e"~ OG׳1%(RB:r'8|)_md!Byp5eAz "*WS6jms&Rզ@$ o};=A6bBf\ ``~B+p82g 2C氂`b8JPB4:G))%QV m°Pq+'+b!ZE ƀB/6VK3!`( `<RD RJm98&ąh*6HJY(`t wEXDXjv18@q-GV!pa,_Op.^B\ZWj Zx[yll^l]0"F!HDUKJ+-V0?1AQF0QL24,%T A@UawndCiKaHhVh2,ՖRx?z`\f`4'WO/g0eV6!ɋ '0lG:ύ")H%V ZZVb)D3M- #B"EB_0^`VzyyHt?vI>ćRtѴ(-r{0+i4쪌na6+!:P2tNq|QB,bFD^ɸ$I^00\eŨDLf8fe.djLpGq 3 Qd)e?,BZNIQ#+أ)"I0*IcY0Q t5 .&1Sh c"b\"LYJYjuI)PR0ir8f"FibȲ"@(pVGSqd.S MWQK"-U$`|ʭ#T%55vAk@b|Q`vXpebJ9{I#O( &p(]QOcX,V[`,'IY$[ɱ6Rli X.ۗG昚Ȭ56v(q՝V(A^zNX1q;?Ru:]W *f+#*( i,]<%7H|/@CXTY Q DJ3[-X7` 6|S/~,NNj`X{)ߜPD"$H:&NH*qMD3"͘#.V7HY!0F2&Q FeJ榫˖.UUCЉa+"7Ln  IdX#;i;9`t^1%pQjEHrkҞĔ'x>(9և $]t[J9Ám `DI^oSx@Mˈn 98?$DP }zu_0wpi@߁*~H|MέbANErրu(|b0]`U ^!n jMT,Ru(Re zj.yãu{)z?iᰣh`BJ؁tlPIB(UJ!p?qMW' p6j(>"~ *i?orb/嘙\ l ECGLR,N;Yp:AO( Ŗ"^d\;%5hN2L< dC)Hz0n$ȴLRYWi Dx&;t gYaީp뀅Љ<@|Mw;;2&Eùu/AuȔֳ:WZy*4K-WfP& DxXP 8|.ບfAC& ; $H̽9s@/,4_FQ V! :`^w%!0bY_gd_8qi2[fQYA{Wr< ( *Qs`p7#C&ʊ\-)"O pQOrEC ECS synWX"U&܋ݭ!v=AȄQE@lxPƒ/g'`hPҡ6)Ρt+XʒAm o)eڜ_>E㾃lj hi!CAN|p9q^sYfdp9 ~7j'4'Dj8E-~x!B4(C⒕L$A_sdeJ)"Z(V"TLI & *b$H j!)h("*J * Q$R Tq`A *~mv>9.,azT%.ԇQzQ Ky3E!1%|:>! >XȘ^^xCEgg2hEG YJƅq4. I- h!mp vO"*kq 8rهpL4&)mƍpw,#C&@` >h3+/cxzH}2a7&kʄo[!|S MI =Bʯ6?| ~8glF)xŘC#dzcF'; ӈ9ž訤?  uXY(BL 3<|׈e5#-lhZz%Ar)d!R7鼄@7,tmK3E$)z3yiZ`Kg/'ך#rr;߆]?enҖfQDPQu1 ȨEսy^{?,6GV\IO‹ԌH#<^\!5_],K%Tcp2S`9uKIw$Mÿ-f(bYb.o|%z_{<ݯT]qjLkywߠKE6o"1=:ueǦd0EK8xQjI"Yj8἟l y B,@'ZVd3SȠ7{"'G ͚3 B㇥M?8v}V= oE:,UR "2h)!0aj%C v_4U#*FҒWD[F-c*UVd2X*-h0'e 2VFB @bPZDaPH"0qKiTB60+m"53kY+Y&CBQDU@5*(lbKI ʈ,UDf621e+-*,f$j%maPdT( Ȋ")krYjc`Y RRԘ!1$d"S6pisY60̍IsHdѭbt+'^CMmrU*5. p_!]BlVl5kQt-L YuaH傔B! d`/w ߚun4amDUdA[:]dHf[Wl.*2L).a$9 (jI iP)䩊2J3k@SGim '%&Z0hd=@{I%,BaLgOLð(W1c7@:XN'0IE1l`/id,tmɨk&YL{FIYЭcE'[ vYPhvYvU`jۼpdr/Q*ùOCr_NiR\)?8F^Rz/ C'| :gL#= LK$daT2TJplḂi'AohèjI{րqz Hw 00#֟Ц"D哩h5qwX ć\!Ejnyh T$0Wr D,Cn#z@@$+HHqW^'a!yPmB" T`RPV11TADIf\jHd`S5CKPDIi!"Z\1RRə3Dki`ih)h@,)@c Q`9A4Ӫ bB,%FaADEM,E1!)-HAES ZDYdaa)% .L,DB33, LiH  J ̂e`VKj Q!T! F`0VK)Lcl aAb5l1\-%CLģP,afIT$$G?<)hG {;_~ #X}m7>(C$ >Ff3w?L{\Qi ㊨RGACF P#!c|:pِd}zg(Jf A,S`& Zg:9y1v|K >ӫu=̟#` kPoeO]@!AIABLlL@%fzec;MSŐ Ж|_c*2^9Ӝg[zI )Ԧ}pABX1#ą`f!@f$39)< !|ÆϕgfuݟD}naf0Xl fZ$!j7@ϡia]RuQ?) h3;۳m/5ʬSE1$uVƃ.>bfdO2in߿Fw жS a|xz{|}<ʊ"j^h3)bzN Bu~>-AJyql5q47Xq4t#IgB>k< QC@N0=`ʐ뮃>lRPń_ >00r;5Gn^߻q눙 \<$$`LK݌) `T4 A1=rqlP!fVN&>p6~SjMqf'~>$0pj)u@>tsTYxv 9vRh"~/ƀ2 q!9qˮp(NW؆ mZP %ҿYqX !SdрViYL݌Ľd$\y  (x:(FNmvnMC 3FS1mx<)=zZýe6G-,G.>}H DvLG:OSQ%D E3M1JQE$LHu33AT@`(>#pw% LCҟT+d?0PDƹ$Ce_tt*ְ*mN&M K ,B2M71FbJŠZrV)B6V2#EaF2n{i]*LVAB2d185"5Cģ $e b([Xc*lTF d2Np! rWPȂhI#Oj Im+L;eȩ g," d FЪJm%a+̢%B,L2nEu*C(DX,DfݹSfQHE1" PC4(!S: 7UpScA&0%fJQJ:HY4!LDTPRTJDDPQLĄH(URZ)F[Vŕh,F4 \$%dCu#`I ɷԇn`HWUMᐄZRI6@W"I8wƈ$"K].@mNJA4G`LI L)L3{ r<>666(a|zSAt5` Z<gDCz_evT:3W[us[e<ɉd͍JA+|͢wl٧=(~. l[5q D wP]f]i'CD^ר.fm0t=#ovr\>B"_xX_+=wa{ n|6Kkg!5>b6Rꈩdlq+;I\LJt]\΃T$^maE4Wh@F6&L9/[ɖQxM'L9cPNقzC~i}{=u& ߂"$ u>8C1=:P=F5Ģ,?:Q?1鴕x\m& d`(I~L&0FZbba8cbRDbt0X-d0CJLDǪ'?ܸq7,=e&a,JZac^)ؙlrhqdr)h*YI8vl*Qq%s!Y:DBd9iXe*d+SG< IN YXs "aX)Q@{Bc'9"2 V&BeB˷|s"c*$ bN׫ֶkzs7ZaT( dH P]Ho\܆sRkƈ(i`9)\a[J`GP`љl]"%(:& ^"[β!RVh2 FڜT44\1A|veqF.̌AEЧ81]@")WYME̤P7J&΢#}Db21bg)r s-bI:# ak"50弦@b% FAƢ%p,0B)=%T+K^3f3F ļNf&◪U"Kgm4X|ɡH6Ƃ^Xt&H ێ֕.SUKĮ1;7r# dX-0p&&].N(m8j+ cJRnu(~hM6jZɑBPwC4.%tpÉղbt u( D`+T0\jժH;LEAd dXLXmBX." N" Xqk`m,YQMuT;Q*  OG0l6c"V"y`pչRwȼ0or8ʜjEX(zkz2 m*k;xXkX\s-74AwL NYŲtR,̦}S X HtˉAY3*o. 6$Mf4 f<$DADBQ0@iՆN%on8NFdVc+PF % i51S'[ɧI1'LHp0ZZ(r*3wѕQwlP jG* B6d!GJ/lEC7 [Jau:ØG oxH&Ig$Þ{?$q)_.y~ا3; lF7% %y@ mn mMR%%%R J4_,@z`n(3$%++yzL$Edo"So!&B&9I}oRD,qd 0 9J&DhgwNݻxa6;pD7YB:mHڡP0$ >t0??HިRDϼG.3-wKaR m#nwqm2JPf:х1z|A'.A4 |BH֊)iF_daL2 30xu N]GDޫN}Ix@cXvOJuF8қ5ݖiĘ"68 %)6.BM9N(~\axM_{$H2hH$LSH Ȉk\T҈ EA0fWLE~\ގgIz?Z!ܕ2T aLSm58n׮nvtj'f4f āPЩFUZ$+KAg)LaF,DJu:| +&m*6## Yü{!KaR8ݍ}m&58) (h79pѨD 0>8FA挺2v~s}[ޱ`G=/א>xxr۲ny9iwmÌ@> -ePy;aՅ-d zM'6t>v6`n{{uKС " `3j˥AXd[+6ȫjAȤ_%6Ϭִ:vKKaxt4mĩu6MӉH!#Hn#I#2S'^73wlB'o} Ҁ9G9cRA:~<)OdWC?yЋ|3s'{ V)dָ!aH}U;8M a!vm-kUeEȝN NenS.i*iZDi  xYWy,q?oN=>|Jix"(rК;JD$ D 8;ӧ^l 6ƃ4phKrbEp3HܻPN Ǔaq%ϕ3XTkas/`oyF+Ƴϵl n$%u5߯tOM8MEyo+G5}e3*=}o+/MjkVf LOtxH8ҭCo͊M7}sbτt::+q -uj]US[Ds2$2ɃG8~_&MTֆl}V\Y(E(@QIG D=_bl\\F]@"qm3ڔOhRh*3)am;inoQA(fv0*i#FEiV|C^23zWZg=$LcI:X_!D A[JrǗ*=nPw1{kAr=ɐ)|ZKvZ CgP c4:|_3~۳_A蒿Y=Q`gƜAY;2YuI]Д`(dQW8b?ej$+ $jmOبw,Dq !;a2#h! &y3P<'YeĵH4#.%.`z0:lPbre,̠bJ0=䝲MHzz is|u4.@dAIY+S\LVD@6앜J b$(#QA}=ha5ن)E)s 7SV-U%e)*` VP1H@|l4Y=׮xh@e*>Y ^-EP8 b==F8e" `A@'Tu}GEա3l:5|b8F"EH#kSQdI8-XnyO:e&hg&Ő'J*Hu;NW;r7ҥ̂50 dhls׏|)*GMRT> Hp݅&wEIqݝc8Dp1>1{+${Tk},?7ǸuΈ&/0]uNWpkoc$kH0iΧGΤ~XA9/^! q 7spjjrW ~; $͝៹܁a_}l`f{^E`aDa~v"=`Zp$a(@7*"d+BAu#M%/~Y|bsn$ ]HX鸝: H#`];Ĕv@D=z⪎ٱpHAR^PIx5_HxHH>`R6C?D>-N")E$i:} z$;7Yl,9lEO;xi p4 |, Fh( <6 vq-L{0 ᎌ9{(aXΓmOD%AxXkCtg=dIխV ^S-bD7I, :_3HMp>&jt~F (ʲ# ,dH Ujdst f@BQApBC 0]쳔$#89^,~,!PIEH#5蟻`0HA`(q`Vsn(Q $XIM`a'D'23aN(Z>{UCAQ2с co IT Sђ=E|w=TR!"z0]w՞wd1뢄5:1{"=GI;kVmw534@Ƽ1"f ] 0łG5p"UZtƷ`@:юY}qA(z~>o(r;@uBj\}BiǮaYX> ?#p\!*uEBST=r QT"R10VkRz[ysچ&77eʇxO'B4} vٳh/ f*I$]HED>y{?uUT*tUh5"Du(3$QbA]unOC @@eΌ /h>(FJ"𥉉yt=zB z]d^8:.HgXy؉͝ (ٟ@g!F c~q+$CH'fADm!|ϹjF=zNB-ߎw继s:ēi8tHb /iOkgsʣM2L&Ţ8Q3)h@*4\`Ut,V华s[軸6u0-TȤ]R85Dd=֨rBU6Q;s f1x6df{=_0m56-uߪ| } K0[BEdP ̘S[dcТ"L r#EVV-W9~p8@#]۩(t ܱQ06@ *؀DHŭL 0ƴnh(o7R,HEéuζ@ROXCr- nYbG0.1@SCϦ-Id{Dl:+H0+`r`wOTQܤ؝'YG *zLqzad=6g-vARApF0a vEyY$H zc2@1i%4&,IGtcz>*$mdkՌk QQ3 y0iv@e*G!h^7`p$t&0rFH`1TI 3gj[{4@HѢ9&C팵4$ A$b,O3eW4괷=dC1V{~:aVbN0`WJ/X62dd۪}H* dKr X:fDpN\ԎNĝ!u70P0AvKA1&jIaoUkz!P"DT1rN \EO[SW7ivX ![#GT硓89"̑$mJ$CtABiîJ+>4@iш&7YН%$nnyP]f#l&]P[=#ȳߌ*Ch02ya󜾘VxTLT>P"=%pcU ~c q3D`p`=4xEO$Ljf+" 4Dv7< yNǟ4VV "s\$m"EH}\A0LwF#01}.H$yz;:(ӝUH)ìyS7l ł{HAY90$ S"7f|z# _|@>)7#2 ,b2 p2{x;@ cel= Bzdv{T yF/6>wPHP}ad&}):D5EQzД!TjzA:!(:8OO'4s]=-g<3ڞ,c40!Zk%@5Q َB^Dǻe!Qa> |QrBhv@*Pr 󂚘1%M1ד=0޹'YyOm(DIxwDQZqkKvOoOcC * g3# ,m rYtRCZ9 HqTAc:u5hTyJV¨_83Z:7=u:~R!rvV·֫ØP{0e}Ŋ=1i?7Wt8fi |sfO_O}t*W-0iqPćMQaRݨ{.+^KQK 5F&ҼʭxW JhvzP'\5S8N5E=1Leҵ A硐e:zz9Y=:v2aDߛkzLz<~1d^\]4qhx$Wyt7밊e=1dN`<3)I$Y <"Ob`hP]ΠPQHHqeܕ)^= n{>GB5Jl\5ضDk"h*p\ވ^Rё#Lp cuθoHyA  ص44G뚰h:v1]\_5/JOSZ8W97ԇZ,"Hcػ/^8\41+›36=[4~]sgK]e_ZB\+C豋g!T3UM | (D4]5lVLNaDd=S9.bRTUT}UrN]Y;QU SNC Qߠ {3P;-F=^`ŤAw /nH[﫟~?&F +سw]x*I+jee?&))6?_^]uwT6>M3#'25j`?,{VCV?"iL lfx\7`.2*2쐯B\뭹'y=hM|v,)Xtai5æP{^ڹپfIP>@8Q: ssePAwbV'JE 8!A`cDv u<Fj`Q#RY љ՝B u!ތ#er>ykռ3 I=x/Rb 6(<-qb Y[% L, 11-TV։(v&t8̒*ăJ T-!QPL VI^(BmB ~Np2g,H!P3ZD-f>U>S8d2`Ies掰}vͷ0Пl%;;6dd.e,uq@1UR2*PJR$uHj{CWMq$PwղOгP 01;y_)Q/B!_鸪yt{ӟ/ GL* @ώ$}B"a'lm iy?j~*kH d!Y.Bk<Έ_m>gdPRd&!X1Y Aq+,r1&d0ͅc'ԓ#Ǧ up@+ a&ֆ+-Aq qA7N1ҊvX[)\)LqDԪiZ tUuR&D6ñюC(&-fq$MDM9nv2̝nW &Li!\i\ I g"Lc$̡$ovٖ@.ؤJ&Unact1 @CEAN]*Iv- a>JL3/>A@|pYɪʢ^}bW-{ ȹ/0Q3GvWc&~džFR~4ߗ/S"tc}s<S4͆)70N LxP-n"c `X< <8OȃkbAH!e!R(R j.폠6\᯿$"~޵g ?ҨM/άv,up|X΍){ j2g"̒dH%ݮ>Ҩæ>mby,{gȸgg\j^J%ڄl2VT;1REaFb/m3L\2}]X G&V-}_G8JL@<FE9 ^gS.I ƌSp*QKi^u M%h8z3 !~4r(T !xjv^?#߳`-VH֤޼v*}~v*  $rI +J^`qx$c:LՉ ]$qX GP(աBVai!Da{RhD`z/)bc|5AkAwP(B>`6&! zMF[2*Q&^UBbF'ó4KP51FD{1# `cb"VL.u0.:aȐa5  b|ld=XfiXݚCx"n0@j("! L/,^, 5{< R\@uH#ilBB(N F{'D"`4(ɠ@iDׇu!HgE@썀|"uTED(a_wQ\LPئDحrzke޺8&}Y}0epzߥzUכ$,r!#ywԛ7{Ch|tZZT!&6d 7`xt|hZp7:cym-E Qย{:E>l(S}SE_LJ`˔@m qL*L]1ﰷ}aU|}N_f1ȹZ*% 0杵f?I}T<:F@z&N}N Z⟳~i"RDvnj lZ*KYyQ8&153+di=3bzKK`*QHa&6R c)IDDXfXeNYZ#:Wi_) AJ f 癀9@CE%T} T D(jC{rX CX\OxQHPPJDN8xXY(;UpUY92өT_85 4Me4Р>xuQ BDu= nז*A`f(OH)"}~!yP׿nɅ!@e垯y-Vvv$_2htĝR(Cs[8S >R2D(8/nsffcɛ.1Labe=eݽU()pV2\̧L*kIl̋e oL&pF0Vd۾-w䛇"Q2}:36g\[fF3 LNy51+9D2vӛ tΏCGt*y`4n3Nq:z54g5Du5Fo[{! Z2 Z%jdId ǜ|󧜞4ӹbD0NrЬ--IY9"mv6Xõ'S$1dCd Y).V15Sh8K/ܝoE E 3?|:Wǹ A%,,A |kb_ 4z O.t2!l+Ģj3֕JϦyb!y0<ƌ % NN𧛉cq(VhERZO,UW)<i&Ȝ5(S9919UA}pzƯ cG`~sY~XTf /DĎ>1Nb#O\7Z'_+ss"lJp()?g:񻍅v^nNl ꌷH݂ (V&B!"J"P nQP6'E"zx8=:ԋ h:,#<֘(=(]Nj{?4nh%>v;dB4!Y 7de@t$"`S>(1A= }yt:.^ ^1P0yY562FqA~L $ҋ+7Ch] }ro%}Ll籹d@L )uM 1{БV'Ag]'2KH^^fyޜ` u} ׊6@8IkцAm&OC0;>^۴ؘ]r~G>'Guse6TA~dH@7K%FP9cR9cYx=czoWVSSmJ3ijb tu5zF`SVk3D2-*﫹Gk#PdQPY!E4S*)jDe(iAǂ^$+$i@)d"Q(x],, .k4$&nV*! q HlPxwlwl( ZQQ(,+ܪm@oXv-#FɓJN(i#tR3G},>oM/{,ߺ½'4shLulc_n$ %$q ck*쉎BB ;5c޸:< MJh&T+ED IVS4/U@BzO<&h't{0̒{t)C*vmc2|\Ȩ/l!;SA#ivi!uIRZ2 IiT6[AǞ% #obD|wkXգ'oVÝn`fhAa#.ꁹ1VM]LL%*Y- ӽ5mr-P :TUƍxp.%:?=o؁G'N>3ǭnp!Cr3]]Ȃ+!wk f*xBp Z^p$1p"H 2#cC"B~.&Z8x}xyczwzcϛ!2~mG4U+/Z56,_#uh-~ y}UϺX9bIZwȻ=4޷EewcMKc#o?wkŎga$r$` {d:Kp[zٜњLZ3#EGY4zzZr$g[?gyYs?\9ak5D7+ɿ/z8G3F])10Wv"`NZ1|O77|lLGWj֐v*Z%GX򇔋:1ű׺FI^bZ#iRMR`wt/tR\޵9b7k58 Eh}Ղ^tu<;ȼ2ptLen͂fΈC&|0 S_Lwapk;"u[੸:CDQ$W})TlƮ: MNztZLj$JTY#o\jNeJ/aUD:UD(R'#Nqb<5[fό!PRcC rOԺd' Z(V?_F%tsO# ?w֧?MT2 ?-G膅>{K"yCɰ|paHTc (Y ' L("G)D MIz[P N2h )3s)&B$M Ȭ7z#pc( $5Ajgo;029IznP?0r_ @f.B@'G~(aDPXOzs#g&rτnB]}ɧTъ*E/Ct&*0JLM)z*2 cHҨ.Otޒ%"ҩD_o(tH۞ 9rEppR(&b3LQBP@T.O)=s{d3yέkN-X:=c=p#$y|Vȟ>_ҥ"4s@Em|P+#SS4T P2&%-"EaQ5Bs{ ea{}\ NҿXTʾfI8˹uΌV@JX|~'6!pЅx;D[g  ,I,!*|$d]8Ț߱6BTE݄(d:tff_V[~eL䆧oNmQX~&Vsk 88Mzda5EES- [TUri6D&]_j?3z(Df2 h2PRV )+Q%"ei@DejIcc/ u* @d6b[`$5Dh_cQ%h% QҥZZ2AeHPeE-eTf 9RQX BT KDDwMƼ V[B$ƪavl1 Ɍ1bE /n`#QBƈ:k!S!Q1 BС( ,0e3!e*E`$c 3T6 1DT d(,`baSQdbI"AtX,#s2",ԣX+$6`D]k+͉4D-37ķncYh fLHXИ3,b KD`m,XZ`PV r2 \! @,2W "Lƒ F(W $VɌV"1JHUhkIXV@XT+* .M3әAfSC-. -$DHEJQҍ)%Dd!ATjJBZQ T r V,nj d͠Z݄ZTb*,QQm uۏGb;wӀБ$vEgО!1z ij?&U~ SiC?EmF(ǿ ({yu$Fٯ2P M&Ea_k9Z7Ή9o꤉[H #)P/>i ň20)3뵕ăc62Z'Q9/'$ 4P H"%: V8qZv!s"(0H2{öS!ep-) ᆬ{kyfTcg-( ƈ=cѷ`࡜T 4UK,J'0Y@/ @CSkh_gR`$M)U=}IuÓV\4dWe8r!MAHz'l ![3Q#Q/ jeS7] )eD}ȭm<AQQh{WlM/'@V , e}P9&!<ÇB!u13ѝ2on_{?%Hx_@I-'ԇOYP 'qFp5 ム;9auAIłQE1MT2k58@P+nͤ+}04e"d<6z !dzh4 zn d;1Ͷ1)yuSH=tޓTi#H(dpuk{Ne<ۤi8B h$J0!! 6](NiRT<`O)4xS~Pɘ x8MbRENZ̼IHRM!nS/d x_3\9΅gL|7H_):S_V`";A;.1Ie nL φW xY~=xg "9e*6zH|(ʓ +i !\hAAy $h)yx?w1!`VHS7M "82w#%3f ō:DX( AN&Nك8O?t>\)01Gs)&k|X\Za o\ "DiQlC}ZjN^K (32ea$]wU4wO!@qfІr06X2DM g^~,jfF~XdD(ŋ%baLz*(k˶8vTI !XVP)LhvN]öw4"f` -K3 NXCG@("*ʈW-d(l3)a IB \%!S*$ "A&aş,e> H; I9Ѕu!Q W?YT?;15)f 0+ UcVD 2Kk+2ɎBĭH* j-U,V:2c8 *"rĉ:yx% AM&Y8F1$ȓ#%BSGT7> 'w2m!OJ +m)`ҕzgIRѡj8\̙,djfLSF- \1NBа@C'>ƴ{85@Bkaۈi`&ʋ¥AiI&W )JR FT='QIJx!4AIW LAxo0 7@w"% NϪ]`yl4Xaa_a4lQ\f@rעjNms҆REE:p"d7ԆJ|[YmX"~7ξ#cs2au]BA!x`p>/Vg^ҹ XK,|)HԄ;Z jhd[aRgX(y[zf3aWEۢ=F{rK!vU ϦϊuccmBp6XD.S%hiqW|NOzb=ј!NPCM) b0BTV,0TV6T,@keq "Hj b akkDd eTXg^*(]lV 0AQ#g B`k$AEL@Pb51e MFbRDCA@LDRцXeLd"DjV Q DA(B(`ueP*hEea +Q*QVj(RJՑD.UE&*,F#mAillpuqtQ׏u>-9xgjGpg InYLV0"~j4T64\2N4HMrP"dڑ4mS7Qq>_^ !#qwl(ܞGq?O#}ibJ0ŭDd?' ScQ@T O3{}k6"`ÃQI`r$# a`,bP*C AD吹h\ɚSDSpT~d<BB-3t.MC頥f)@eM]w'( "%hZ"x*1)MDi D?NP`<=dx'yDPP B.TM+JRJBDH C4 Hk̓_ (ya;%5*RJ'#Eh{ <P'e0T!FIAE5QQD3$/@FrwGi &k^zB |` xW$wQK@T,Ն0P>냑/g œ k- bZ(VZJ%KX5km R¶آ(J,$l#FU)mm `\"#BC,x~ h)JNP(-YeEUE fGHň(R1@4tD)i9ib}424?=QTV(""* DDQARAID熑u̝sW8ALA$DRA@ƋAX -.4y̛$=J(`"Y(( fZ" "bi j%R "XHfbRH&i! J * &"*H!&"i& "b I"H)**h"bj&&"(eR&t W!6` S{IMGb" O"SqKBhE@!=O&0(HP&?u=:$$@҅ (54BJ-!@rt)&GKox@~9!?uX-_x?ꠒ4Fy>.vC:# K@S@T9va@OsL>|P(X=.~k54CL3$B蓠y``qt{eF_ZG -O%^dO,^RR=73)*)s(-{؝a ;~86o_"`Qx+g?%|NZS}仃'2Xh[3Rڂ*O4(bRy_:!QD"ʒM@2?3S&.*wX%6*sGmsg wJ3n 0A͏$%Yq0*%z`'TԌ=Ϝ((~Qyv.l,M 1QD!B`>܀9Ⳑs(<JH_gjxĺd4HM_ûgBǡzU<4R[}/b u_jzTZڗ>_"uYg D3BtĸA2(ĀRCP(ӷ())*!9?'Z:C%i!8$IPک T6i14k7} `w qT8#tC2!ZHi( Pvb DvCKˬf᚜g'^D8=tkƙkoT&]Gc~EkYk[J&d%&AQQA][XeFUd>>@t7L .jŖ2rn6YuBTϹʪ2f p_&"bIIA!IE*?9 @I7f,[*h0O4&uS h Cik A,яD@gg̞8`x> PNME%6ĥTPP>* e0:`jBq! Bĕ,:~_z~QYp)XU.@+1 ['/LDHKDRgM . }:KXVUT*ݖ]ۊŊ"S,[mZtЎ4f\JTJ S~$a}`r^c[gxK=38?Ke(" ?$J䀚8CKa J*">-P9|ܴQCT Ip4=$2MƅI4@ 1@VH2H+3( LEMEHU8BLܜ'#"2JYgDd8 J2@79}EVE RaZ- c H9b~Cm3 @QJ Jf Hei` N.0@ MbT6$Ђa/KlD#_NeuRt) @nQH@LPNM@j(Lo.}HX#i: 1sm2JzPёb@ENdd"P "(';b&"2 0U*8(CHŹ0{:Ďһ~+4p{3$'@LHODC ʞeGZmd}xְ߬v$5jjڒmvH?ۧ <;UUHTTIDMOp_$p5w7l1G(@b=#-v`|SRJAA!Ԉ zI| )BҌH8b(JN ?U Sr0Y.up " %iTT((5+@lK o)C.@D4,K BO'N#<0%d=O0d:Stx/иϸI1AC 84dPN' nݓ8 ,;2AmD$P*^^.צpj*`ZJ{' 6?ى9v$qNJnG8a$!tF6qlefۻ8 >!8T}[&uy;Hj sS=THEقڷty2Vzfd( bפ3|φ=kIuxB=,|645}%hzGПd d t%ofRȤi!KDOt+XAQ\1" q>'q 2 favFO")yhϙ`s7Gu99J6?;d[x:W=h8 "jCi?H|DQ*&@,Z:r0oN( v\S"##P(mjCiBHV "xؐjer? H)ucw3ht]0mi]d S y qXkCPģuȓk2f]My: ML7ICʏvEmF)trDl%O%>ϋ6ETzA7Oxz=d> l|? u3C Abs ?7F2lP79C hrap G C$ҁ}ӊaVh4JSZѠK##ILIlmbROZo/8C’2,y'XE {y86юqX4&,oXvB$M/D򝌑ٻFhvk3!i-=ͷXY?fP*T̍dIA6&BR! FR HR@@I+LHPPR4( f(B&"R bj-B(iIZFjjX iV&B&%( BL2D)JUB"2j`"(GP9 R HPL2dMT24#T(QCABH2hhh i&JIIJdCWB)((Vؐf)f@`e(L,*"AF@% @hQHQI`iiV!2RLqZJ(4Bd@%("U5&ITȦZ9sI@Q% *Oz>.&h*JG><#Z-m6XWATg(?OB '1 4lj3u]JD~H0\pa ;Q4*(QJ)@"P(نHSTTJEYq1ɡ"n`GhA>ĠSB%bxpE-4DDELPB AL]5d dv4MQY HB( !B"$N(dP82A2C$!%,QUABEQ@ ša34S@0{8"M115JJ$0 T$5KI#$v)Xe`7u*Hv>u$" YX7ytB2E* YD.2S'$*er$IS$iB`hy(f%$u XZQD!u3 7]Oi`aI بoY@gD @#$D )!o6浶ÏCrFdIQ\ jI"=Z%rP7}>qIM9҃W5'1ԗ{N/) ZW7C_G< 5zbar \2MRR lEfED0D55lx@qr/SO1W^s5 y"pJ0's)<+ث$%RMc02!~鈷fDZ([Pk!5@ܢI?í{NE#5@Pz ƙ{r8]et@Ul(e"X0R1 bOTvNO~Ht(mnu؋h•)^x `tXOM!Ca鹈1 #)>&E"Ƽ`ϣ3B':DgaK'Bx@pWDupv`(4F0w 06v 6\ WAsLI-G2GEPҾ8bbl8BpCh Dr*hχV^ЖCW4C}?$Odz>0"->gFlԖh "HU,2Sn+ 2*ꅳB1 Ð.݌"sPJZAiTVWũ9A' P듋?ͰV 12 DX74UacR"EeRi [L Zb)B˝)32&ER1O[?tď΁q<8Ax?)?#%dCp6ӆYW5@H5L3vuޞ<{ ,HzBN)i;`M??/;KnJ̲ ŐqgZP!)ϐD8!v#WsZ7V^# ͲLLjB^:VCs&(Z Y*4M(Z` " EZ E$ЇN4Ȉf8UOhGMj0;O==VWi[yz{m0`]㉡,'C C&N&n(n+ DoDa ǂh JVc;.94S,z(*rpMBi NOy_-,֠G5RJm4~_ >,:۷#U`&gYA9Il*bg.>WP ^#Ͱ Dq4P (^vS7ogX~hp~8 CGh4 u,h! y豔1a30Ƨ>V8q,ZwpV$c0xGi3XZM۬ŚqgZu;J"eN2`ePN!;Q;Ox9u2Zk ,.LhuɦC75%N'eB&\0)7iG;W81M4 .h6,BK3)pr_'8P7 Hc7Zi< 7tO/h!HqJA5 ,ac^Zrç'E?BaU`),`α @0D4&`3/۩SGe`2~aYٜ y_%Fi`̉=D9K|~s. 18?jOp.}By")_euL40Q}/I ЍI64D`m7!8/ܻeG 6QЦq_NtVb\F*x~K>{? zc6#I%eAC!PDEI ( "j Q_$v)]6#it"DBQ5g; JȤ;,4$钰ia@I g ˍ̔B\ @.5Y@VD'v$%Je8wۂpª3h["t0bPB/y>F+3 $ґA> 6BO|:?z{ʒb<5q*؉CeTA&2Tֺ+RjBZWMP`hXJPkINN"0`\Y ,'oI(]+?<$P 4;$caBUA&/ ӡ hWc fy=&j>PuqV!S zꊭyoIXbN%1i{x C(Omf<8֏qfN S 7YnocZZ_~&+D1]Vzb 8;rajabNxg4I89ֆS0/O |X~Ǫ6^bA@̙,XCuw,8\S?4 lPJ(r6(#8T>0٥"Άm2nH 8(k&`YNР,fD1DAFmYբT)9e8J,bƈ屄QTYUP@F+)Ֆ*pJjK qS-m 鄧-N p`\ܯYVo,QiY-n5FbY0"D-c6* 7  h&,@TmJ KYkT0SA`$" 2LB)2̢`$x18Jq&s꒰(,dR$^4,ә&dDXPDpSze̒@2lL("&!e.Ssi1ƉJI@lPJPn}^nyk# 8x Tqv1W`%9"V?|cҴʶZlτ5RtQeEOwW 0ois)1#ΟKPz$, awRXNA0D\X,Tcn$ɉwqp=Q/p}7Wy4%bJui) 1j1l%Ҭ1 0NnWeLyBxm9@02 *b*R40 #F2(&*qɨEӐkJ)- oWQNR8 `%9g{&snvܵ3Ie2V@.8PAXMJ&efxysYhQk[{`e0^3̰J@]ic#R 1`#1v+ NʘґHi YrJl9[g0r1f3"c8`Sh7TƩLfTrd]-I#f7s` $d y%RLg5L:ovV̢͠U"fA Q$`:As +rm[az[ՀqtNވ&"Eh͍y+7='^=vv8D$@L"R͍ntYܶHbHI*Z΢ƶtad"712/h(zz ۃHa@˙;~y]P{FV@hNc!3 VŲ96`D0ƍ~"&Ou("Љ0R00Ws<,襩I!ͯ5rs zى4A02娈x{O{W7:XjeέA)^ +g4۝CO<FObs<|k(&,4't>ATUq 5j֐f o^t5ܜ)U.J)ʉȉ<aZ|41T I=:c+1$C0>HNSRt Oꘓy:!J(g?{J;$:  Rp5tC=J'N[%1) 14 $eq/f肒8@ăZ>dV"hU s 1jq+,P ^[‚ aTihckT6"n4Bʍmf9a؁VcrN ) ;eD0Q-`lIyIYC AAS|٬xLl9JZ51 D[+ 5*:ȂT\bcErݥ1:MMLdw3d)T1 Z\rAhB[#XNp6(")" _p1DAv5cI6+ IJPHKa*Hɀ; BСH(mP}/ ܢP%ñ 05(ܛhC++!$BF +-i#zT UA !芌i'Fi5)HD1Yc{L` V?,JKNn(f`ΰ4L XC>nV"zy'g&:*d,mܸv2k$0M`gԈ=C<ȿuf^axUVKqdPY>Т h``R:vg̮>?j)-;'"ԏd#͛L>ABAU0N8>$ 7aB% q:Ѕ5bh!D6HXȤXfcQ&Rk1,iwy;iP y>I FȜE2I=$V- HքO>àR6;t—s L1ϲ7q.^[.6(V#+6˧}@OxfnncxRa nί$1sm{"FƩ)R 傿^J@;8<MJE"R(R#"r AS)ݮ) D!MkTlx '\BU~`9B"Q"{K_^LR*u!s !_ (_ϩMdo }\(beE|;yA\266DvQH 1Wd drT"f * k*A#X<=x]Uex0)!PMB֖H! L4FB +t쨲"YԹ ZVF-™ɇL%ݷtؘ ܆2)"DK!%Am٠a@U鞼u[8RqqN&.C~5E B (!s%T]^xơ U>[I-R %CS7;x+0*dgnkɁia:k<4NSrgNs1dD5*, wB)LXKi!~Kyj#QcKJ8+sMFcz{%UZϬW8sco=%s*Ԣ<C 3%j*bSS/z[&Wʴ /z^@7T֔i/vN)3@`1 I8Allo#oPCzrE玕X,S,|ߐ;3$z%`fU8"&f\ Pj2Hnr[8aZHZXVC xh8h( $P ͼX O 4i1Ĭ 5s OA&,̘e9K0R0gh€9K8iw, g 5j,wZbº<óJjҔSC7vQLTɢRĢeYi)GtATggr b+ѻ*ɂbmdKtH c:z00Zd +{_=g4,.``1ffUݥP2@&ݧk,rBrySshϔ+|W]!:PRL? #D9S.LR&SMv/EnpIL: vg}|dLCx0cI&1m8̈Y3% @.Jp'~st0Pu*T7Ĝ 3 ^s5I@B^A>Pca@A@` `N_kr29YS*VVP;]sH^ !OGi|50ZAi(i48v9 -LD27%()HiJL` YC&ϲd8Y λ6G!i_2|AHuhЂt4xl_؏3f|У<9Eu.WD {4GB*)&1VEV0D2 2PK-A悬0jhV pHș0s#ftB@;.5dzӤ5>|R,]ܐL!@`d9s>H0A%C΋Vb;JR S$hWHw'läZIZ&&&$)f!i(be*xl@'*xBE.sغnQ>"I^ˉ,ABi-2" &*skŔRZ^ِo9٩ҶH 2D*a`ªKr[Y1K 22c-F)Sn p(" %cmjRQd(ʔ.DJ#FŒXTD[ BcD-F0SlE*2`LMC(M@\h0eaH,NaaDF Xj(+E4LIJNu.TA-PdfCPE a(0Dj$)e= ryrpM4CXɠ@3t\<* ~̈́^X[?0ͷttp`L1G>yLQap4c++% +k(Y=S IF$VOu&gD|zCPR2kı-;q2-Vk(hQifj-eJ[%TmVKVV6P-MEVNkj )h"@ &bJ)C& UXY5 AAMHDR-+M4˖e1HdA_r:`) .&6"PNd#ΎE:*(T3%1*\,Q Ėf,0%)-YTUPlU9 |v݁=GѓzO&_5Q撞T9cD)/ HDȔ8BF:& O/ ¦ (HZDMh+ <0IXD,$2LBl5&s؛|Q%<m6&@n)Ԡ HSmL+.B( XKR_ `!+|V𞏆)a?a;DsHȥ}<@LЦ#"v sAxtst oϢ?M~jx/ˆӷȆq`!r|:6JsvVtJc3|zX >Iv舠dvyu#zN%VLWXv,1GLXSm XIhCAM [HC5Q$DKHD"1"q.*icJ&!M J&&ptlTEBI֓CB l_|w?룞5S(oPc&V>KQAe2+ $N0 h}wdi-g]%֒VR^dCѲ9.aۺr4/y M1%c (ƯʉT2l-UgUA$v~(i˱/v2("=s2xY*a"y ʌdl:IS)x˄uJ/1ں=I%j&zθO29 Pe4]VvY!'׺ݶ-' E"X)u.aSȧ{-\S7jأlFaZa(-`s"jbfv֘gMrƅLVgI]ɉaLpJܺ52n۷:isN4l+R}-)Bl7.\ $ 0` ( `X%6]]3?Qv9ϽcB#kՉ7%SbƷwU &b .e( ޞ%Q7uº*¥H4EYRi[f;Lx9% do 4Hw/n8B;+E:@j,箚ɧE, g<1x5?_^8ΚAj  ^ f+v$pXçz 0HK;ꮚiT5E`G'C`K ̧LFeЮd7p͔%icVjcXrc*eP”vi1`3(fQ0rCxbC]Lt0P]uU"x"̀kC2q 3S&(Nd23lb=cٌŝ|=nRXVnش NfytfP!`AQ PBV)ӑ* 2j>J&x$y*Rsnm8a!GX冉Y9 JP"@-)U P+Ea`'.0[jגẠD%zLfKxP٘"a[A9Y.dr Z m"20 .`j,; MYRaSLMIem30@ԔQ^*xtZj B IְY w:B[F.d+Vk*(0ș̴ F-gaj] ztiV1wt33\1a82`d-,^[U:>^t RkE(dш!Rjj&52O)9ѐ9ȰY;BJ";h4﬜z 96[^.ҳ Əfu7(&zMz@o2k i2(1kвJQz=:=Qlvݺ!E;{a{2bbl^٨D:a6UNLH-@ V93lp1p0p0Y m=3ul:rXLQ;6sFJU.dR '7)&.bV3Jb-V)pPxС$w]YZL*}R7o9.ZZdH 5KS.2OJZܣ{3CQ3uM QąeCƌXvmeEj5e՛b19f"Ϭ2e8%E1 -%FҩF­& ̑\&ZZLEBхr*mUȈ*sʰEl (}ݦJ(a(h k\ [x*V=)$k_â OC 0ΊȠ+%]Q:-|c춪z*Dz0ᴆ9mZ 6 4Dd&O4J(ACQoY瞈`ק E,K=Cwkmޓ݄|,QI}iC:dcY fA@& ?)29xrB$YO?HpC្&B +OxA$ AC, IR4ۧ^dr hb0@H!F.xOe c_|C<u Zz9Dw#D#" |[p ).GlcQ5H2%STݱhF"* d,Rm0UE` se첲VmRF(Q +Ub q),d&jbh(*; )=?&ACC qO$uNSaD-H+8nqc$ &p` m7=a w(bPU5--# ]r=='Y` y@4(đL UHR!0""%")D@lH䨑RE-*EBR 1 BH@1uAM `kK |&E HD@5C 01@oTҊRA)O>q; )"F"I9(n'wI^ U@ !b5@݃B&!s2d"uM]J=uz(m[]rا{',\(I!u4E_=6\Cg^n &(PЫӧI2()Ȉ+{?Q9G/4?ͺi T*~Z ?e/GXl O0NI1 a(JZZR%$hVpOn;/|TQAG?;s :IkFA#!PY UЅC@kԜ=>p϶16l FEF֋hClW]{tF\N?sPLB1 )1@HErx^pWJP@'<<+,LPATaB( ) 5(V%\UC%iGi6ixo۪TUI⃄9p &z,2 /_#hF`L`YO|- Ԟ$FdpIycGZ55 E0Nr*G$7JH,PRg0Ȣ,dP0BUf0XtMb`jN%^r9}\i D$dcIݠH(]jC#!*a0dukV2‰Q x0S}p(U%6ޥm@;S0Ԝ*ʁ+%I*u ! ,ii'y,k$(>>NXG bUJd!` )8(cXhpIBQ-b .V@% {9:t8P9)mr6XV5͢[Y`KA"!aPm0)Dqĕ& HhC6XˆIDFbTF$̲ŘA#JőQR- d*B1P1 Ta+(Da%LRQTeC H(CRT3 \ъLPUE*UcI2&9 +I@m`)0%QXj[!Q$0d MRm`B)gv&8B, msNbvv%ꊨfNy "bZ2~Yp*< W9?+*^#̉B"Z) &<߇K;zkЋy2tjT:x)XI!P;Ƣߌǿuj@F~1M4k}c;z |>`22gM,22EMPp%bW)ɚ&UE C@Uv#y惧1*`C%A6N3k,`(g XyHcȰ@4#L@b+txep StƦ *kŢÃl+$ԐA`bXd$ N<޴&"e`LqZH1aeucx|(xd:RVQ\bɉ0z:C{^щ|kWqs P絚c͐3r AM`hYnfy%,F/-KTÉ~Xy2_fi{:]/FtKѱL 4dP]xdaB1t KVpZeC9։3c XjLI1DC ""J ZQ; ڧPRpFRTb'+y$$'o1X`䀹:a^>I1+2cV1B,h{.v[2n'.s>^^ݕAn,3Q|_o 'u`r鷌,kLK0}/ C +a;DJao>hn-,."p3q~*!klB.܊KJT~8VQsk~lxng34MdhFBy|Fu\ eW|h,S1ZLRޟv/Pu#DADPOTAWzc#%|芙E$!McvO&'pb1Ą}ܬMY\um~ a r P0%&Ecl7W8G(j RANyV?ҾA?9?xpr 1a`b AaC9 =qA@9~xSD]HE+hHhRVɦ&B)2X` Ab4dY"XEQWf `T6a&@H[)ABm*ƙJm8@m'h^!(bUT?y  U%*4rP M5 i@.LcILRdaPXP )R. N B6QT DHDԁ,D0A%J!&* Hb 9ML!3Fm,'8/hCtE7Ƣ໐AL-(HPȳ%С)CK(BH7PA 'P\@DR5(* *B jUAWi\(UJQT2EcaS_ K%Pl3ظ?D9rGC__} 8uE !}B4*RP$>V. +wi 0|+#s|g6}$+"S0| Ԩp;#@T Dc%AȠ S$Fzw8ŭD`6@ՇJ1#Y2Ťl6 ƨl.C2CO~-ˇbc.ry;_R(ސD}O(DHBlOH$TQKxpE-)H@AI=} iզ9p³qp:#JQAÄr@( =J*@S; ֑#39L9&#>Cu1A8!}07a5h2(KAJ7Gw+8p7#:: $ZR > `@hA7" !|<2"ˉYjusQbe$MU }*0EHdSM # ؋PaNrq2HZi(m ,Tǻd7ш]Y ʒ` !!mgn&jC8.(%J‹>a1&"abbbdhd8Wj!*PXPq[Aa'T*@ {9xC XH(b*iPRP`eKCP* Jfܦu9&HQ ܧĘ%deZhX].1Y",=!PIB0bJrSX fn`jJ2  $@T}xUEd5*OF)1=VF )_GŖDO1&&V G\* :!(xCZLD1,+lƸ 6%b,Pȓ_3C!8sO YPP:V3YEPԕdEvp-E )PĠbʄ?9?Lds0s6iV̗%(Ě `/WiΌǗbO>ؤ c#%a!b ? 0`xpSHQPfJ26(X&-iFB( (THNlzs|~1(@NQ$<֏^,DAN (iC e(,>%\iq72.adfJ ~DFuT"TNQʭcCm]8,)=%LnaEi8BlC0ؤg)̭#cl\Ie|I*{&1ƹ ŬSaS8]vH2@| v1cE#ˉHC!Ӭ_/L.J 6Ơ)hC`^wU2.#ݥeaEL3lɛ:/f q q08L{DwvRȊLH{rZu>ڡ2U TI@4D @ ̩*(^s("@h^}8‹trE!bqO`!AU@hE-AM4ңљ23RY!MID v6;)lQJ˕E5#4HARР0A`Z@>]uiCy5e`$’*H2 Y:N.y g/ŶZKĘ4|!Q3U7CLU3HZ"B6$:MAF+y_3]"#:`(zH(\)!aXȲ:.S= ѥ- $04 d ;u'JhVĒb88K$0xpf ] (x!@??xAEdq븲)T?2';M PSHŢ  _N.謭)#2 Zع#FT4,AIeUWs?,tz3Aq mv&fÆ<"lb|HL4TDASJ JD?GQ!0#)h"̜# bVڬPP"* )̳$;*=tdh iw$s yK Jb -V)0=s'}0f2h2# }oŐpC3?\À)LGN}Oqh H~.pz݅,vĦQuX98̯%J8sHf5 xp՜Pʨ;X`2##( uXЅF,²%a~ !>OR}}S,4Ǭ HϤO~Ò8ߣ'ȧcXQQa1"&h~sC҅QfIYy6A /I—"%9AY`oՆՙʜyu.[.8b"60L 2#Td!)6,Ŷ"zl#6&F"[`<5 :p,+)~T8j(jhA0`ń)pz4TPSHF4o(!C16L&1YajrrM5͵ MV䤬r1"RBLV@ShcU$hI& MtR !$f?JhIj% q0Ê .pN]sD =}RO%SU!*%}'.`18}K kg\'E|~guknwWH[J 7I~UiR*o37:z rdD6 ,*K]甃-$ZyQK>{:>w=ݛ:U3mturMVGF^6ï=;ڜ y↛C(Pb3V TpxG9ՆƠ(J(헥y{hձX͌:(.LLջvd4:4JPa&ui42sӃ 4),x@XaXuܳ#V[I_Q{~\%xT9@;lH\Ry₉P rڸ{lbiᓥɨdJ*Z O[7@6!| *`VXУ(>DU&m;Gڳ<öN3{ϹC4E}pn^'۹ʂ~)QL MQ8d{$1 n}{ /fraA, Q%#e̩@.zI: /ݸxP|z0ɭ(z ?٤{ B h†뼘G/% ~)SZJB/p;a}:<4`z1)CIAäaH4HuiR9ЦfVM)l\Y!~  S&Z9l0/]#rɱ6\晗CiF/\9P+A%`$ 0VИEJF̩($KRDH%1!Y&֋PUf9{'FB]ʾP_tPa%!(A"DS(4LAAREUDQRE4 z%B*eVgOF lVT5Ot .9 f KZbD1f|:y ߞN;K? Flsm,ZIBm&ШZdW-И[f"m %m6NDpyG0j>$e'@0xt˳sKNL +fJ.RTɥ3m-G +* !r¤iЫ) [m^X|zʐ)WE]}.l X|X$Xt)I32;(c DБq嬍j>mChɌF LS9 MH|@=؏ І'.xx‚i3ZXI"{oid rOxψusTa7@k8k^]Fd>>ߡYaLqr Q*[ G,)(Ѳ@bRF[ƪ,)IP"8" Z"52XX"FqҪ聧i3"I"QX!pJQֱOMKUQ% T)ie,†X@7<+Wc7pLmFIRpmf;<>Fʳf _Z<mf?}`v=PZJLj@4F m`L@L )jE rpCpT"dPF CZ2 L!a 2fX" (fZj(D+%,d@ch PI(B27vѤ sD<5i| >W/M\{$fO+A+OłdNeE.]0 $ 40&D% C@b(OJ`"^3D,d 0d"_E&K+ }3Az Bx\-rD۪w'e%fB('#B&Q]kU2T$I vGkjl c2*E,4Yƫ?JB2??7TyL0y+m-Q ?JUyg`r#'Nh叓|D Ja7 ))f LUO5ytxJ U /x"p+Q*\kjۯ%W1]йR(Oz{ӄWpp>[wZ|S1Uql)zΨHo{ő`.ŏ''w" 679A̭lE}+"F:&cL2Y;Or]I)(gR0'`'8h;ނ<\ ?=082rѳB.bX`&@̿Ph^ZD;4h  W)iU b=#XdFHԞɉ$Zl'Oֶ2d1G9K'|1Gq"B;nӱw$OShOYgRŜB:s}Z;腟?Ϗ:Wywy;FfLH5y7!IZqAPoHd\2T2syDBQ@I/] &L1WIK%]]@mhTxW|m<3^R>D1J6shI B9ͻ"+bKN:Y!T#TD j+%lC *ErUiX-lT 5R˃( 8`sSA>ˆnsnqޓpzd{3޽φL`[Z֍4%0qJX+Ҷe!J @D fdVVl! Z Oh SDzEbe ;*3H°')sgRh`AL0$.MC,{3<9b q&b%ES1A:ݥrr‰j5*\P̓%ˌњzY{u!`b_#Pe='j&PRT_xt$'`JlQʄM7 .Khe JjɌ0jKU ÷l,Q=ɌV!Rs&,aQ52!0th~d0HM`7S) Nm̽O )h22Ů;m# gfFtAp5/Z1p[ %EBWSc|f͡<&%f/|Y_+ <'^ X?^"- $ivUU&v4,<ҫl`327iPHiZQ-"x` l2NǥwZ}AX޿nϹ䂜;˲J3ĸD:0-pͮ"0p(]XLGvR0̒E'Xm/Pf BH I\Ԑ-̻Asilb.ZkA IX:̤&Xji$*%(%* xZ-BAL@4G ^#70?p =ÿOh?5)O?(JQt$.p˪d^/DRcR$BPB4#⎧&`zngӓUClBIbZ$ʉ#TBT$nũi)!qٝ2%Mre& MTTC8-1rA7/`ؐQjd>r^m6.^]吹 'Sߴِ[β6wz*V-p-KX\/!so`F Q&)qp$ b. 8'zH@fg]B,ii':iH!3ڧH{!4mɂwmqS t. 9P[hK5_Dk 9kY'?Qt~=m.Uj>RCOxDmUYydy';(h/ ҏ7toF9kAV bJH BP,b0b2fbR4$Ay^SǍ6uRy=`q( L2L<2H|/u+'Oi }ne-Q 0#C{5a9AC賂ϜC:<0VO71ldb/ lp7եtQhvvp/it4QB@wwvǟt(G<>"_D'+&OC@K/fA γ5B(A{ ui]ś]9uTu(bT=#4iR96Pj%DJŶtQ9^`|[$K@ۗ'= ^0a)" 4~kс௱<-=|Q w`+%A2C@p@!7EʂC 6UV srr Tr("&;O9 xn@qłSRDE5 B mH H3>PM @HU2EL3$T0)J@~e-dDZǼPRD%(n(,6冁V4K)]ą0tf$Y`6p²酾s[Pq•E3i91LĒ`KJcn4+lm`!02E#@ R)5-DSĢVleR*cĹbTْ,JVDQXl(D!9ٲx&m!e5R -:3j DA^C-)S!ƻ&~$Med G0Ѿʏd460Ȃ!S`yTeKIexMцTs]noJnaK Pj 2Y}_gX^:`_0n K'T#f2Q*e QȤix~Feu{J߫Gd$  e kq-͜!>0A +&Ju7%u~˼fQE g*)/-m*We4U PiL٦\G _?ßPY?] NΏ .^(s4AbK}:h(TIfSl a,NҴ"K5(dC7և$t6EͲLh GW< m Zp|4Mz/Z׫tB,TIf@{bXDB<q)AIR3x cb$lܚMI)Evh$J x~~$g@$f$&2U1F'DJ*عĤFRG8a(0m6%A >C()%+U/u#H{9?srvGfA}8SAh)I2e Ml).yڐow>p>otSL_Ϧև*,V6AgJx{~?]A#^TBRt>{`e R7 d|a !cK&51Cf/!C' UATBq%3KF_ Go*eJ{n\3yBVPN64)5 - tӏ>"2:k QR;cL]pe3QBZQ}baP TuZ0TIF"wƘ8F3,SLnf Cz8uђe,b 1C@ ^eM3 %+Tqo ؙ(m3yLs J>=N<%f*nH,J H3e X0`!V^3j*xR8E(!Fw,I$ GMIK2O8~eSaZla)KqҖDh˻_wwe(4.4^ V6ȌR-㭾\1(增e9гvE: 2J8 @ҙxO Y{ b@&i0@C0 nxs#๋-ioK)kA.풔i{wp=IunD2>}Vֻj_shYDii$ "3<2L 8e!)S?&L+ȘltJ2ZC_5n G&>p( #@ U{qDTp[ io:oHj=-yfnk)20l AeKRjrxLI\lT1!`mr.h&W28 7s03&lbWFJrc۝~}|>[eR)?C 2FPI#2wh|.#tOHHp@RNJgV*"Ēr,iDCW-<TtN⦇`Fq:mL"ȗHpvX0{3hIP5 Q"w\2Z:kљbҨ^6 `Yoyv(\ڣז1F $ äzag3>]z٣G`h(H"_TO!Zuԁb#CGDU`J?@;4b0"VT4*J*$.IL.g1#ª*ЯNRD ox&MLP0UQ:1 >kYw"b$!F<]{ I,޷2,Aw# <&7}v.E,zVŐ#eV~t*~cږ&(sC,T}^9RqљbglHJ39"ptmCE.zmKʀՆT׊gY JR3e>:#ICCxzȫ)_P:ga¦ŒtT> ad%M)ݥgh@dWX)!-)^ȣMD}o=N?=ݤ&!Qmdp~Ƕ,3Q/J { +[6DHέe&PGw1 d{q^3̱ aA[:Ml^Tg9Y?΀VC\&罙XN J H%)EZ %ld$ASPEHd:VX>l $5ktEIB T$VoLYQԳ-  `bU`1WbRCR Qm !6;tlHAԎ1LJ0[Rz|rTT1g S8Œ*[O>Hl#D>Tbg[HߝTS:A B15 0)(p P(#D)*NTD` P#j~ԎCf ɠl ':hRejA'@ ::b> `ׁEVC|U0]9'5 A¡@֨#羇g>y2;(΋Ӻ=rna(|a2%/P$,uWZ(IϤj荹0@"Kփ$h'IvY!ބ R~Vd=$L,OUfRanUD)n>DAYD9wڭ=4FX D+E 5񣻅iMG G34\%M3O&X":lJ ;e[Zu!lX i]˯BX,ې X1 cs̱$H`SWa$ Eȡ"=MEE,NryL)x䲀r!Z/3E44h@f4eu(3#Rv]-^;.VF:.)ƍ0N˼h+bmY:jbx8lL^LJ>i@Hv6%fP"ohs'VHi]υ@XrDxÇ6à qCdaП uHH4D\!TP:P$j1<Μ5!5',}O_ b)s%B_&AHeā\㦇l(YBS1o>_^*4:3<ڎl!c Q6Fq Ԡv\EszA>ь^Oo\ *0;`=8QR6ޫ e/ʓMN۱6@"AM'M}*XbQoa uPm_iNmrqf,MouC:+<QFFr'ybi 0p@6"A@z!2Z-i:V(b`o@k!99t΅Cs֍շ }j(OZw摅6)sc]LW_hHgav?D9~gI3jLlvs{ vs"̔D [BfLgד[^NC˱RAZ!<@bi֢ [I2wʨtd5SJ,LK+ɲEP6/:L>h"3$]KQ1^u^!Aps"A,[Y%>Dl ïF)p{[20C<˩W@hY9v,2}V7{G{FT'x5SYsQ,dž<ؠIDP}oT2H(%Z$zz;R2Z-f) \i+^UD?`֭;75b~Q5%[}bhSjc8j&d%u8V\!S { .LvbL-t0ʑdS.3N-?;1n>̹7>h'j=s͚{5!=~ a¾w`_? j& ~&5Idq J4.g5~8%-Y2saZI2+af'Jn""(~Ҡ97ڏ;K *!}X4|LKjHWh*ִ): 4مasScoj ?yߓBW@9_MRi3<>Ӿ\Nݷ9Az5*bK<-p[آ""=Z}j'!--g-$2,m?TBF $p1t?߁\3V Y#)+n/Cio%dž>Hu?[KG~[YP(| 1d 𽫡98~6Vrp;rg# Ѣ#@b(CnhJzDE$ p$ pb r4崢Aհ0\UPF{ϡw~ˠ|<79deM4L|]!{Rh)Ϯޜ&4{HV+ ۓ1ԆP;`TZST+$$RsBV# *X iԦ37!:QR'x2(I+WyV<5ޤaX`0KS,)prz뾘ϟ42iJ)*MH;l%3/ pd |0J-jabiXyggw>ۄu ~vcd8rLYDry9}]ͨOjH;B8h~PS}<|shNh~^Wm=~) !@}t ,p?K1LJulJRp6ËW"X=,R h!Lcy Dga6Z-LfXCwvK*&QpWQPм@*؇{ۀ}y%p HіFJLDw."8943xR%Jʝ VԬ&b=]tfx)Q試"*䚃Ne.Aa#l b34 3+R!ifX0d[" 3TiDRVB!Hlj]W-T[MN>?iBBSZLb2 @AV(t\#AXt[J[v6/Fn̈́q3eM/(LYaI52S:pg?-š ؄ @% a޽GqJ!?6h](svvuq[+=(Z ( C44uq{K0A@|99Օ3_ &ˡ7UEFиHMGȄ-eKIȼ 1U41 KC-4E KHP&!P%1>)@ s7bO)IѼyh/?+|Ev!ϕ;r$MLF@8:3]t* 2`N} 'sz(,`y@+ŊhߌomT{h㭂!ׂbOoe8W bb) b 9A EɘPA0N3Ŧ ĽmR/9F㭇ǢaR hh&(i*J. = ]AG%!h)޵IL#aÁ^:"膦´)Y}{ P":ᯫ]i6 "t$@U1$Jf3BbSP@eLSId3SPD0)a&ET-@LCSA@PMULR#RHM̓T4TTITKMPRBE%2""0$/$-4"С3@\AQS4M1@TǴ"#- TBRґ$E) "Y yT$UJN8̩DϽ"u /?HTruS[NnS"7N}):purd^ytyy3go})͙F s :'3autK jJbY8pF@sr#8Gs6-ht* mhf`cMBH+' eY!dhV!R%.擘.F3NhR\ۜcؘM^F޺**(:q0T)9@GYt)`VXV W:-7 8s54Aru*mLWsH&ABA f" H%}n$xH`FJNؐ^Yv-JL5x99$?qIC VY#9X9PН`)%DB{4zN?c=ԓ<@v$N: l ]cIX.r ꗓ::09?,$߻h;`1\jNkP8`n:’8s`upRL8&ol&i 5oۓR<&מDž*ېfb(S !DdClC3|zǧ!)B,`,=ԓ̟ 䨇i('نS4ZAP<&Ȝꏀ㻄CJ~RIRUbv%Ae'Vie^\ O$œ~Nz޳vx!XȂ[*Z.G wbsǴx4 L ã\#E,[(~'?CLs&ytSnMJnjzCʆ*S];> I8z43DGܔDJpaiN&vd{Nd:ExGtOMx݆2|( ]𤱀$bza!G` u,R' F1CpJ@<ӺNN&Jd" F =N;'ջ3Bt 6gy9?Gʀ>J<؟P-CBdp1 8{(2}l :ńmk? (J 0!TQaPҧp”#Bǜ9\2@6fmc$O]*"_Ϝ6t׈9A/Gv\{Ir+ ɫGJpxgO~ X@#TٺV1&+@t8@u~RD1!!{a -)A^%)$""=07avp )a❺J9s<0~HgіS$)FH—}!=ώGkvŎ);TĒ=S]$~{scٲ{UWֆ͙l?fe 3gۚ(?s+\zJAT5rGu+@Q(ʕ[Ҡ)|˻y%l9=ٲkGd.,rd/U9H18x3@ N_" FMJ)qB=4S*')R#:ck}*{Z_-SVO,<䊰.mpwڵmm/ɱ*W3j)ӱF!:ٝM>;;ژ;]0uV4ku=-)o{UޠyLjzv\cءR}` QU˃cQj-Eso)YFid= ̞h˾yAv Zz*Ee;g)$}Wx %ǯC;q{~%$0?aX9Y H(i Qk\#w#Ex ?ИD#"!@i5Bp0]2c;л)❡hR/|o&:U]=P#y`i 0kџ8d$T!BjfL4# A4"2H^FC=DN j{ ε3!F :]hr,#R):u_5ghBHY;`#1h@[C\$#gM&WztyQ/v$7.D`h (*!kC1X{?\#7Aor1j}.tDd /QbQCU/V=Rk)O |ά*v# %G(#l*1T4-jl>@Dj> Mt"`B,bFanЉI(l7J_DjPاnNkH/QU1huVţ%+ zttmТ" ,:P6"'`Cƈ$ (7HjC #gI! jpCGT6o:&ՄTF q|F0B1Ca,t` YCpe|1N!RqXw\%z !Iv[9{-"2=pmK "IB$Ɲ)K!<*gwDѼ]^EnQ#]]owt =>go75:Ё߬~[=yGnLI?P`hºbyl,,Db)54Mο7Քs9aSuLC bfh5k7<4Fjk}(RqrهE x٫RhiWNwD5,8B 3-jPn 3̳U/&aǡ 2.O\Hl&p>EV MVU^9U =H ?Aa!DV *aPaR?; k`Z<>/\FL( c}&$ DBjfX=$J!3F$ovU抚K1-ZUkK  ٘ z&@VB/C-pf8`OMzP ! Θ) Qs4CPb#fR2^nO/;ؕ@!.ɕ&Byk0(xХjr5,@-Wg@IjO8c^m}tADhL͊NHp,ș#\l"6ec^W]N% I+zy|_uChVT|Ba `,~2-me\2 Ή yvD(j`-PzN5T?JEHg,D1#I]kSo.Rs Vb>Q'{18Q\N*"HTBQ/oHfq=]~h)S0kws=,Nk K+E*͍<>Z:DҧP۪[B6zKOuv.P6%`bd#^?.|O .]Z<4y&O3+-PK7e.C,qLu (H6b.|(H UuWLEjEТH:,u kHYk[1 ڧ_#Hd9Gx6]Z R%6'snneƳ:G21ɚ* Cȯi{?}f4{c]MH@D i"PNQd%cSVLnPy`b GUVD~$1 `5n6^^@tCzxfv{' d.E fїFcZpR9_T LYz7gm kfe}%/pH<MIJߣ'GzmA'D6H> W m%9{Q AC>} ,+{~hlTxxDbz q[Ҫ63z<#9FEh,L L#EbԊ =4c}H˝R"yw9MsӍrƿdzZ"ԉmHy:F'T hNH X);"-s:-73[X/ "#ˡM&¼aG J>)GZA\Lȥ v,ȱ_HdCѡ|wsl-;Fxސ/1j:DQ}cI+?y{?\H, 1dҫ` `\ֿ}0yK"R$h@2@(y{pb=r.,USEs\.E5>>eeN;JLDҔ%D @pC\ЗFK  np1Aʚx'!J!S{U1V]Бx&d0wyas޸7z>ԁU@H]3,R`2 X=x@߲C> rʀM@d2C-;ZMMj* ccawpA#utv.fó㉓v"亶#T 0 (0h2H  a0E8@4jťr$͋(S@"a$Gȟ$~(P\?kĬ.61pېW[Rfnfjp Z@QE0xQ[am@h;4³eZ̸0ɢP%ypEQDTEEKjre"%J)Ģ(e ]& :&XRbWs"-)RZn0@J$ơF" l DVԌrMǜ :nT ŽWW & (k\AT#Eؒ5@ byf x'K \ѢCv/8}8Ev}:e1yt&Z:+1ƍb̘eE RF` .9MO-4%:`½oWOI٩KI5Kf@'b`f0h v&@BW昣pQS*R!L#0H@.=O lcNLkL0 Ʊ!vnbᴀDtC(@'NlSԹKKxd&I:PY7YvHj¡ٳYCfvriS[Xt܉ :z 0E|G҂<==lns!]p'LHISaJwDPTDQR$E5CrDhe&cF @({K7KRQ~pi!)H|?/?lto:Ί(I${-U,>,x5 xN?IPLM٘ P)|(c?;+ba`y?`hm w~xN%ca:ۥnsH jj@&0ˀ:yUS7CxiR ZD)(DHycᡩ`5bgNȓ(PE=\@|t2OFM<4pqLɛ9RÊ0:a`#ahKD!bCp:L0ÀXet$(9xc׊d$턶Pd;w3S'=4@hV $vbE]f$Bd EĎ9a-PK89q? =ۿ|f 3JϞ7=Z?4h|aGnSJV<40 y뛶2TQTjԢMS0.arϩl>Ɲ%O=hm Q222憦Zq1\1"66j9V1e[aATJˉ̵Q.Q ifnL6YLAq̅DqiX,G" ! R}b=P%Pg ~tNp7 "هg袊6BPŮ)vRehz"A]%@WmIb|3J̼`)AcA!+ bro^r~v&B  @`3{ j&lhŊ>tqDFO:l` ^$ .2 :RFL>=F6X̜ǯb$Mfjo}ǂud;0Cgy6 Q9Re `Vo/NHjOxɬ+׽ElyZ0̉n+GFS1'-e,:L@XI R]6S$n-%.8h\,C-Jhy>7$/70k|B Y6/2m;ա#eO$CG }< RVKMBd+r)M U]BW!5": CBh D)G%rP@ҁJJRDjDJS$B(Sa`AhCR H B(E5+B&IPY އh)C( "R dD*JA G$G!|#"Jo"(WP%(9 ( VKd 9-(B@.CB@!&@ [x;e5gs+C">42TO| ֨(ImZjL`mWFkbF jT5.;0E &pZeXkT荤܇Rj| 74:Ho4MK (i;` R^=0H؇˘karCUx2u t%*$! QxS:l2&-G)*)80C ) ] ")k*F3y:ICAByglxuC;)4dFL!1 Yǫ5;IH Hgi.΢̾5;V2+ͩY>T:P%DA҂j&DCR˪k zX#>B_XL!gdc Ћ@@pLEPB d.Fɖϡe-`Szkh;{ϫV}N%PI"1*<((;:/&g$E<,Ib0պMM$ 24Td^X 5U64ai`7d1'$;R) *,(PQ "ehmLE)Czi[:$ &GBLcN:^'Z(A QoV^u(DEx<}hX.3SeRƊ#kzeԖ )h6e;xh<"`3,hg M7uΚ;S٣-<ʔYUD* DC h%hw1Ґ8 YArXrIpfMTiT$P-L\cQ,Pdm2[ O# *Nmg!n4R>iP6K0 [BeZ3̊*$Ń3QeL KYVcb5`.\\70ӌ2p]4j)l\\YBMC JɖQ!PQ"pPd hqEpY*`yRfjy\1G̉XV-g=2遙0am`6M^S3E2`32 7p.5.˅L#-hQ,:hu+|T֊6f8Qr n40.Xl{$p¡GrPi1!"45rMi#0+-ʖ72 8[EV(TTD]")̘S3 ZY d]MQ6Qhr,(ELKΩ57cc ێm-m[EXƶuKSqvhʗ)e/w]' 1F+B7%e [,U())kKrQVc\wf/)VV5*etѴ+HHX 6eIU0Ra _Y\(wveo$=q3YPFr&m2"8JR`Ĕdf8[#K.U+L*RʆSLf!;1tJ$ƦnoD?6ahkb]$s۟q}~^M%Eɳ5h5[%Ivֲ,Wꂕ2Z2D0,IPC)$B" JΏ5^Гd0ʭ$פȆVȣ e+m/5(.# cR`ԣEclTVV??Ue{g0I/gKM6`(e̮% z`XYY%̀(CHPPG >%/є$J4(Z) "UhAS \Rh0$R(!Sh@2i ԭ &Y0&B B)b[ H>/4/$hZH1( rAr}kގQѮICDi -a FјZڢ&lW^E8݂h1O%1)L0X}hvOPsK 8/bo1RrPCXJ[*g HIJt=bC"ieH "%~̘.#QKDDD`EՙfU+$.HwDge]UG~ZY*L(@'yb͌ l깈.hB?`^D3?ġ30! $LD?YM*&KS4Ne`}=7T #Yִ̐0mbɆeBcEj|h=}灓8IƬ毛M+,r!@|!@ eN-hvlγk4#D>9qhX`m ޼͝4+`/#pSПP04abqDϙa̓d%7-NyM:f>)l(3s &h`t&?zgT* b) $hS\rpp䩱dIA U )P|3짤(OErJXmV iX,sV(72 Q BB/Y!H;.<>.xa\<'=7wȻ`k+1@@$)B]9 5I{kH""xc yaFk(f5Pg,Qbܰ3Ӏa@Þ8/;C3PPd1rX8$NX@4L芜|<iqz"`aEډA47b͍ph p!@Eܭev& :0>4,ujtbEancc4T(Jت4ZJ\JbeI-zmgEsGQ8B ۗwpUKJ$=H$SF@CN4Ty.Lcm6*N:8fja(z[pTv2#n pӷɵJ8'LZ.׬ЧI[a*nB\f,&tI (U^c3z¾>80gHۛt'NC CNdBd$H>')=Wx4B򸱑ɅfvW o:_X&d`?+cdܜ99N~pl|Gix:gH5Z@ 4ii$$:}q?CvYnamV23r*H$ >?iv8>%n+D3ab4?ARծ/TvH~Y?b/E ZY2r^Cpv5Q%)bq;SK6 v48@z|KndbVl#(ʢ8lfb("PbB!RV>ca?ϗτĕ?k+8c$S!p2@r!;M@(EU$hwg8- P0B~O Hү$Rx'.b9{&uR41)a"RʎT GTIm,BD8pbb%2rְ ZeDLݹA jd6)#iU%1%PN7_8K HB6R+D CP2@j}~/Zī`mpܟ#W6&o/Q"n WDݺI>VO/`hh**&H>!pNj_B>'RąSQ$T!JSE) wP|KPnR P0E!RD0IR E!+2QD+M P@hҚ5JZ(i(m:(Hh ѷ ?U9&2P#&QWOW{`#bB2BllHH:N#(*28&}*B/NEOd'kuF!b}sII׆ACHC7O|g  :(. vM@R` ((( Dh@|?Ҕq Ga°,14̈́*G"kL9[)1D a;9LC#Oyr+M#Xu᷄Ia̖P?Ӏ'|]M (DNž=!T:-  T@%8 hnCgۨI+sZ'Mr8&GO(PXs\џOfQhRC) -Ul_$(`*!()] B< AQM44 #@ĭ !YՉpu?~{j*iL_>.+K@HFM+=}&ʕYG2ҠnvgLc0&T^S+*6!7!5@)+V"`%gI:O:K! qO_| (ECob+E !3!Fg0<2DQ A!,U,Q HRALR ЪP@4еDK0$JPDE=}^pTak1Pyn㑛 9)Rkp0sM`'2*&ADRQUFJ*""1m& SrfJqliБ׬ AJVD)u"d@)i/BH/=8`Ȅhq04LՔE TEs' hSڠ CBk1JJ~~ xs?zj_b >1;tB ` =@{8x~1~oy" V1-JTe̸%AE$+[FV- R(0ݱ"aF$(PFH$dVE-emk"-[R?ES. m ʶEffMP$D3DPRDA%2DI>$MO$ ,SKAO>w:] wA3(pg;pxc&$\21rJJM*HXEtٖR6v56]7>߶0zZ _׃=igUak543'ZU\N9'ڒ $ҍ Ġ LiT>lYwQsqb?XDBhtH/?WKKVʶl;ɂ"/;6HA9/ /2p}X=eߢ %cWuьTڟƈf}lc0ZcB)̛*ﺔQ"Z6B@#^ hlUKnm OUgt绨$}O: XkT7|hsKHmϵ =H4Q`,\J8Te&'hBӌLfwQ(h,8Ҋ#hq vCD^R!8 Φ=2z$u/+u1QBw㞧2kJD(aU`e{,A'8 )|P&P:  BBS1jڞ1Sеu xe*k32^m[dP~^؅:qG7~c-iVNirC]W EYhN0w Ibr02Z7 =^aM>V)}10-," hJ&&J²0\BJhȖra`6[fr&EHe`̸b"DH&9Bg.ÔJd,ePVUY&4LU0Q䁂V`RdZëxgu9 .h1TʕƢ?Wsv8e K4ac_w#xKI^ZXk@0 UEP_ł/ u ?鷜~ຸzO˄fAcd,تG=G9+h΋K7JRMrQBpS:n{rŔ΄/bWq+2f=+wԾ'sw] r4I%-_$Wj zvXtr\s;U@`e`4`0P0pm5_>ws.}0G DA/`k;t0:ېqdLe-S9&0)YKu0O.8j4(3sYG%D)S?k}MaU`e)jRG^ˆd}4/.LgZ,b{_j&ZKщX0 !b%k?c T7%)HA 7O㿇.0[.QJH廔=^7sa |YIi 4{_Ae+X)ܾέ^d9̟/8t F!-Ml_ 6u(kP( |" !yѩ[ D0Ns%txUG:`FkoR=|w||y`@0lM s?n ,Q ,ao'YeW?י f!) Ej"$ $b}_@T9I3D BE(PK$IP}?s$EG2 ]cK?m^tӒ@ 1b>G{\0$tH yP{7z%hB$BpR&`H⽴"B_le^ז٠xۮQ1H*O :"`8#߼W1?2U*7K\aqr4tv_RUa<c ~л{ƭp :?Xx/L_<.;|)jy4\M/VE͍D7{5S\7IpDQ B uq V>sh4/SXag "ꪔ*d1 e Q'hDpeܴ8Id,,`y{`u9Fl^]8r]ބ9 2teאy!ɧ5w8y6 У&$t[K131#B[HcU+2x0Eo,ԿCSSem̫r q|ii݆J)@0cy˥ԜMAIogs*G0a8 \YDICCl)ݘQzk$: K^^0QH>`W $ʋ0|*0Q/4"'7uc<=vaR@BkO?5tb/Hup$&x\͂%BlBr.Նe65VT BV9kwև-OIiS:/|lXwl,)\X&_3YΚawt¹翆`(N[SM3vLѿPŤ; lnmq|րW"!̧Jcqhwz_MO;׃BIY9DSEuˉq[f1#ƺu9B@fnE ,*ܕM285r 㜸 Š s EDQ]5Cr*+.,$`  ʌՆ p TEJN >sLƋGYh:/1*%4!$(sdBd|tA RT ߉B 1ɂ(zOQI/A>:K,_]pQ-עz|3 tgq-;-kYYJwZT'@r-;ˉM /@@?8`3 e`Ԯfpjg]510QshSVfG"N'/9qr6<ȵQHYa7ד[F^*G;!!=ȉQ? X Ӊ2d9Z7u-* _[]/,1Aya@>L}znS^~?\5=^ԙ311J(lBQկBov "]v Ѓmc Q@óD }R h? X,ԦNW$f:K.JI<;dc X4$!u j R%V\|ZB #V(FU+fz؅|Q o\pF{A&F?Ku;G8_jlmP{;x/6(1&\?89Ubv0`o [JRD (w0PH@̟ g;`Q(;CL4#G+c3@8y'ݒ3P0|i Xr!Bt@yÄK?C!Ҽ?NJ'\&py2VXn .`'r·Zգ(}eOIz^:`ҴIa]=0{ WpwLKrC0~9TyFyWlB{jV[AQ:ii6eSbHPP%C#K0}ƒ1? 6xgi_9Nx~-Hczڢʿo^uoKR{K{|Soz{u&ym^?aC9]l| ц;5f^×y쫚ͧ,g)7 gZJ&׬?rY<51O DXxMu7s ҵ|qZ-YT_C@?=בcBQkg}d}q*G>@~_}=_Zd]?"5r)%&P_[ 8OND+b}Tv8h-V-Z4mV:$md:xtA`ŞdY!To5<ו=`Q=JfJ dkK~! >"=US5 vK%R1E _ PXZ)ؐ>쌯\#\RJ}lhj"4=oeqC4@広06E'r*pb(M9VG?}Dvp"ަhG8^Ͻ=УuR^JEH|_H7@GAGJWw$E]#<\MSiYS뛊N##[Q`fo[*)>y<A39pJ&λY_‴㹯4nъq3F"7Zlwz @7pR|'!vl7'(3_AW}2hOHAYd\KGX3ojF7sSq=v':sh4ƛuDg~M I|rT <$~_[\ 'zAjۓ=ӽ\E0T cH³@  %HȦso_wS3G},|6 Cb2[UdwnJ\Y>S*LGcTe2 h@d0p Se 31K %QI)IP{q~_K @$GjtoҤ̯pfaz0klK {tIxe@WP EK-4:> Wα%eNK@:}s{0^K^i仪`:}Kz8/]ueUޫ1/eX7߸j:B87Ƭi#p>ܸ&G{U -'Uўο65˿关+lvlK>dCW3g& Tw.#ʇ|yl$N+l}XϨx p+(Li ejv6ZYkS-j"ȾJr 8 ֬4GXaEZI#,p;:W75(ښŊ0 "dN_)|"FO:côI=_ͶYJ5'URt[uI#M%~?Wm<^/G?Il~3o? ӎϨ 'ުt*eLI 3dy~v?_R4E6@¬0WnBTn;DAgߝg dzy^q{@_@dN~8 =ӎؚ¾!sxXѷatutĻVˇ->PzkE~,HV Zvi^`狋_m;eԓ6%&UŞ4BOj38w3ej~zfMs*8hP#AVg[Loy2ގF+/'("GgoJȩx{w#EDJWMO2qf7+\D}SPLΣYzoguٝ4n](rDBWWcVe?PI/RE1ϋi=:"7q(;+]D\&k -Kh{%R0{Uy"Rc|d1| Ѿ܅0T%rvڇ΋ VJ^jj. qjx,+r|PΆ>]&&a |hM%$#ma!'\?'C>\Z4]4@ m jcI7!Ĩ:B.t<ݙ:qyMeA+ÞE0W3Va.v=w?mIxXٺ2JnVHLu3u<֒AA܏'&mhۣhY]58_]Av(+_ntLIecIQgk zJڇr -g6xuk@u݄3}a1Ӄ7d+Aʩ9Fe O!3 @I}OpϫG!\>z ;紜@E7+V( i j@Iٖ˚[!exj-xpV?Qd=<:ִ/5򍗨D,VgYK53W`Cz?CZkڭSYoq"ƛ9egQBrJAgj仳a~L]K/й67)ݻk~M_g #gjjv}H_MRI6f73F-f>`[ӵugia] HV+&a{daZR/6C")w"-ձ,X)=Y,'-;fQ@=(T{bO| j#]G{t[A@a2 hӟdu?Wיb#QOne,YpUk#(&[::U(" \UPRx:\@pwk=#J7O{챕 fi)Znzore 3t-qΜF,!S e(fbVQq;D^ Dq8 '/vP WL>e3}kTήGrpܽ⟲<ŸYs/1Mg(x ,?V5^B|OLv o5(Kht߁:-8׍~-qzV)H2Ly̪b:އ}›ƨ;|3 XEa-)pJF5!xu`S> 5 l ~tuW֮o_*ZZ'R <2ϒL>'Mf|I ˌCU!"ÑwyQtQ#$ M`$S1j_ u ?0 kEOaEi4"\ ,Vd}3M ~Z oa-;y+ͻ)~ u9³>G<5` JcO5:ijޯ+rUoZU;hxΠp=Epy)+h7~r?<\ r}Ārc[{!5P]v8(XS0I:]b^:hyH ^씥 -!춧U) VSqG}lEɞwms]I+Gv(zԾ},8GjȼR ύ^q"ZO)4j i_~9𻛺 MA4,ڸ9^<f\UU(Fg+tis%WV2DRPTښFj`VD&U}L/Ģozě_x} yzWԞ/8@@{U4MboO Ax"7*ڑf{q$a5ZG\rq2[T@6:P+PelzFq Z>Og=kfboMf3tx-9=H_eך_GJI,?!72E/ݾTbtGCbwcL:V] jӿ12f{\uRËڐeٻf8{ ~{LgYmQTeM|‘]9WsE10A:7=\nZ7MѤzzź$bȊ%`@Xmy{PDO3K+H2nXу!/>c*L!KUb: WȝRJWˀ[Birdbv Fn%T#,1:#2F "WC(Upӡ؛k%W W!i9[>cprtڝ_ֆxI~B= )&u4›7@fH{W(=f|e%v=},'}Fu}RhnvSZ)iTcsNt q<oqܤͿ=IDﲲpfI&SCok9`y~2h u2ne[ G.jߏ$qGđkLmb<8vlV57|A`0akz -@0T?7aCH9*7-GB {`uadm|'7t3e=3V2_oXmf@- p\o.WO 0߬8`@hܼ}|g4`Qe8|nqel h7^d.!UYݭpxIvx q<)1f4ryPv>nIF,SKws0qr^;m&ed@pb`!ƹ.j| y 濒xO ;/04/d_$ x-0ըЯoUʆAml$K<>p $ń?M0T{ pqdFe 0@|1#aBy~c~SʧRBczo򜑱Y~D'S#ȐV^ D{F]u)oLb)$Rw&쿿b^CȅZ ~W|Sn"w٩e)ٓ>T3v*%f!5p] VJUTb g dPQ.]GUh>tNY̱U|ˆ_L ǿq&L1\#竎ʒ:8E\rE5eeWo(YrӮb@^'K~,SvRȹwdx$xoZ-OeΘHk](%˖SJ54Ni R%s;(<G! x$',Vr˷a_09!.$ܒK-gkZ~zN~uNwM¢1X{ڗ"FփM})$B/b@9O,]&8$ķf֔MH~/L^&J3;I:n!w7?c`e;(pP}vRt:' Ȉ3( a#|k (6 K檢t0(qzٌOՔ$2F盌E(Ď^Sos< u oLك(e+`l1"I~]Ƴ:&Y7U6TЧsU/֧;sn8rR'j I|G w$Sp:=&[S}ݴ9TzĞIVM2JMm[ )ӭpM묧MiWn]\},RD^S_X7y 6 L7/ t$Z=JMu/+̧*x&ؐp&ƉH'mg6TeyL^xrECqCYvsH+6L=Hp.GRAΊ_̿Djۢ|݁Ǖ=!LQ4nveҺ[ "Zчw^[Y }%Q♘(NE:;4"t(HV~3 6iSEL!kQ5Ej>Oo]S3H}ݽvU|QZߗEZ҃}hۿU(i{-Pc]imm۱w{y73.S\"; ŌΏuU?ѧ+AjžYCkm# Ǩo _Bp+?u2 zb(rX`z~C_%%ﶄ{M膯.R w :*_4аbҴ; ,de@4bHpll~RB'Kpw~**81yN&Fگ*$o9G xΔ#v'R's`D@cQX߲ۑ"*T|p>$('_<G>3~Ygy? u~AC.j[+qv(_E6~%P=37æ4^|硅c Ӟ/ڇ,ν[;و0.k 7`W G~eLZxuu7`ȻK.y%v{-:.[Ӹ.Y3};bǹ(ϽỤQ ^bxLWƷS]@5&h g9KS7stD(7:Xn5 V3|NJ;$qjaݽݑwz'# |?`ɑb-j)5@:yg0uAO%0]z|(E?Vy-ҦjU'-eڒL@WGE>d^eW˚\WO©`kDޭ0T\?^'oþsPctS&j>=f`Bra[egzIO79ڢ/n{&W4 ?T;5'[3U'ixJ\myQor,Nj1Vg ޝVC!xH;c{9b$9;#IcJZ~Dw Mɣ!r>!24IPD 8./3ъ+9]4bHxuDa$r%\:>:%XUROIBg>T~U.ㄊK!Y6)Oŷ_cfZ7Ƭ'!/Dl/H EղOm4)sUMd]);,k|9gǢhluᰤ^{7ń.VKsZZGcT9z?f ? ? 7HCrume'r?p4o|O:VeB0'}x2kB9deU|/wѣ)6%?z}ɗqiܷAhT@YXOE4q'}x{vZ>?pFYE $Ԫ&rLUfi4Y1>I_D3|y)SqEӛhe!CnIډO/^j倷缀Aokgǧ)|ҟcs'ֻ*m6BeB9f.c&WCnj@OMMqFJ :ߓĬgQaz ?#1&Q+QpxlؘI],Rmih rӍg~Rnq>ϝ_:a\ ]|$F'4 Tp;>ȯI&;[h"W#')oPN|d?o;e>Gsf;F 03ALxB 1pp!!m-VdcD P\WW),r/OoΰfHV:(0{[-%I%^؛=w!oc{,ػ:I3yRL$C2'SAOU[ۜʭ봇a- ܃6yȱ>sImjewK{WE{b`atǩc4iC؛K$7zmN[t @c{&B7sTGE6Aہ> ڴ RZM}|76ƛckڃ .3t4L=xL-{f"ןWbwJ+΋ķCX(D$B?.>cBSWvqSG(Gkѵlm(fMu.]+0_B`0T>-9IzbV@U{"#t^rh T47c4q.H}ɍcNthvP#ÿ4aN*`}rM%l_-N'&Je"! +D /lƅC\Pd37J|bX>98PF'+`cljR#3dv /+&e]=bg (v= V "[2~0B]y7Rh0B&8>ci{,n' ؤƤŚ3WUXdD93 o~?gh3­g*y`(Hvk׊qVit<_޴A{‹gO`Xݜ Ѓ=6Kg]H))E~CtbJQ-os'O[RؒFi#n Kҡ1 }wEx.GUuMF+sod^? MW:Dz zfSH2D r򖟟nH Uc">Y)L23W=d `:Gg nptDu{ǟ{ *89ʁa-9H2j7vSX:wl?ZE\"{ "^˩iz^{vEw@ʂ؟iJ\]JDDuBxw,uy.Bp'E3]x8FPl榠8t;ZӋĜkLnO95%b4>;'ưԙ|:KŜJbI.55L{&jy i:dO=ڋ]+!Ԡd|%qNUP؈/eB_rPH Uc,)yl QmG t˽6YpR99( Q8Y֗4\iC3PxƔkW`Bj<27<^Ǿ8X%W2LD<;Z7bLx_:X;%ԬKlk X#y(Bj6]*B !R~cZLW~c _:RYs<-tXB6 U^7a߲XfkJm/l|cЈ:ܚhP9't4j~o/s~{0X^a< Q@CY>gVZ;v|v0m.<''}pFҞFg+Gy?~"R_G!B NmZaﳫhɨ7$J0ݭ/Qʇ?j8RS~Kc +} ϬEUb3Dg9}Ў aX xprc?ܷwI"R%>,B :mtϗ챣e}g<+*5?p|.k|9Q#;LGrלʔWQ0:4ڹƖ}.:Z?QNTh$j_~FXS±OM)@+6Ʀ m~D)X/1;J'bz7/h6.MN`Sz^amm\>nKǜSaC-'U3@u%ݍͪ@\fbZ?R* :B.ZPCLecdz\;=JyoaCaj/ʬ,{s& qfO#=I+ܟ #4 G7XMFv\dn Vl"$X]' lсG& v1غYz*7ؔewRjPw.z(z+|ʃ~4'7VߊtB5rP")JiESٺ6N {Oa&K!8BE9#r^,̀2艾[ ʂ{t7VL޸G5JU y>ǾKgnePsBq?8!0v5 g^|dNFjN@lX8V`_@x,j$&Wd:_JYܔC8^"C8k5ܚݼj0Vo,=wXO{Z[m:[eGGNmO޵!/\N,N>oR ds3?hjJx^BNd utt?Zun?3‚^}~Vs1YP_ي`&o%X-_7ѠϽ}]\ ږ]|Vi S&W+!x^MGO_.ԯyT_*r3'!`|D nJr&eKY8k v$qk$%TzٞM#k@3L$&߱uY -fU-K֣7>1IYVmn1G&3*}dӜiOk! n!h'\LCV Gwc);޻즔QD=V'3Yo AҬAf8] '*[Nx%;%2eϿEBt)>!b/ |jdi;R*ZR/?ga=x-fnx#<ܨtyOLZ},?7̉Ml({(f| oϘvS $S]B9"DkzőXG&ρ3v'>rZ 6N1*=Vml+M(X޺_''hL+%. H!-R8Wg!J(mwcp*7E?sM҃lv*&M|x(nB[>Nw"Fd~mݮ`q/ݑ}%iG޷erBM+UF0[EWI,Ȑ"tw_| mqVAr:+V=IV(4.Ncшݖ O}!,_LN5(C3Wb^XmEԲxnSefh9 qR@Ooeд{A l@?zR|P_ԭB33X39[]3 v?TT}ӂSL{2gfe^1CbLscCjk}?rSJ"-t6#$0?0O4 l=jvq1Wj<ۡc-HNg:%!7\ۭBG`\" (vi I&!Ք GʆqLL@FxҼ9o~+P=#˻K|Xvʖ:,ǸK`. Ru*Nς6KT@ҽSc pU^fV]Xf/32xʺ :#U;٨=}8ƨXtsl²$w9 8.C#z[TM'P>Ԕk5a}B<8|iqbR[|N}2Db*mnh'BXV^m, E2$w΋Gn}1H7s69׼|ͲyVƻaD )2F{9\rFqzop Ih:Api3<*|;#(xqu *櫶\BȈ̋ȴ6B=ULp31 ԃi`aӱ9sfJu<Ժl+fKd212  wut.1 oOTH=*'88sO¦hȟ<WT چߙǿ(*+حL佒$S|2q4!_' grܯ *wv*9U_&‰.$ǣ#Wͺ>*qϩbTO[ K:ixv>#N(@z̝u$T0d(qGr|O^%'898͖j9=/VEȩ[qId_MV@NU ̿ΰj<0X3Ou0(M>CZH>-LLaM"u$]T:Z'0մ뾷=c<Lihrѐ9 Qyejb|g?,Ӫ.w-#a9(t0̱n Unr %{"/@ k ^8RZ E Ahz*Hnz% أj6I l;yeO[4^k,iVD0f7Zxy\y;T`mih\ILY o+i)Vkk4܎n)<1Ώw̎kn; 䟱QY|S< "|2-=P9aY[ߓ!c;7k5Toy)BXK%|˖5%#gN x4.:4%=cMD-jujzK[= BS`p[ -zddaeUl3iccڼdJ"Wt˄\PQ_gf3ǐS/E! =Kq?c;&Z"-NG%ΌV(F_mBH%T\!Di)Q03D(wv&?;imՀXq>q0n{Qw=ЌW|ŅyURpPGޙ3t5\$'c)шZ+ W̏Bi s<9Wno-W<T5GVBls󿘾d׻ȼOOLkwBBEw;# G7[;=oKcG#}5)Yjܢ$5Z>3M `t*^O=Ρ[Pt[Րވ[)$n꫏ӖrdxEM}k6A(  ާ$"Wz=CwY9pվ#6I3;߉XM(@#wSSHAR| YM?#KuO]+0;& n=nu¥<ĤhMi~wc+v1ۮ/x[j?~;ޗ.2,2b-? \\n)hp,{@C,}#+$giE6:f$r\+u__[>|0R"Qyg"r"8 l&~Oa ~Qȿ[ٓj!!Jʊ)OzSom"-o\"t.yo͟wto/6f˃1;2z/†#I1Y2aXmԕ}w )sܵdo = NqJyݨ,2s@Y"B/7k1cR6~$dc)D`aM+W'UGdGhdI?jt%%ـ,ԭkOBm$ NmPe?3 R x9 7{r:E~nWZؑ} kzxD}~3 *O]n tO;smLYF+zDŽqF>ok +AOGd2O0eg e|*YyY۩3\{V~R<Ӵ3=Uϟ 3oyES,l[ޑS Db۾(N! ׽g8qȨvI$ 9 ǝkBܩϿ's.?| LަWm I6"YTq8 #? tWj=#jw=~)V?ts\8eXg0{9 t:;vMsWվ1x %)a2Pϧ WSa0^8|P>~ojPp皯Qݓjq~rLs?9#\z@q%,E"U! h,QJdt4w2|6:ŚV(g54#!^v%v|SD(/"n О*CR1@ibFlRݞ\ߢIJ?퉃\ML$kmm' #Boh.դ6r7ΆB$bdv`\2N,092ԅ-2aL순.S$0i_@B-P=(jDx_3{&?{{xGYCEd.vyuEuܢTaY%~ZαiAۣDt.DJ,ņ3g5 bMUdza%j*h6 Yu_+!AcʥIA. $|,|kMaWT.lg.B#)ĀApG >ߐL/v, !QN\/p):rGy@ Uᨉض*+K]xbp\.:\])x1'.0Y<="#?/"$Iqw(H^548wX,g^',4 a`u`fE``Bj{x&J" ×z,'@f? Q3RFie/|i8?ߪGMcly!`9'{%|`'(M ȭh=R ~PݏMh<@Zpv)P)W62,bM{Ъ[z,YehAOzr>L7ڶIwb0pp7u2w.+GC1#D5&`Az_9!%g\yzg<daPεH,Jp__y# 6 beUFW;n>8g:m9R=pG6׋듞}`=lp@ 8-9EǤ\$C`E?7t~i*|Tn{DZ? VXEӒ9tҟlu4 cPp X+Ӿp_Tѹay'w͔$U<8+-)TAX+ڧ6ŏFm ǕKr=jq ¾ GcB  񟌰3* &t/fIU}pj|!M>cAhqg\5.tC%jlZ7"Fkx?\G7S)PǬ b?WM6Bt^.t;jKd߀Ґ)lMF&3 NO^ʙ^م章)7Ʊ0iB/<qKmO^~r($#ϯTD'z&S- R a]?@v11~4kQ8uu\-MC[1KLٱ_ >vz²lCfbPN3XyQbwA.Y=+yəCirkDI40|`ߔa)" L|vwf2;féS³|cHCQ;d:ve݆Wm /?PZP}S˫tJzosvن#*J۰:8[<ʽ Aa"ZtK}b7ovolLWctG hh>("4z ].Mwf}\j?G#pXvt1-o؄.qW' D@.ng[JP;4oZ$gR\] ce4vH%PrltTZr *.^N2%wm[CtȿKL',/S h]ӄI-yYTL2DP/i;E7A,΄zXN)ղb E[o3#$vwbV{ISt[ Zt#o <޵ h(xqBuD3ڻJ7wszY7WZDҧf5 g-3M6bVnlJsJdgkGuew^q0B%\(EZ] - H*t^JZÏE}ڦ<nZbPhp $:c "t0j Ϊx6#Ly˜F-di6!́e#"eު.ay4~=&@lQs#E-;_ۺ̕ ib=hÄNS(~x,4/h"s'$Ml]"/PhzIi=qvg-T/4KW/ ]O5fٛ/oӟ8fV\Ѡj.t7=8&5cY9ʼnoGRٿ޶U6m۶5iLhXu?οƾ`l~7s}z\AH섓]RP@Rv\"wTڰMyJq\*/qi^} ECD:3 y Ǣsܞ? cT%TG j3GǮu_ C[njxg *փva].9qw X3D[9(<,:x;S V2O0sVJ{l!etz3$N"G:6>7K9B}Hkf0G eWl~lnd'v&&>#Z%"S>c= S8;D6O;sz^L?}cJ'Yq̈́7j^=nqs3rK™\xb];ǢILՠF²㊲'Sڲ@sHY r8co?x7ݵ5ny̴T#=̔Pl>㡂9J0ARkrZi+0G5xu{7!Wӣ9QjKCwu<.iȘ ^wl׭;vG\ wBEzhYEy?%|O n<ƏKҥ;d+ smSnʵEt8ۘ(j<6m=T? x ?H<(iCSA4>[9ɪ<}g1acs~5e1WL>w>BFMIIdB?tĒJP١LNF7&b$Xm.7>b֑ylFM7h:'s }j+zRR_?0t#U~A˳6Ww^?!9:--ߗ~)/<ΙpGsӌ(Wt-HBlABȿO睨w+̖0J"iJ35QU} q\A) x[\VATT^ W_y މYPg6ԶR@$2B`;$K]X 0GtO۩|A5DjȒ"{!.Rd_M! %yZ;PW3xZ4`%ypj3D$phfYB Vd"6P&p͓V~![S+ 5QT}D@⡅%^D$T:IvoaP_yWD>A՛E\XbR[uMx]9vR$en݄:&iQ B]KꝩIZ~~ZID2nݤgm|NKV$ `9nr)g~npOOب~5KKByf %:\p}ק+7 61uz|6J=CjS>}w_kYי 75_n᰹W-"D,DAA;O!n D8 OƯ߱ Ghv ]$yCq&6~QO|^G|8E&!_w6$ `ڑ#޲+umJ`.DwBh` _,+LYD7Q?0퇶 沞7ˢH;*vZeճZ_/#V-N'ȣrG^Bp)ďXF8%dW|6a jOMJny}=NFiDtjSIVmDРlJ.N{ Stw,ȓeIzEܧ!$zh/`@'ngDhs`T3?9tOɡKH?idJp :YʓXC@t/6.j}E.9f\8E gVW+o$ed3."\wie1/)'*^{`{T[7O)C&/F:P4ob`b. 3n}^jyTs?7+إl#YY~+_H;ug1"*-TXeftǧ9?O $9~MͿdDvz8u'$f -%yG "e? ;2nIimomhSt/9hl'o]&WTkK-5 VN%uH,˄66rݺ5 fW@ t]qV2Fa`!|m0^ ̉B{ fM=azS')]#NYUl4 BskvPы:Wk~V"N^=2IGOWㇲY\uS;t) bRS,#B\<0YB/aY9{Q$H Xڼ/,si[IZDϡLLTj _dD~~S޼BAer'>uҗZ+?^ѥbA^es|C8jSY~]rM R{u Byz*Ǫq5ָu ʟXoubեR`9@k;z|2eO7"@v˴iAJ2?Abr֜Pׅsp'-3 &TAp'yTDQnUNYsi3uWj@-ţL<4 r)ڨsߕTU]ro g~C`OHw`,E%z \ѱ>/Õs] @x9ǒ;KϋY a#. = K S@.1b!Of[azNedΊ81ΝyZՑB;r#n}.C.w+7qaE㶣6_hPMt*XȏJYouyі"#^j:3DR8g.=C߭Xy}Y$UCaO?==Y6!E B&D~PtPDʏHepqUq%v:D_gs$lDl*0gWh_E轮\0@L;_Н\f߷ j1<ڸم!.uR:6L5x14W&~'ڡ&]҇3*Xn~sdtj-IiO]H$s@WLWRz 9Vfghsz ,=g܃QYzy`GOgvf^@/RsԊaI]Gbt{FtWH^sCՙ{ўΩ`3XzIu-#B ]$ {oLFWs.O{75s/7?BNuQ#v}]ٵ}4:9SDNCG:ģN9i?a;#W>z]H6bo2jՏFNVY2{T=h3@s3.͠0{> k -묫n@y$EKt/lCצ:.R.62ry%&'ghzKQ4HjW`BWmr$3^g:K8Z#hzb[nK"t!\ ,.Pzdz\~aLYSfvZPx3U Mb _LI?{\tO}t(C_N/KTd%H7x fiWE~g擖2#fRb/:z϶hho6f;pHbY3u֠ 4`H7(hz( CFZIN,pNzUVwvUܸg|PD(ϧ.wUkj:l{Ӌ![c:AdzQZiP,Q#/ i> 5X`@Y@B5u܂7Zo ^Dj45-uqR `6y a^&4Y,0lP(;~!$}Kb;週!Z6Bw?y-TW:qVb}Li@p56~sOq=&)~UU@N HԲwB&"UO{ sJ,ш^.CyoYh.X4Fʹ _y"*8g s987o6E|&D@|N:%}-~T|_WĂCcBn?r_n ?&l*ZλC5Tzh䳩=h ߔ8MT|.<2 .8/G]~[Tv< Vjӱ#ڨ6c;d'+;iz OAn{'caBCjLxq48*n/'h % yw!(gn9|Qw`f{摂frg.nL kN/G!g} 7@`Dla&j ް$sUSˆs^^݊1~x9 CQh;)؃,> @˭BAwze.C>9c{ C}?7s~LV>gI1 xCF2sxށqW@ɧLW:uЋDG  Ktcp@f˻-BE%2F%} ~]=QLRbgmuj+!U 4/ ha!gsu W^;FQzX9ZBQ]YGd|jV f)qA*?V"J!#?ÿu/`|<(J恟\A9p^Tqn.R\ 'AӽZab%{?A,Nb+Κ5G~+M^vuP' >*S۵wlN$J$ƚOț/:Tџ҇z%;V>wU"7^!"(r:3ss?Cf%iO b\O}A!_-,P<< p`(Xbr%8 01%f)wN@L2QA>yzLHykؾ-c }s?m ʒ?@ xU}v ߫Dߚ^ u?3et?PX%_j͡{aO;TMM,* 7KUCkenZu0žT4g[{ت$\q ަLoYigv~&颜\OWpy`+J lIl?L\כ pk),xBoJiPInJŚ"_C~C!UCdž|(bLd/8# ǂ]H1L+0 XGzFJ6z BGQ1 Hk'!VGp-9t ڊY z $dJ>D-GTpZRf2[\5;JX$)u.\("~|Ys cN@~VB,!kw }v.o#[WDF~?4@J1Jc. d2~$sa:F=f܇oLqfT*_ o GB,>\ ;rO~UiţxE) 33z/KAf}|^Vڱ$'ꎞ R=b8yaOzM{d2+?܎ImsY[dp ;zZ$q>&tQt6潐`~%%IP;Wc m6vCo$'`l&1YR9Jd{~*% īo& ނe'k%J;ӽU2Y I}׫M>/27lrZDu<ɠi]b67]zxZg7{^Gc+#ӊhwiaz6,/-y)7 6Tc>HTSCFͣE܍~.::0e!z cNv fLL[ I"l/;h~r.-J^=xbyr|_ci ˹ni.wnh6y(0+t=ML"gN^72 Um#*(-3gC_E?b'6TM<Ri>3\p~Q%!EyUZtjf-ylhz/1"ֽnYQnG̪scrX__Ogф:x/%"vZ[J?~ǂPZ&>,Z2|g[kMA{oJ&!.HLխ (ҍ"m UbD@Y-Iϫ/YFǥdx}C_8o0EI}!O6VXe,"<RQ#~~x&X"37Q3@UT\{bn?fMQЋ!h o|~v=r4t@Rl(wWíp?5pz0 \13<uuSr;f*G9 pmv!;O1`a+rb xƉ ۑ|>ӈ}gOax(m#s' m٣ ~d7/fVeY;]O~1ȖSŭ~)FwMwD=_fD~C/ߤ"$}JU<(t9è_y &ZﻼRB vHgM/CQxҸ _Au_U᫢.I[~A{NvyϗuU[Q n¿f[ljX˿DڏjU\TZW5BKS!a_u zȞ0c)(f!tnzg]|:/{%)IO^Š%1ߡk9f]}=]; -Λ%M.UnMt&D+VV{NF?1XzPl\o !ugdwczqu( Lb5&08WaDmE|O4y;x O4:!,įZcحbeP4x|OTIvjovULat{ݟ_YxqHk"at0ʈsΗ ;6.!,(;^`^ Uz7,xS#QhOy[`KF,͠rtpJ}sr%QئNюԇK҆1>mXK@f Bt[@Fm4m5dWFx#}INkZЅH|q֧"cuRHLs ^u? Z|@KPWIXnĽjƑ;fC *t,X6jj,4fLY&*6U(&"{Fz  p4A֢ħ [*?2ܩw˨ U+iiSe.$t.ood;vwܸg[es.gKgY4G"D|zn=e A!63Z fZ{d5n=smZjRԔ:1=dք]䁆.0-(]""-"*RE1q3'NٝjI P{Ba(7#c+Nr;k>ƒ5"pgt4링PNNR 2sFq|?ˁwA$)G!xz)fSPK?f2LKxdА &w@/p#g%0矼X}MYZ#Nnp=޽gqu@eҘDcp'쫞%@#a:`b='[8P K#|u|'h?[%-JS;=&KIZ@$zRcz6Uzј!zn6[y9&JRپc1"l8C7v|%??B[wDw/-=5ϠǎUk\_/oh{u;D`Bk|=;)"%G'RطFcò,y|WP*4`wv':}֟&2ǙXr &*6|q i˨r?DDƖ_ַH.ײַC8}Z e" &^)ޤO}"_'mB'2xKrE|а'6Q, ;&k\D*m\x,?Pq0A x\}x&V\*~p_-ju!vi}0z4iwpEf"E!q~g|2 %!{gis[E52Ņ6qHD2> {FbſAd A6<9,2ļ/Sws/s ^q~`?B@8];yaHD@񺟭 +?֔RՆEcZs7;>ѹ9qxs(Wm]_\>Ԧy7ƕ`,I֝򸔊mA<' S z,2 AhѴ Ȫ-r+S{)І3YA6Aq_-cڒ>/X /M؅=~&"`&S)/|6)/_DC[}` fê~ݴ%e.g7<|_—UXJ5gRdבR؜b߸c<.J@΢؈HD YRh,Bj`K(߭\e!QPHmze22b OA*9,q_CnS0LIvU% KhN'>CIR"(䛀yOE,FKx-*[.Ejq[d9čX(ݰ@4u4 @f׆Dm>)" '`s~9Bֆ.=@}{>[>M]I%qx~W  l6FRzi8}آto7-NP!|&?q)Sµ0|wYgu!˦HzE9djN'==U3+|AE^iQm^!0_9Dψnt{@ʼnT*DنٵpNOrUQF5`U_+ZRH&󓣚 BJF0Zcbޢk"=P sDˆ@a< iIE[u?ؽ?w ~uRG+uA0PY⃭w3CCP 9w\msPM#9J7e=֭Ȫ]m#v<r1@,eL1"*/DGg}N]IvVx2iF!^})D{{HL }#n y3LPZ> [c kZ5bЭ-'\hZcPz?>N44 nB v#ֵDq6 KJd[Hz& fuw[>?Df鵘*쉞E#Nn:KŜH?Vb"t|/W~q%ͥD ԺMkla͂GnԂ4MFxzlZx!&y<5%ªCm:yL#Av'pz>N>o>~>*A!-A7eoG`6s g8)8Yz`TWŠy]QJ "88tj/MN+k&?L(=Ȅ˒VGy i)sm!*[JD#U5ᴸ=/ߨUfcq|VYc[UZL_(G(Cg:.l  ҃Qnij_xZ|y|;e#MջEuSzI3gW$&=+]552oHp6b]jzQRڶ:z:Wk}Kl{\4CEZw)O9=2 &:wjݪM#LR`d3I<3L5iHfziWTG)_vCYZ0J<}) |ѫշ+jipy] /A_{&SorT' ^aw19L8Vu OK}]  .&=8_<WGGͲ䭡T?`?;U;?E{/hvk]wY;\TǹRd$h LF`Zz|*kRh)Me=,h-*c7~>u⦤iqhK=2/2rP y[H2*=G\ rԙ0a8€G$. ])9V(?s0Wߴ!nmtҌ"*meIw Azwy=(% +T!tjSGpvNCf{MWKkAs)u UiGI<|AGBQ5^8=Sy.[!V;7W ,y`  C"u'"TViw1箃Iq:v|7_\8D8f" .z|!vINY1<"V^:Hvn{sbWLzp՜eWv]B>Υ&~fLjrlADq@{ zъ3_ʔLѸ*~Yz/hB (W٢c}Nvpsq/-%,{أн L;%}↉J9 b f!ޫZƗYwtR|;*>C?Q>tx~OԙƓA2uZI^> t-rie^HyZ%H,E_)iPbɝy+-k+6*^T%}_߆: aH9%Z8({v !r紖w_ kO(DJ ĊzbLf L[iwY%A&~شDlӺn*m5֋&#]1| tY4q9D>wa齁;bD{sP6[VLlnH:>Dru0-57j2S':W~5YPn@u?S-HZ)CHˌS3.x8eg9;5V^2Q鍫8Ԉ@P"S|qbw18>X[>/Նtr"1h_Zd$C l̂>&Ywk 9 ش6~Z5a@9ӠP?HPH#Ӄkd! &ieyBb:D2>HtUG&,⬣ɤ~=QKEƉ:T]voVѾ4*=E i|n!9-;i?o\;!y+TО*pȬgQ,=.?o .%H&8N{w)Y(.$<$ pI V}?"c1oS{)UQ}6f>x^f$G,v >Ƹҟ9/9EC\Em{;Zt*0z - )L[:11b.Q,u34}}A =Irda YnrIOHo룓e>X YZZ"@T]ޖ/^9:w {Ũ<@{D 3x=?wQzjÃmdiIF(uey_@tNiֱϠptGwk@S22 ѭjߗibVI]5RBTr[?VNV4ްӈUp;Y==߿db{fK=R\@5d"{p7fN*&1 1.aj:J*$B]A.3`m6 W\ҽۂ35vDƒHx#/rΦk M[{@`:cakM#yc/&*7vPz ogl$;G&7`wY} (36}mF*a%Y9cw/ʗ$-)h C@h7W?SV\^1b>~'H!k-3eCg{W)#O.D&?zZ Ke]Ozc߲>7&#`=AH #_a5GǺl6 Gϝ.fX[.jsSraX)!̤Cyy- xΊ9lKo bQuٞ䑜U(E< f1-IN.{03S|=%ᣭYu/bc4=BnʽJrdW$[b4%5َʆQL|@J/a~ZCfjr8;ϛX QMX076תJ9`!>i|+7qxTo?I3uؒd.<&%y=p"[!:-f\5LYp=xzb2Jq^3х7ᅄ~뿳 V&&r2W3t^$ yP<@}9q?5 /1])`]'}qp5SUzCtodd$?‡ \% ˚g|rエZgDG8`3!bZgZ2xLU_Kw\q%c.7\O&wqc \x=iiYMkg'Q%?/}{0պ :du8_I zB)KŎLW oey}k,h-ү~2Y=a h&X!a\L;~F[}˜Y$߅d9%$J.Wg9KtŌ}誴Sn6F}/8jUY}\M;ǺἉdZT*@MB=gQ1U>gf ;lH$ɠ̛vqhDGf{Vqd$۬;(ݯ? =nɑxuDj&kN5b\LNrߝ+qˏ69AeWA%`O L[U9Lz$?W[2L5gcR7p~lew!fnyD^7` ѥ{mtA涇xd ĖQVð82Eu$ܺJЊi6?UV' u[uv[[" s{8L#6h \7բ`{`9K~^ʢ栗E"~^ςP[05~>. lԛ 7,jnUߥӇGtڻo/U詔o+_SBߢ q$=Qm} JNm!{-0(\edNwk>bLKk;[-gN6ԇXzGn4s@ZʙW[xy?0vSgov&]r}$%nRt6_,g_Ȥ|zaMd V/;ϲ jD#ɨ$W<*̐0BWo#!e(or2["82;#ajz8{K{r8uI5{r$m2Eƺ ?M=Ktԩ%~VO9҅V*@ yf#`4 ;4[*n(Zo=G"d>}0x:z9 $lI9UY;{oqoNL P=6Vw)(H(ĞKX%jۂΎIs;ZTk\S!e%9L|sVϒ (RNrnҸ ;_F e ukJl+}2AxL7(J6Q4$( _z.ܽ̋`]y))sTIat7=-1, ݁q$+sl~SnvN_)E$Q%ɀ7Mon/-H8d! v;v!~i=INyZޜ^QtE/B~Xx` cZ%3LE>E;eI<5[4;LԜJ5w ޒǐ!Mk Fo7#ݵ&6;>?f,$'B(5nJŞߚd;kkB+1~z~߮1Q/\3ʟ9Bs]M3{uܕ=K2"&TS„+.˞o'ۛ]bxX>#ާno Z[6{Dqg\F6v_ pT`OAXtwcN|U[m$갡Ϻ\f<]^ ewtm85lEJ! m{/$Z '1knˬ}Ad!OQC){XzFBEqHҀ ZzY 6J[]a Yd:Q\HCe_J+[\?qMB[Vjh^Ńs#L6Mm5]Y:Ԫ_'A֭mÞE!(Fh~^b+dnjH Ex mۆko9F.wsIoOPJs`$})LVeKƜ4h3 ?1,^!Iio=EE.Ds7o蜭?ޑx=h9|lM@}=tМ2g/d~HK)^thbXz nT4K!O@ RuW ~4]:i!jv_Jlˉ=879ԓA+뾉9Wx)m+3VƎZ^-u/{@@KdUvFr.s A0D. 6 5=0j%1 guJ`.M=^@G1%i#s ˼^Go'm M{4+]ŠKUSQAϙ+ z7AC:ZjfekMp:sl'?%t>v@QS.h +~ǃHڗj,@2X,M.SbPx?,8FaI,'qFc>\,9QVtb]d·KYS7Unc2q%m'2[8Ĭ,(s r |֎<\4޳E@/ڥ6t`n{K% ^#xjz@9}8RieV5_yD] KHzl: \!LmN4} JmM#;/~ yqJ=cFff鞿[baАz b~Q5JA$^l O'H\)dH0# K =jưp%冱e{຿ظ 5 #uew[e~i2'+A{O}H$.uQK> Sq[=)G_~%^ۄ=,__7A|jt.KSy$t@/23:eSt%c Q.6}_X٫5:55<Ҳ2 #Ͱ2pnWKf q/™-ʸbC#B=~*wNOݶ'7 V잚K{[vE~õ@Hl-׮ShWǭ.-&gsU $3h\\M ͺT'UwBE L8Fl5.&j~9rطXLT /5uLU#; 9xzY9  eL}K\2J& 6sKq-mPS;onPE1\K;D1,@eW:Gb<;ǟ77ui7>b (Z:akO`B/iy4c?K6~XMdOS_^ D'"e(bUk8v ͷ c;3;FǐvmPKoQ4j#_{pGНn^ײ\kI)'n0\&X"W;,EOk< x,zDC_RJoבi/ǹMX le_JD4zlǥu^CcbIT$w̋DgnbsadHb@8oS] aay仳y>F )5WuX$Ni?_۷YEsrz'O<3P 9@bg=qh @Q$Tr["![apѢˢ dӢgA{X"egFifO痵4e}OGs'!Ñ]0q\2enI5O :.SIlݝm$QZ01`P{b'hqi?0$t0;dIB *akFOw6^yֿGI0iԸ(<q-s;pToGa7bH-PiH.&K,tKe2ZVjgQ7ݺ$>v8KfAl%cN+,qB)ppMA*0 *U1D'sYJ7\gO::Fԯ nN]&n ?wTMAwQ)~3Dʯ)IP٫e"/s$_'W!j ف%v=nK5v͘ ͽgkjD=oCWO@} 8~r>m<_f7y+5h6z\*aoMЗ7)7Sp;+-x [ٷZ?NݣvxרwM;}DCƒ}U7#@ BTkYг!E7 tNMo>fu ޗ҈ptfjșk> ̑#ZC*7`]R yĒP,y}}oMCP L bjdlO7}咆}=zQ[m/ Qr9 4;F]㥰.~1q{e?f'V|)>^Mpdҫ1q)y1{EHN h)ʂ?  P D25_z88 yJ\6#oq|/> )UP@ ˡuêzq(%>MNP:m=O*(3Kfhk)*RI^HT@4mV2Ty5@ѶzJ\Ƨl׭"T`)HI E * T:ȊS)$@`ny xIՙU@PE/  vn4 Q*d(R(QR׭H@"%!TPPPP)^@=AJUDt ـU(vU{pH6` fK To`@* `P@*@U(HH*$U J:(*{ɜU"@ĨUB65J :c֠(U/sGa{`Bz)@4 /c uyUw Pww(H$B( o@ *@%D@Q*)" D@R`ﻷ8!/lH@;zCP" }E}A'ݷv{w{}ϒs-jV͵::Pnꏝ /g({xa7zϷ=ؒ IMc4>[|@Jm&] Ƕ[DN% %N*{G}jw>dHmꂀ/y;usB^m'{4]^Y," W""&=vh 'UI|>T7u5礑;IeG)@Q:$l{H:`{h{:;&mN@txE[v*xd k^.j7]5MH[ntj(ku驠`-5U@UI }oS gM{9[P_fo E{{]@ 觻WyٮM*Ӡ2bN@[tn}tX[* @2ۏ뷶:;BӾ|> -P(}W;q[4mtR*ν_{ӊƋ3pcxAMP>%;g:n>WP ͠Ypkem +-Dd1ilWZ۹['@:"\@S+_c;p}Ч͕݊݁yyTH8|*d+ 84,e{pdB6s:w;w;-wf*7MC90{ <՛渪vfL)APUq>Pv򷁕&] 5vqve%;P6۹]g1)8)in *. F<ϟu,A.֦q'Lۆ6vժG [`jVD{=դkM,f2ԏwn6²w+Z:b9]`H/MQ^t 9ʹm۹sN6WL N"@0PS[lE_U쵿8n`Zd3>po?~CUS UA4^V*s{,z sOÆdF_v;#=.E7L m.=34G:I)SWNXL@߇ d'?]8VO(3TrSУ#{'YAB6锉`yR~;>1QD`˛?ꏺq i~i~:\epc4kI /XيuYN{lIb:3w6 ]zذ8b?O&2kp?A QRn ;`RJ ڧPJ~Z@JARD@2!^^!\w>QKzHq۾l?KAez"IB gJ$Xp˔12dTR_˲hJ~<{~ϗ{XuY=o^DOz]&}`&!sR1Pk 3vm1`] KAȔ%T'5\1XqԄz!|O t92tEU-TIQB#8# G1諙X|4!>ֹ'+2;"e 6[`Ǥu͓,e!a|2Q#AeUMo^n]ئ09l[gU1:\b!Ǟ-GhxhPr`+ O8Lç B] RpW*)B[`>x8L t,Dӈ~_On1%2bQA@](XD'ud2?b8 T0A_m ! &\ʺXQOǐ^ 95%"̹Uaҏ30 D RTwU5vɅdaf7dJ~(D~os ]mnr94wKXXr~a Fa|l!aGV 4i/Qoy ,"]4%6Ao8F+/viyjGo#"'&;:2%f=7[b5AH{:Og~m.-5R#Do#OROr{fEOTO‰|.B$P" j|TgaObc/}?r69ϭQʾ~_Gd_ .߀DTޝ?٠mGw|yGoɏJA3l2#*~/O~>^eۗl_"VwHBp[]uNy^P kA$Jɜ)8_-} 'M\ENPru0IoXaen *)bñC=% J)Q*F}'4U# TRޡqd>R݃DPK'=s$TD@z0EG8'Q?P :J>eo<*!̾$H% &OEΜL}3J*]MVJI$jkq %(YYpl񉞳#e=y%y.=e?1t$*Ի=S H U2~b͛[9(ɲZv=$1LG?HyŔ_߫ #^hG.>iyIdX_z US0 MJבQ?8DIdO:d?Jq)bL1&Gz K&R5d>> ePEddH.PD`WvYUz3RPP>rɚ TQ_Lh)|Q.1>H`(!@(ޕ@xܩ!*XԹ7;T$wϗjHW`M`_Q@|%]OU%軁.Y ;+/%`JJHQ xhC}̡*(L=9fg%dYq4 DLJ!PH[U(2Zz i(ii?t"~Mt> MQ])2VSҡB># nďφޛ1- ~L kL> Y|c~ E'H#f$A!_i/O,?U+[|c aH_ѫXw$ Mk(!œzXoO_[t4Ņf|sHqR576 :®xT 4.dVI`!dXj ۮ㖴TkيJLugategEga^Uϩ"6Z@:Ǵ %nzqXT7i{ a aG7y t0%:rNA|Z}k f)۞ &tl/jCyi0"R(Ϳ|RfzRA?VQ"L|~}i"o DY-PO֟@ Du5JPMBKuu=DT)1ɁsjÕAg 7FM&>bl 4ѕC.b[ $f@c' 6hRtǝg7-1Fɵb_w1 A®%_7,ΒĨɲ7Rd$!|/:srqm ɞ?&8]9QR߃ @ wDfʡPZzi>]ݹ8Mϓ!i 8%.P)zm"zwу?RC1z0tW$q1jU@HWi=T E[' ь2o[;+;mdK&kDvgZvâ  078N9aXMZHI.<2X9&W΀$d~04@EIqx~>+Q(-o}|e;͙K:nE|"gd<6d(.JgeBJŤ= EGZK(#pqV"T';g4Q/p@P RAź>~Rh.’I = A מ?|y}y((x/,?0hl6ab񇠝yG=T}9<;WluT$ I˫9gYR s8e1=q̋MM)0e^peh!dB4kνPnmȾZϫj{8-7 @'`>Rى% ҕ Ȫe.uzĝaOFQr|gFեJ.VqihߡH GT '0 KރJ( s@<(̢p׻})\Q̞rNc[dwccs(o^?]vI2]aM3)#0ȐH(t ަKeYj5j';B`u"3h$0@؅ $Ř#Fݵ϶QKzZ[M+kN/P2L˦{-qg5s gr@ȠL30B'svsg"EHBvUɉ P؛W`9g 쬾;^=&:}D锔U;=GIoQl@SlHzx&%'k~|.H=:k u 1 T%HP44/vgN (8MWQ7n~*p= $Gc)I)f99~z7HKێbv]aGր2ϹW$}"hZ7ѭ]mu!4{ ȃ\x"o.h4*`%^EZͭkU~z@]1Pl` wv/69^ѱ|p'_2WGru Z G!Nsɬz!\(Dծ$@"A.Quv>eŖe?JHMbR >=2pF L{!iN.DuU\̪I(ԇtںFBRe.GLT@޿h`}AV"jd;*IGxSFb`~97&8\CP@I J "'aio_n;\:bpK4leI\ W^ӣ@[ɅğJh_`=?wr9mC;?i!. !. ѫ6q41UST E 挚x$O]+z\ !V'Bۅ Fsdr !i7H=^/D4 R(t$H"1!JM0ngYӻb| Q{\ut6i@ Tfp2bєFШX%@ʐ?%piϳr4lIEA!](HCJǩ`6 `ʝ9 wEF0R'FyQti3VKg:_[^#⨧X7iOOwɷUlUWg9GTV;w|׾3藧7\.~mbK'\dA(@:+Dަ4)x9 ^{sQFRذϪx 5׳k.:+n5Hߨ%rT&p)?:q Lr 6F<ԠxU4r;:}9cH.f _Ӿs)nW)lRe`br tꆩNE|֏<"=yUP(jVk² ) )JW~Ro¢zZ.G ȈrY;Q߅iVPzU@$e1x)gbʆri).q#Z#Lڨ_U+"J#oۤ(^?oKK'`ܟC/wth;fs(mA:pXøpFe-uѝ%jFwNu#\R-f\mʢI^L% /Cr5 k6cfl@^-f-J1eꂑEq=56G,z B#ثkF9sIw5NR95Z)oB&wͦlRC JSyڅ 㟞Ͷ.?K}}wk:>+M0M쳠o eƵ&Ȱw68պp'Yp?y2:hI:$kt^Eug3wtS q;o-Uihsbô# Ң{w#2"t! Y=ݙ6]wr/n B?*JO#GmG \[+gRXpoWE/M`ucOz>* l$1b2yg{EJͬN5NE9MO /vjdxP>*M.kbЌۿL\+r[f1RMl h2D/ =gʴm!e.:i@mSr^Nv908(֏wnG>֤]tl>Xl{~_ߘVd e&+X^!:658t[v竵h4 h*ڴW;Ľ0[0᮪}s]7}E 4ʾabluۃ2QVPo׷f~csA _ΦbT%%$ fY۷?zRY}P`vo&?F0|y_(]!ӔNF0:QFk18k4O⏰$~|=GQN?<^ YI$N~e}qʼnO_4aj8̛gF%0?IU`PԁMZy 5x[p5槃@Cd=-6ZQjl%I s9$4zNxzB$ ΞKp8+$p8LaC`Z#HRJnTXQEQ|~ DdHdPpJ(cV4AHRP)T yݛl~}O;'D~ zX$<4%DDR$H1DMv:.G._J8|>Iޣ @AT`!HHF 4ڀm1xɚH@R'2@9QY80'9=E D;e|"5 ;wzpvsJ`JJ`oV]{ :T,41%'X"bbfJEB`PX BtcGmw0aD9 ;[ʴ  nӃyB'\Jײ! 򦤊DzT}>_03r+TulOЏ C1loڀmWi ./ gF F @D0J?w* B"brI.P&Bbϣ`DWf9IF2ہ$Bɀa?`E>h t@g$F1my_oh0K!O qhI1A(P#2%E>PR@p$,3 "Uc*Hd(ZA0 XUS`Q:a "JҚכ&6a9 -Կt&^D3;x%:?Lno2ѣug%1/i Lb Q DD 4PPP 1 A1? hbB"b"6P$(*$J% (!"JCzP h" LO$īJ(@AP-!X)(RQ%b(%aTEv50I)DEDK4튄*&i(()fF((l,DS" 1`qCDED?LChp4SBUUTS!C0t)$6J HDLȑ4$TRP1SLJRPR4$5T4'TV{'QLXa`E%UTRVSXJ -mDn (%(( )O|9" )ajjM'nDRDTX( 肐*%EAI2PDDPl䒁ACBCEvUTL#C1TR54‘EPEɞآfbh"hh gTPyPWFf(()hh`hfjJ"i j I)ULM@WXj(be" D-B Bdxmy-=1l%Щ)L "+B&(R!$9J}p.! Q  "  Z&BhB$X>'/`!H4:F% P*r1 DR%4E(| B4HҙA;(L((Q܊l%Z(/2#K\ */!@ЁM w3!ċJ^TPB>Y t7ǎ mR/~7J՜Ϳ20)B!A1>NͺR|%%?QkF~t˗}J$Lꇟ|='FY1,+Խݲ6ڃGi{{UοCͨ/ .\CVS2![MK{eY˖)p-c~}vt?9͹ iƣ%;r8E.-F=^\1UiP1.3:MJ[Lшg0ħr%"oSP;??~nˎ|z:tH!s9\#1~4e/ͭ2Iͻq LN0<5t= `aBG(:Ԝe'za2$ +͛ӾI!?qeLe0TPQrmq8!fnKTE #:?? NO|>ӯq4 Bϟ sy:~쯢;> dЍqu]=Di0a5:)qGL/8 !RL6)LVcaR);#Zig0Iy%'a|S Fi,B|^=&8)d\0~bBgaZYUс 2q9*/"}\ Ekg]wBiN;)ͤl^BۇGtkT,!P8TJDq,۲; 2Z*2E^JI瘝19H,P͟>nP;Z 8Ոt4퐣_yqUIB5Zms_5k>BTdxxDQ[ ,@0#΋Q'u^pKAD('>fW @ pd$IO~6_/ݴθTy:08qWᔫxR~R^يk=db#Q``gϭK3/7bASZ /Y9 -hVDK#ûL"vq U Q k^JTw4 +FNȌ=ЯfKCDZ G.Y207r6& Pu;le*L@rRyY=sIgM/Trfݍ{A| 8q_uA΄w딴!do{Y'1lEd.^N%ҭ47⍵)^yВE 6hB )D]lPU:kd$ߨ6ߠVwSFd iIr0J翞Tw cK *-7]wB(:M57Êul.~5|ae!yN  YplV apZ@1I5HD]˸_DwNsQD6lAʆfQ&ɺ`X߮;ZP${ L7~ܘTH(_(jـD6Q_Zg_÷I=Pٜg=9L=Q`qd@.T(2U#r~QP0F~8*Vv(PXpZК3|)B)eP'orAr(Cn?Oߛ\~1?d#K"?ů@2c/|w7!7+g?g=;'ޗ(+N~;4?qN<W,Q{D'4ӟw%ƑA` !d(,>_z<,e 7_ӈkÐ=<2wzÙ2 d]и|z#`8Sx.Ɏ˻-.N=+B+xRvcI8^a  Jd]D^~5ffLxߜCybM0yfP<4!"p P.;O/nk;wJ A®4.ށQd$$A5#E25QW"ir@1 ,vN~驖u]4e=: hIsѠZ x FcH 06E.ΒSQ#B,F3#+hd!o]}z#ĻyBS=-Ȃ;NenؖBHH2Ih[HKă]ӒGޕ<͈GHJ8JǍP]$D5kp6|A옔4$ D"A= jQх)[ P@0P6q˚iYPx2m8l QfSH$ErSI%,,^#SpT.4\s>&rs'bc@CIw/lE4Eeaͦ(7:S+=j:Lz^NXFgSr<S(3"´%z$.,iA##L ~?EHFu'FQ @Vc u0lPBW.A*0JAh7ݎ]JCb:rqXL#a,LR1,ϪBEL H)\&GV*d@zfdȨ"rMzN e0VE F |mN$xZG[ ! CfWG<.yD2uZ[M,.F ^p|t{֔ 7هmfgK[0eVG~Ⱥf\'퇡c A o:ߖ1}GWJ'yQ#E-h?CquDZ׉Ht{%B5CD3ЃwE|V)LEI-C" k \3RV]yC*0YGI_z'WЕebeE|91&`2t"^tv\p+AÅ(t'cxwX@ ! Qº#&Vŕ B KVMšŏ Y/Gߖ]hl("A2'kE6E!AbMc2Puח= /ׁ$&~iUA 2Y[.+TԶs\gk&NԠQ!zŁ.j~8:!OSpk(NjRPڳ>|3ѡ !P 4`dPm 4>}ǝH0qt"l Asĭa)!OJUP!bgɍ (@D~rG ]TxBl:$'?')dS,"bHHcĶ|:˒ou&gp |xj4~AAEHקnSשWIaP&?4 \:H[wծA'4ت~,)>*H4TJr0M;#$ji6b]= H iPij;Kn"tpHz_AU{ ?~zp_VƈT=Dˬ>ro~=aG@K(TKGY12V~"8g~R~j 9(_F}1U{[oZg37yZ{+O!qJH5_AkZAP+n\)}޼HʓQX;᳦Rsweϭ\,MPf8ϲvu ARCG HAEto&.{{5f>f1=g}'.nwgܢthoM_c?NH?/7W Ǻgl5 W6Eg~?ٱn+.ߙ'w;8zuPӨ%j`7|K-%k89gӐ ݂tK|sʳ@/8 J?84bَCJal(>RoY0]sZ3֏c@Q$`$@4(Ӆe8(%~=׷n 62qA2-*oaWʁZX}nzOQ o*kQ e>8:*r?)x]V fS,do}ڍRf;ex M@xͷMx؋oo ݵ])ou)ay;~}>=|F;S+T}&1R 5BDd; p{UG`IqkyFwX#LI&p! (GAS 1t֞uԁFKb!}pT8~δΊ~ەώ03A B aӶ8I2Q$$ؿt0AycWs'Ops8I?ܽPi]bk?_š@iad  p M2 ;761˯C-~5Jdj,JA(2/ױE~YѣCD[ˎ߇P?3AhdR9F[ԐB@aa˱k/G}sDA;%=΀52~}j"'cAGc A2"$&a_߆~99{f&ij>$MQuón̶dž׷l&ǁrK:逊_quZ8m|4{O^1r%UUAALC$%QI>tl/^:t/ǫ_2@'.Br><~cӷېe)O:gv}T)–CJCwt}nȩ@ϺuE;ɳ~}i%9KS/[{NtƄ!=^*V{}!ev L 7$a8aVޤD> hwi ͤUGŰO!9| 53K>5ތIˣ˕ .5! '$s'\2$c;u1tkLC6\?'IyLَcWM9poN~E]1Y@qaR$wld#d7h EPhY͌cwV_Ǯ"O֎4;<Y~<ǣx^x٘6>C7?Ptz_@:L?Xg:Td&BL;PwOzGq E<~k~^k1"*)cQƄ5Gl(d%3N^tA4Hq](Vz{.T>֒% Az+Ֆ$r}+.j/%(`eF-YMcűX+b`JR 9UxDͦrOzsܾW;{z.x=ΞE wp ! _cIw\>t'mNV'>̜Ě.橬Nˀ=yynߴʢre9)f挠u0tː4ktdۤXZCriX |ȜJrWאd>_ bUk?AA d|_H#X0, @P]2,6Wa梭#@$H PĔKX}{q8dsey.qNΓ+ ׆PӺw!v~iQ^~qx<&ʢ #aw0^?J# Фp4^`GG2SX22O[؈ Pw%wρ١_9Vs-'k"9`&Xuy|/5 !Ǐ;.OfǷa D@A> @SM!I D_;E+t;JSQu WmOX jjjjb4QEM#kɾ}h"s*gP/VT+ )f"dMEAE!MR -=iT up]iyc\ P%u i* WXN }oQh gGL˫ k/S l {z$TOXv{ޒ<ݰK0nB_^1qK7Uv3J7S9K.L6<=& 0LAT scn㛆^\P+ v)Ci5H8U3"Cԓ@@ڠ]!}Cғ׀'eQqv_{&-nדxS܄] M@C>~)Az[[oh9LpZ8$Pum s: so_/QͷQ4S%!zBd äm%r*j@ ̠8ta缷f2$m T$s΃2Nd6:2&4qW;wuq HQP/&g6]B7Ыv^ўb8uCh,%)Z* tuwq備\]n8Tmb$ցAK+4./CQ| 7à =Sيj=Rx`)$ 04zVz ѡ+&Z6d@_h<X=|7iK6Ї:Q!\Gߝb:x!>tdoCk.u[LȚYWM*'.9 GEuH +daS1*b< j6ֻv,y8E=Ė' UM ke QJA&gs sH{̵Euê1yRr?ez57:.ABͤZSA6adSS!4$~ XQ*TQrMٴLNYw]%:|I '| ک˙;5'^_g@ʜPV6r0"Y瓃$/ $P]җ\eny2"TQDJnRzL S|ZRP%{WolĘ]Δ_fx~3ˑfT3 Săcl׮c$?c#綩-(RDF㱙#\vll/I0Һ2 \Lj_aY:HcT4&ZV,`2>)9\RkѰp&B Jk&!L*Vu( 5eJr,-iŖRY4yqG<,ZPDpX"`CxP AnhC%A'˓TU7!SPtH #⢨ɺ/'e0CFw;,`0kvEսO[wthul: zߣ{uV=yz[OB>ݠ΍F:mczԁŚCeu1N)5`_ߪX'U\>#O}[ޫ ܵyz5eډz^2bbףqK<ߣL@C,K-LPژ4Ho$9[k ;88{:tA(Q3ʯm'ϵoUtJb gԒP *y-k$h*u e1ewZb\aUA6>Y3`UOBIH'xI 4uS|{WX鋞fBw4T&5TcP:NuX2,W" c. |E(Fj\}-rd`P(R4c,P PA6hsj U{ ChxWjl o/ x|$#d ǎ29#zyIhhU_Mwc"J$)z  u7C.m:=Μ;\af!V.ć P_)XP;P(BI&(R/(4[" {KAd(QK+zi^M#4^#Uc45UxM#$fxt #(jguANT"qz ])#겿}i\p2,ډQpFm5 7hPd9> y``Μ*8m3;&ف#!t(@+t|T=#pz6MW }X<[8^ip<+zLzϵ1Kg 63t̴{ra M+ExR[ dV\zH#B&iޏ@ Q /G=ģVp4مAquliEH<Z[8䨠ԍS(A_d<6ADh# V Ȓ@4l!ɳp(#U$[i{(<.2PJߴ5B!#zIőGM[Ji Bq,qji[!ɃU Pu]Vª|fuC`tku䮹Y-lt-ؓ'K{Cvh a`RkC*h#,j۩"яxG֚!v;@s8hVʁh BHVF ) Ʃvz%75aVsRhrA۔q\PPT2j[2r/c1,A :\[z%m D Exp|N5J|d50i'xT%rem1vETAGpֻ퍝`Ȩ8wx @)^0CfǣSꨈEǭVM޺t'wP޾gc2|aί .I pӉ)@?9.HPr^gn2?+ԪMA|/%bP?wBT˱eL;bJ8P$ڝB% HB =V"b m7w #{zkc:wv#8*T@HĴS>cVquݰ ́VU)oBUU аrZ) A.__C^d .>~/_dh4d clJьs %sNV ˛_^?6df]J^ɉOAn̈T6P% ߲SB@auvfV*I/yL fl{ pKQ E$3 HnuņIЄΐ"Ii |CjU"mԬYgUӥ\0U!.xӟ9x2{ $rпr92!B-x)7  UHan&+U1xؤ[cT1%wLp`ܔB@%) ϪXTI>2]+k A1V-! cP[1=A@#b~\)3x5/'K˓c FIS_e}smؓHۼQWK/~:a|;6Am^;zu`G>5Qd] {yZ<}#,ʑ _-|xeMd)D|xRߓ\8ͮUt}tR+ z>[VkV,a~wC‘Nz3љ|ԝ8-=KpWȡ;ԩb_ʙDO([iM)!]JEu,'IƖfJIEtST|yX;&yvuJryBJBLZwFE3RX46; \ U(n!B%shHt{# ]B3B:7Ϯ-ݎbGXLX6EfWm )G*f}CKE䬱 [({-T:~1S)Fa5 ?{ɪABdBD+* ,Kz祖>%O\#˘@(]0~9#ZٴѴUE6 1^9:B<jKx=\|P_? |mWJj3sS_ofq@AA90W⼞xeMآРˆ'$-\.DĤ -AodM0h2BA& 0 !A42֐])=D!qW0_Kt @C `H ؉0Iհ:18"?CDa2>DCR`lkz:wwO ˛|0^WL:5 ,1Zb{FaϢSuN25ίIkYP2'k])uR{B9 jZUpj(p9Am@jԐ*-5M<\iTͧ}teA4d?ݝID)E#TOArV$ dł͂ ~$J#R>`gJ !\2y24bC!P+(S _w$1eOZV3!I GW:A"PدOb@eZFՁݶ 82EMR XT`mNKKyy={w&` fB lzyƝ'DK|& l5HT9c 9SHwHEǩU@݆5QD$}1n2).T6 @{3O}GYdpo'ck׵c~=oy ;T ˄0sMeB-KjJI QXظB|.:iV6 EWn#& Mst&9)}(qãeZAwSVn;xӝ7os/Oy'_< 4 Q&LS=܋MQ*0,ԗCAUFbѣbxbD~=-NKYi)%7AH1 @* CK nv:HL񛇦=ЅG.qj\;"r~>Rh .I;\h>.7_ 5h(nzȍֲQ6Ool5(ŦNaUZJq>zĤ;r0(!HBLa2[7.~ؤ}kWA $~4,1$ 0후.\AHMTJAj50"edkZ:VڊA9_wyKs2$C| jbjs?cw\XfpEPEVm%TXTF4؜7gK\~lNiVr {=3$vtBʹl$Ztd{(RAqI% ?h]yZ6/D^t4~ `ީp2t1VX^L88NZ-%ƶP0)tVŠkiqhfpvNa':CttE`q܅D?p!W݈:[e|vմA.La%!h-GK 1w+% ˽)4婤BH>szJ_yk4o}TG (j7-biy~GY"K|˪jF&8B-$'?K|,^ s" IȧygyR7!Ouhe[ 1Z]]vzF*k_K>[dՏfӁ00<H/ @EJg݋Å, 6)D[o1տdA`Wz݃ʞ8ϭM6y߬5Vߍj2D[zEP3l cr7fI6o\@Ά9(C)d{$*YEQ f;t9gՆ،b'ei%4@e% E* A%kta'c /WB`\Ddޠ, ! +%Z1|v\- [0 @x~ wKɞUתC@*LSg`ϐ@6An̆4:KiK_kGM炴),@}ҙv=4irO&۬Bj) PΡ`։$dAvohQ 0?W:ֳ(wcnCW%E8-kee'`NCav5m"]{6ϡ Ä߅]9.4m"id6 v.o}Ӽ ;T#@mt n PvfRrJOu{޷1:ksbM{xQ-D5X:N<y3[fl5Dfv-!_x$]f  Yi|:A%?߹L7!9Cs$Y9+7XW#=[p_w@¯wXi*ٔ ?UZ qo_{Zvw_57k_JN~/]{ʻi8pHbc^mɗePi)+ݐNnμQeFBL|,8,/HJOp8N,zC[yڪCz3&3WXMͣ%\%#"}WI 93^ 7UUP:bx[WXk >mq>G2yJ,ˡAM#!@T$ RD>RjGrʠ'K %GǪont`+>%yz&nsdQ؛"U[Z*4(z_.Ae9z N8YRQW&TyuKz׫ QSWUaB9;;@F#/ xl(k :cDO1?HrMlG.B?4 I 29W9NLL|*ĎK5At6KjY=k8(u ]Q y$ `}~wR'g>ñ [N0' Q{hÜ=n6f#z#D@_{b ~X)``aGazP}܄P 'hزߎ$ *F!P(=xNE s1fZbyJ2r:hpTaPpJCʂK7rЄA_D22?0B#d!EGVp7 H/'OV9lH(۔ 6˚ٵ2Ƀg a#rMO+ރbjT;\ù($6_2 £,0jȰDȓ6ߩVjP0Fe² k[).@aъʶ\Ig #~.(Dmp54z&Jd염@2l `ϳ?طru27{(Tdnx -}P+В0wF-$Q%R[hlOV>L\9s_Iؠ0`Շ㶓N$2m]$p>1Аz8[7I^UPnң- =mug1cCPc9ɒ$Pc&53^boF"c܄@XBJ@ٍJ');+.oqiڿIQƢE ,KdJLS[$^*P1NzTga'*{.6^ o0w c,%E > &y 0Q}E}GYg6`nViOs8߸GAI)\#NabR}ٲxJ5q!pC(}a$1N>Ғc~|HuI- Hah 1Ce$*H G 3y$T $ a@LTP/hIĨn{d}:7\A3$'e:\.`E@23z>HyW,]Kln+fZdQof#ضrARіA)l_H@؋(&.t`[(ٺړgP6*/rLY!4"7bJtV?&;դ)0Y<OVoҍGHI@yO؍ Vh9i,^/)KӜB"8]#h~8Tr6#=z Ĩ F-PO sFחִtH@ \Q-"|Xx`Q *˺sqy>/0t%c'oW+5+(Uhy{CHn5!Dsm«_W'}]ւX3y*kHIxbgU8HQQ * `BՅs1ߘ`BR*R Hw C[F( =s lB28:fIW[a TZuoB+N`s: iu{%ZR:c?4:Ϛiƻ$\*N.HV ENx >̡ Hف-. 儤:.  plfQyID@pOa;WlǫtyV$[^WF`T]'}CVs\F (C_=vMzVsg _6^Ng7z~# Z:S`LwPHI3 A"@l62#*-V%l/& ٮS͚ȅ$ `mVm:8HwI7 A̠.U#0\2H ^*DzPX# uKyHY.YW]tW@R9VqVI(4Z'Fchsvp $KgQ͕lť^B:QUu f)Yx__$~qLTIyzN_B2`6!m"mrD#E&怜Q3DIY<h`)B*m JjϾx |Q)X; Fw\7DܪNV 9N 8,p`f{O7Ggrǹ= G/oh(qܥ>2wCٳt]ϭAgw&dtbs|GI ңs/ZBƶT֢ކs %i&8k01 {£ pZ [:byЩZpWR)bJ(Yi4 ?GC*eޓjue"(wA'NQ'yPQ_{IAl E ޿ZLI6Qʹ437aQITPCDP ckѺ7K(=,"x ~i;fL^fZ[:"; ò32H&8|\"+1yι |ҟA,hج(Ht}%*?Q[3 *Wꭻy+ 8"z<蠆B A3saA{j(){0i0GRž> rD)F'kb>s~ ր܎%ݯ+4,mYyU?b`ŧR`RH Z\ڲr->]W-½@yĿ\8sc@|DJz0BCnwB*@pH=kFZiĤ w<ʲm)rTHC@ 1L|{{$]1K&bf=sa#<讏8sZ=kR8>-&/m@[8P[TIKA, hFw׎gF| ]ݔUo1MZ X8Z[ފIjŀ.Ss[?cËvga]ZU!>&~Te K;z)hi2Y @We &Yp`_V^yQ[8ŗTL OPR' f5\ncbua `P2P?) ܈솂 5BA/tMdJv52%@W !c3xgJ,(NˌD2 kj_/@Uj`oϸRxr *l3o5q.o/WɈ z Pw)  ,~Wb:sg݇⪅m5okZ# 3Cy`.h8AC=A&0)AkLX TUB0P1d 6,qhLgGZ|e6OFAT3obh`Z#Q9aJAs d?EcvY##%˥]ݍey&mQe*W!u!;J h5L8Ɵy&Y ="@d}tjP~5?:iyRgI#k  `J!/HdJ0(3>a TOvPm;`/!f +L-G`b(p*P 2G0SB=d^,L)B#ɯMǣϠn[;ʱ{ηC5[[1) 9KzKYw7!_Z 6,:bdƒ} pa)[_qƚZmo-f L;j7',</#`~ Fz1.a A̟NN>>PҀرTᾤdoμ@1Q`; )Т B0dse<VN)OKT`T›EbEvuKZmb뫡nd܊wՁ[PV2h_̀5 Ur qXY+J7F +upW,osA?/rbc_eEyF,}#I}EUG䴉epnUjZ24̼>*Qb!z,(͠"u^9?ieKpQEb(w>hSWVԣi^',y.b[.iwhRH,H#C=B-@rLΩת?@}321_#,ֈljꢯICĝ%:ڝfMV:aR&4QU|ȉˬ=;%?lqXK~̭aP`]-(g^%UɰiV:4 91zƺn:QF;Ym2>qhx)}w<(J@\$_V3)g)/ ?Z(5 S9(3Y -3KhO*Fd» n!橀x ,AԢ`. JAPG!gSޮ:1̖MK%;eQ,M.d3UȀH3=o(#ߺL fJNHq! ۪8t@ S2 %GtKHZyf|VX ?@ӛYeK5b(VZifT3*͙2K3ͪq(Ҏ6cPmg_)+bc{cӀG '/Ԋ #kւDxA[GqT} &Gjr0Jk6MLA;fA!h$`nj؀Ultfy*ƴkX Dnp3ߒ:H&F{ds 7\m)Ζ7 i*8))İ T TF$^tiX) K, tGR:5dfڜɆ>b f\xmgf͊_7]vJ#<+S!ٯG՚69 gO'd"$g7Ipt]Tp 0Iﷇ7["j TKQ\'p#9RX14\HcTwp߽?3c!W?X*RZ_i #Ð_ %!Qy>B=QI j#F2]R&v-f`l//Ez|^?)jϼ{QTcBN6e O@)Qk3ihXA{ȉЪ+2Gq[h",;lA&WaEPqzh* ID$5(e2`Į7:[[S[N3ƢukItp@/R220@w!ߦ4ƣ$DrVlOnqL䵒nkCIl3J#RN~Bi{#0=sZB4L\L#DA=cgL \$)ՌʂH^PT WUCɘ)-|ʪ-WzHz˙vفM-ѾZԭj W֭}s54X WΓ p6&ϟ>$_bP8]vSFA= VDfꤠ@| IDheToeφ=*+ * E!tqpieEUBRc6J\KK'<#63tGƂΗֺP5)wl|8Q5u9XeyI$tq㇗͚7cHtb[PdBM[ |2,æ* (y*T|ʂ"I*˙`d8aap`x=*4,)X8|E @K0Qp5M|tk[F,0XMNesy,YP?1F=Z_exVmgds8 ݜ1:)>7KÖ4Smr ig94]L:lU |RWUCڙ+2PXӜ'cҢ^ ZU NbH*i׉Eiěw%`Ĥ簘ǟc`_qh]hQًMdaS#v^:ڧBˠq.RHfg2G%HH4\Eet_<5Ϝ Ei+X͇%$4y^ q1lr'7Cec W:M ԃpfd_&Xa .<ݓH#ܶ>KkW^>z9g(#a y[3*7FCXpHȋB 2UˬWK[OM$xѣ`s4%BhVȺ.,j9vLZWX dݷ.BZü h-$"LF/eٟ+* > 36xups@ 6 (M0Gt5T}$5axj&QS$&۳ YSG#u ^+א<2 WfUa38;:i2@*Վ \]m[[&)LJp_S1Ÿo{y'.̘gΖc  X~;j$EY/Qf:jN|KGmZm+^b0EBa]9vVˍ[ Ee֒GI,B!Rr-Z`r(ﰭ o5G Cf\:y"M]okYjףb^/d&X@d em@P?a\i?J:'';_NUQ3ٿfd}.4'#`t8:s s=7S8@~Ltxox\C̈́ C $ˊ,AW59.omC nZ0 |iV/ru-~Xt\VR)9qK&%N%"[d]r\=>#a٧ 1qDX0APT'Ս_zJ,-ΈGaA8(Ę0ALз ǡ`ʛD893Bߔv0"F }@J*VzɔKe^ &e?g )_Q5^&ͅF5zXQHLwj+UDZӺsgj U 5,&*X@""׌9JR݁ [n_NJUt 럸>=| BHXʊ"=㞒~U `-/K:QO!sVfq {Rh $DP;+(,F ,I9*IWdgݡF@;4(fТVc50,XφOQFhHT `ǝ£&TzG,S^! tҊ&8OKz:%$#Ŗqar(IIx,P&'(] estq:9f6]Dq:ʄyZrm`Pk@^Aa :1,"(MJ=y1:*E/h~$ pknZF> JP0<ׯnSm8D˧!60uqF/NGTF}+=8RHg(Or oY?T{ ZSXU wƣ=@rКۇa-d=>0Ǣ;X [.RPJpJZaȻ jpP;Bh1Yr5uw?o"/w*J/ . {nϲOIP"NGւ5P ꃅ}_F1w> Vh-t1Kzu}mbK/^`>KRAhG4JϦ9t6.[n)>F=X&^2bSE2^lxB3R>)J߻VnZ|  e)(Z h %%Ql(vnX*H0^!zU]m`3AC3"_E쀳D{XƎ Z;0+.T3?S]<25l3-DI'R J$8{ 4rlP4%@H'#j5G'*">}tqZJ [F,_淫`kFy0 X3Q:`z5k[=MAC}M@٣p)D}/rN`&zk.U9*(T[dT'k($5aR'#_bF`iH(MRv&ndI+?*ޗ=+z(kZ̨/ِc6bq0oWsze@d{ d\NF%GuR8 <]to=?5 eyM2; v(S ?h`JxE+)TӡNMZzH]9'zx1veU b`=nq)A\ ƭRYX7ɹow{ːߧa5EJRPoPHrF~/ kᄐä!oX߹A_"@/($:; ͯD4Y};LՃ uEرU$$>3ӥIg8VQ6+J9OŲ#ՅG(@4W%6+MGrnd(AȡpRT Zêa&@QZ ʁ8( ɇ~BsOHOe%Ͼ?;C%/;jyз`GQ]X %D"LGAb 'Pǵj5Z? jԵIͥA#j]@B r =`9Ћ׽=J1tG&2ì?o^X:ZLiwd ~p: ( 9$ ElT0xWw:X,Wk -7+ҍ5&xx%CsZaT<1F1&ز95hq1S[kv[] i(f$>1E&1t9RJjf A^3iKHX,_p1o%VjBKs::tb9O~ -ŖAHi>xUWna[:AȘ"^oonpaΜ,D&J'|<38gyKO hx01 } UG$qO`Z(6dĕH)iNT=Q RE2ҞIԀ 0]A$׈l4Ӑrg>]];X0`lQETp0R0 Lid*+ݹlU cfB".Vr{s1TL]p_UC$n CyxTd#f)wOlpWC|:H׃Ev' C# j&#aL遝ƾ;͞4j#[fpt- ^$8&Ma 'm*6ӛlq+%&)[;Tx;ڈ7}V--vpfFW/~vBgTӕ@2JW+դc56)QY^ d}5&]{m=.C^~ԌY %\W(4N*U 9BJڲ(E2H /u‚D s-lw$HdZNmI6OD@8 K"HHe|<`*#YB&IEOe+/ّBr#JeYt3mγu%}ld+混^ƒ6A8"Byj2e*eˮI]sP"bڒkNgf|Q2!Z&ERDP!N@$#͍]Į~KC׻>3r_U}9 n ADGsm UZ&y5u8U(^gF$)BjB)]0VJ,/X)aR%lMe X ˡCBJ-` .)2qhJbSjQU`9wc@X*Cr䑙:RCȠ+CFAb=5Mh'$B$5k}u׈]U)( F˳@*$gZsE`֓b e0*$Gn 5P+6 =!Ĺpa,6 xz$2 م@Щĸ0A|n #Q@ ly AY b9UfhEzuf*IX @A=I )= ȱ ~,8u/crטkPnI=+[B/ m]"D?Y~V( lQgo4 i)8rBoQ/GDr@E9GP*AQ5P {( R|` A( Z n?{BJȦMqKK@3LePapHba=Xm`Rz&oxx:C*3! *G "(}L]HHl-cQsM~8 )"  UO jX:BqGWYSF3{ՔP%H*LU(kdSuff?1\Ϲ먖uq1e/ex P\IG,HYqM,hsKQ9Ěߌ"d@d+Mk?o2_rihө A8g3)V`e9yyˈ]tN#by5 Ek̬ȽLnZKN wI"8/[lȗP)Dy2bC^A#b9 ($DN(楌(>@|Q"/6t |Zܪ31e"#D$]l CFoj)FYԨv$$a.8%0;ɉ u܌=N'3Zi_%5A6kJ{0jI: V"{KPԡfAV;>b:?kߴB}$$2k9F:zaO J0[l<@B 6FiT4 'OTp2(*dlBNEH(@Nq6G/`_Dv:}iioBoשּۅ+^ (HƄf#|%)'ҵx6"E'@a DAz*q'MzF[Ql"p)x WG'pEu*Qgki$.hdD 0=@\ @B \2#n!#e8 5j$"%ZwBB@Plψ;"„>q3E)S (({+ YB!p*SNJ6S_@^*,CUNڈN̛BI+ peL*Xkԉha@5B#РA h@G+)h0VdXo ifqq讠tef!Ud4|gH]B'N/WK/[` GNUxuOлig E*tVG-%2#B;K'`{ /&Qː!Nx,ģq =4z*7' v,x=JZU.X<잜'3UJ>('N  ::#ٝn,yT/1ò-; ߫7Dž9cΨ# Rty^UέRr}edwp^# دכ G]~e"Z}i)K LQ2aDb?)Q՞b/.$I-j}E_x~c0EʌN/f2 ;q^ӂf+@q헅J醢1H T({WsTL֔C"7L:n^!+}:g5((-MըjVQn>WB@7!`v8Fd^  zv/l1-&)! cߤ#  '(03Q 3oXnw8i6*%wY02ÃM[<=ùFBu!] @ni ̰Z ᾢ)uQP:ᒠ:(Цl JSB3{wݑs eչ:m!=@Wr3_93TjBUv٬'. P$.( ߝE 9_5z/b^.@K(TrQ "R1 d= dAGP) 64]o 0wxGò. j GB:%򇬧SOwҤguTU LENc t )@"4-d荻%!`6 @h6Kp|ݙ&݅:4? 6"3zXR*9Cfzq[FQ9xM)H(ՑzWA=UP *'ޢȹbP#Ih>ZI樥4tå^)3`֓n@hO1AEz8'_Vxaf!#t#GRx!>(AF~X9&a.wl:Ms@ C.F`9Y5v=3P<3%rk+/?Ky5pa4h *0BM.a^t ->>lF6xD 3HN$I2^ Kڱ@sOks~5 EU0JW< 8\~T#h=CjU 6Ĕ9G#wBۨ8aDE<kRl%Ʌe]J[i?1ƹ8Td1eWQ@~(bXڕ\Oѣz#fa&V bR$khq4EBL60 {65\`ȓR҂֐,+X2wp\lpR,S␒ i^NNZD:FR$MQY{/89u h#eőC fMi)-63]X{}\DG^94e{piI\6sMUOƠX)`X#$͒J*PH+A7_ ŦF]J"'`FvPiSdI: 6RRރGPש\f]Auݩct c 2#s}^]\AL*}߀]@Iقfv޻x Nb\k5GijlH":[&@'TqC[u1iug>8KGUFu\]xR\8f QŊ)FI۵TkgzM<*A"DpŠi8lMHf{GACTPRबNɬJ2k$RE(ҋ`/hNӰŘFC_w"cCt?5( $ ]ČU:KExq< 5ǔusˌ(5& rf"☦O`ˊVXnqB[ϵOt\6޹*LU]^}~VŔd-A>ƚ|ʪ"-VG;v;AP D"j@z!ic /} _L(fFTWʶCkA|DB݅*eZN6;k!V3>r[y,'.P\@1] jJMrPöh\5$R7 PXx%=#v\@L|w˟ Ķ4,).m!" A9 @Gi p[f/X 99q.uN,#ve f"Zmү3/n #`(`jn9XC1G>K\eEE"$FV&"cP ͗!jδ@Yr"P:@A9`$\uG?d"Ce0Nrнrr4( bnHIGY@wjX=Z'c@~fA_0~yks1B'Or6gw::3=iigګucuzz0:TBuR~LƯl`HnU}1F-o޺,*p=w,Za=Zs9r0>Ǖ~5&Ngalgߖ[fkx}[yPOۜucx :>Ӑ,k=܆grd=dil:lYWNkC4>ױGo+:'Ð]1]Pÿu_$H%WJz]:P;Uc|r\d{v뮫237Rd3 CY{V#!#c3 3s}gW\њ53[sЦ L$ƣjΗCuu0 Яּ #:|Gcמ_ uozټ&29`uT#yw=_V(doZMug Hg;|s:Qְc~/Qcp {AFP_pAQd\uwl d8L {ljSަY'at `=}u"OK VE/3VGz^T/U  \>L/y6GF,d_[5<ꝭx0;PZxoѡ( A$窀r3C1FVZfdj׊NdAk b 1N(W_+xGw|dbz~<[F SD!`!ro~QN\oAIB(Zt!+|x:zZcnjfDJYXb1Z5vb|_p5;^=K<;@Gf(Że>U\܌!;~VnO^mژs@D#SƠsLC 8JUy(! bۮoa1B4TeMucXf]V7/ќ&t;3 ٗ5 $l + ]T "s-sisתƻr_!szjOA PGF=z-F 0-3/jHR!!"Q|6d|UTTCIA>5#7 I1`>/O'S<{QXk,6XJQt-GYͫE5|Z f3 \HzAPʪ?C&]Nd ^6RMjωX]>=ӫ}U&Opc7jEҫ.> ׭Zykȕ#]3kU b|Yg9y^Pf`踲y 3|n6OJK bz_kI9ra-#L82T *Kj,HJ`FnZ}+C^ߠ'FZ9s(:e ]f%G]Lh24Qj GiYssvx89_C ;ۀ}JK 8S|\z2`Gc9NChi>Pb@5"i7v$zE09uϓWYƅ"#`P&cN0uh:dCOA 9w 71]; P汌i`dJ}+ުQEuM[& 6Xۯvue9{c7_T:=g~w)KL$Cg>M#TpbՃk:dmim᪮2--frb[e CN%4DOd]hO*hsT2 }yYk.H4|\R_%H8|t~uQչWj$nzNת,!>u%Z@!U9Vg($R)b+=pòFӏ_uy+jXP0rI]n22m|ksWŚ1bY27 8N7 ( H!6YIHr/G|99^m#fY 8kKoʽTNrkt$vQu'pU,*VϓVgqÕːUal8\?-bJD,a&]#Hbq0ޘ/Z0Y$}~bۡH`drnuZ- JyJX*}<*6Cr8g 9js*5!ݥea#ރjo1~e-dGH\b3Aҹ"!>|B bɉZ "I`yK1{' z0}s~5(\V% /!!Y{V*%2)P.q6v) \&5nW'ﴹx9sT:`\=) A+ڍT㔼Fiy(m5`6T| r>@GBPC"E4I#c_mN~ۘ1,$RIex?^.$ u@;VAXT(QꤊD h"CH'Uh} W wYC:À2QU垒~Iw6=kO?rU]H]|We-$W}yPB~_)6&FMg2YrՔ#bX"SvX >Bb}NV\Yf|Fp$2QjH!T\Y+R+CH)|="ʲN+<[n}j ]S{;g=&7x7(~FK %kJOfdgP !CǥoBTR ]:x9*G6[~kZ%֔֕H?4"eٝ}L#[JteQcK$,7~m '兏Z=dN[nՊTh}1ی5Mʋ(jYǠF$JGC^F0 IuɓʐR ]{YhU*hӌ k #20-c{ɍNUb Ҥ_- ]Sʼa;4lҨGRAkm]Kd2% ΂+RmXJe6(G,]̡2G:[Pպ~diyxv)fPQ&B _z Uf>Q^`M) iyՒtpZ^c0K~Q~p *_Y~gI lv,P?lshH Mr>ǚv+ /MǙ˿˝_L_FH=/e(zcD}fj,P>}bR >*  K*HrY#`g~I#JJ|}{2aӱY*NíKʅu((aX3S Fjb};Cyc&"o4+ur^\);J"܄l.ܿsxHH$t[`աG_^ q83$98+,Ҷ#X5(\H @`YV(Ǡx-Xq]6kC0C"BHU\?{97ukı"Vj3۶*M<| Jn@qiDSZA^N^EP5>ߔ`T>6Ǟt;Ek~rz~/dsqï.FܽLƕ*`ԽZ uND@"Mc)`qjʪF*({1r$}m5F4);R\ LR|C>kkMn'?q9zKG(~cDSjjZPp<(_OurHO\<5)NP'>xoq TdĴaxI#gʛ?] k12*2 AȆp2{L[Qi9C* r*e&UG%n P) Lo(^@m{!Fpϖe'@|#ns !5iI(G V` * 4 ɚ@u}ML b $.{ҦaɹzU{:8*ⓦل%3TRkiTb:11FB;ٚ n"G/KRcTvMpPiPbl#T9޷.2˧2ZkR]qA iQ2w_bƢWHP%z@K*z*A"vmPS-G9=:os=ьIݬ4Dxx'&K2{ȃDXvq2,>#?Ikbږڢ?WW_v?NC‘$\M # dgFB@CoSwPDe@wL  AK Ѧ,4]ysuuM;lizäqhxe|8 @3|JD%Hl9t돓{p.z?ޝv*' U]B7:پ{/H>B] )+(;ӊnOeRYeW 32Dҹ,=%tjȒ@{UR I,ܣ\=b %KP3xTts_S.g" ;zkg$XТk*[N ^8f*uW$=1Y (I9:Q.MPh嚒{+_4p@sũKc3>㜄cϿAS"2*74~- Ki|wăpǛ>4dD)Kٸ˅%U/:$a'uCc^{Ԃx}=2s\9 QQu-6!+J@iCUPK!:b[ بI $[u _zy_L{0 $*O/.|fBcz-Y:MJ?0/zZtVzS!) oj#Rk&/+4zѿ`nĖ./DLN5!nTi#Ps#5z$ AHDWav:M,˹HԂXR938VgʊiE7R*sҭَ?/!6%EiDYZOUБwWUŋX7)*ZR%U}Q[/!CԲ~+hȎb%\Cص-%{2gy@['سZas/1R9#t]*Ł {rVI 3^]dqK)_s|xg[CR9|ꘫ!xnRPZ ;4wSq́X3Cc_{iѵ FY&S"d H*aӂπکJiIRW5L+J!\ncH=Bh H`{,ү[;U?<b0:4l/L#~V@4̃>Rl] h\袉Aћ![i41c; ^?x|o Sd!񯪻(w'%bFIZܭY-9^nB LyކXmAuMDsk!]¾`C+{"<[b|B23,w`.*PHn &@a]w(SD(t+*!-_UMZE[YP1C@2 Dt rO~O!\Ľ-TApHUت@P6lLanJ #"OdLaTrLYuu:"l(mTa}f7*9;"eI>yTE!nPbk91:"ְI$ ayAz#c&`!0jϯ=}5o^EYO<D<8'֌@RhpWa>nֺ:uɎds/guSTQ6KearVD PqvtfI;i mɞ.8Mޤi[ @4Z> HO!#ߍ$0:/J¸AX$ xތ IBA#P9Y,NHK4o0KGz(GtsQEߌza kTRIs@fI83eXC OՀɔ4^_v͉?$7'?Nٚzϫo3DʢO!7x3y6Nިd?^$Bo06Z{A-?u7A'Lޟeo::3!4?uNkA)ɐ(U{HsGiy'aE-,A2LHas#?=&zUh"~ + 0rV{ D5嶌|t_N lQߖczCX'ޡeO0[s*V:ҧu%|;~v5(}U ]bol6tV~ewdb':oѿ~P8yqT="%{2_!׬>$OP:{j8qYQ1_/O3c$ssfޖO{ ?p6%Ӵ8؀I9o@Ʀ<6$,8匓.^R6gY6?gQm\_hXb 1L?ߦ²uuQ+Kv&Qە)$dH܍)jayK7#ģAOŰvjkfbw5#EQGhyz] 9.1=0*JFeaD{<A|C&;oiB>73l˯ő0`LUET Pݔ7g{^W*m5uTDߞ9xbN/|>q6Å09]M1o5 ?ɉcnR.?'6H?Ceyw~?)wO:x?snohsb۲vAۗ~B_>Ӑn_=Nԓ(`*'O/e&Oq}må+gXeR t4y_]2#? ?uhMڜ**bJ(~a쬲iVIk |˿XPP \ xgÿq瞔s6?\Wr&1Lrz~_/+cv06>9⼉B2A&oμMd(> ׯ}|.;{mww|ǯ_'^{|rK|~gv P&o淭璏 .=RJ؁FK*4%mgoNeѩ?6Oϰ;M| |KgWǷBy/=}^! ̂Nz|}[`:Ο_C٨i "=E+b@Xt4} g?>2R?+;svnCGJS:v)\yD;=0,lJƖjvz;{)M52u`j{^||m { u~9v/n kHs?kc[dZHAf)ԯýu>1.7 ǂIl>}z_/Ҽ~zK|{ݔ"~/ ӫn]N#'%~խ[տA :_ӹOU%u.>P'5'M\GB *b=mKJjrDGZcK,SI0׎885ӯ$JbL5= x838y\ _!C_aGO쀤iP!ɔ*{~J{M!$[|fK$ 'h1Mg&rIL T_ww$G3}R`NlC=CgH}їTA $S @ (i#mDdDSɧT)>tGF@x<f~ם%`{By""8/P0TpVT* 9( S4ThF[Aj ^*$ޢ3 oRd׋ECCΙM'r\8SU5tAR4|h_NH 'Uv/yh8DȈǗq?(sI k>tJ9~#y?g[ɀڪ T+;?iEa~DZc]rU,":'Zѷ +KĒ I޻ W!,B?1)X˅Қmy:;lȷ3"NԜR;oנ0,F\/мy]*PG"d.D&02D+a'0~Oˊt@(?DHu„:HTX@#;r KHd8Z(9 e2eCX]TV_9ߧc?5!am;U~Bȩ)>_/VcqMD!l. T `m"Ia@*6ՎW"?}]rG{'/k IVlҭ#N U0T䠜LH"nЏeo>E zN 30|;Q[Y ~[Qm]$f`cS!OӻT~˾dc[<˰H0 79 Ht1ϧD)}ry Viஃrt0jBQm:O)&$aM/@ud;*~c d`'_շj9c4c=]@& [~(@Ψ2A( "#cV+zkq7*(wZ"'RY&! ;ʢ')ƐWK<; c[pzќ@@50S u'=Os(7SGɐ)F[Q$4(x0!Oݸ2ܦ9M.ARJOApGe)ւ $ ,G>O40Qޗn7G"J Q@DD Wg:F2єJ9,#\Y My0A~pl nHې%DAӵmKTAv9a. (DcEy%,'j;V8*!N k90hc`Ď#15`G NN.)E>qE)("Qq~5o)֩c{͉qZZkKfuzڤ֡b.dI! c(!tAL>$Orx 7$PIRp&U_X4 "r9@;hZ3Yh]B0z&n+va8!"^䂳Iz+%q/,8w- .ϡK#%"l-26@B.mJmgTe+aL|,%DYF9]Fg+M)#e(*Egw^ hA@@)C'L˘)9tdsGB/P磣ʪ6^l#/$TK"Xu Ltx_j)VbT}GG/J.Q?$K -?6v >}qI2u(AbLK-=ZfR4vODa3XQM<]4_i@J\V+T( `O+(թc  (0r#.Ƅ}R*cp@O I(a9;>Ɋu@,C1*hW$R}TP 9_1-v3KV]_B%Yyv1uk-GtպP'ReczwcGYT)l(Z,K [p(%(e.yOJ~6C  5 $N8_Qv} 7TuX=mBRtPY?FX0/{zO{<9(. Uɹ>8,pw ='p]6`yCT/ol?{iDY#0.줒 Ld[9|~MNr\~P1h_%c>lU@bmG}[$oHoBJ O 8zKf/&A pe= x7WC!%#-*8~3}ZOҞE*P|>"Sh'EV|Em|cܷ)`8gmj=CC&XDG2?ޡBde#1/]v-'@-|izEZU';7Ǻ~еWf[7rBUDA;[n!"|XrY~!'@Sy: e8H UFAodHI7S]l;t_'u\˷}y?  e!pe锈jk.^cDr"}0Wӧ!p#8 +IzLQ߶DGKA{r42ĄH& O_k% }.*$U`˿w֔*ި#FQN<2\;©{kLMql{ʠ 0>_-brc,^?f~uMwR<-'//lqHeHu ߙJ;*j/!=TcB ТX d XJ9M@r/sx>&t#ǝ +vFNXFqM{\s zkh$w{azu yv v7Uglڭ_=PzH,ԋ&^RYŜ@~^Nd n ZP뱠?R@n*~CDV$ zwA+啟 ΥiL|KݻQHp J!Q"N(%;<`Nj2+*LS A Ž2K?09BPO0iB:8Q$.~vwek͖ 0 zV.~5W7z١jLJHȞ)zʚSqsZh0~\Pt(ݡgmQpIUYZY8pBkh[n12g5t"D ],[H/GPZx 3?>1 0q~ 4W! o&t.I&m)k`5Qe F]yPg@- z^BtaadeePIJL0Y \ _4zƖ wƕ -5@-MڰLϧ&~Q֣v0Pcp0Pdv !30tő+E/`\Me3݀YWL$r"@^SR5 a9ܰ})#dž¯EN&-KsvGvٴ5ʬ&hB|qiogyA_Ƒkn/G9**L,( "~lgwЍqm3{L)OS)& ( hHtyUϕOIu%9JNcpC@QD= 9  (4,2NH"CH:6f~`:RN)*jCor(>|`@@.C? ӇOᷧt65ҐO?kD3Vgoݻݼn۱8j'1ڽuvI+^$@zt?:v=@?#e%;޺()A9OUDU)ʇZ>a IPڧ/ĕ:jpGNjJl_~ϻ?#~>O7ۮWfq =vkra(#T@S<o)IE$6&_=ibIzUCHD|R ~,̸[ה eK(AA{9!仰=7o*12ߝR 2JΤO' Lsd ?4:Rc"CvNBc$mGtq|Z%/tzi :.FP5rv\%aj̢ZwDqp< Ձ@Р#w E)P$٩e E @ة*&Q4s1iMg0`@4ylH"ThOFf2 "n᧯yXxuA@_@X`_ET! h?huDfz3ONs^bIŽA0bSIjgD8(y[WO&쩥@ wK H*dӱuO|(bZ՟ڗ=YקrtO'zMSzx_j`_Nj7z5o彟_F:C|_~ 8!zDwVU#a{h>xK;_a$"8=ݼ>RQQHb+]6cκhpA}3]UG fqs~5hE`YDR|?h1_ `mߓU_x8zONħar#J_ +q=0ZgU^#3wMMq^ ySe4r a0󴥬6:`S95ȗ*s̉Z?^OnyoY JK8咍NTYaKHWY MUOG⭫ 9ƢJ3fC?dZ'yRaH:vd1p?oHzfTcZ8㐋b:iu9h0L8qH-,z.vh )jX% H5ZNo;;$gC@:p@E 3tD8FTh2~!_sQnZ"P*-5YJzaCϾjB*:fzD+{}U̚Yα=qKZn&o-X@\< Ġdk7"ʷ͜s`Kjt"6 TUXMqt;BX;8Oy0JW?Z~!B%0QtuIk˱ {Mujp"cْdQvZ75ǩW8 u͆,:X /djjF7=S>Mđky 'hW(ҙI_J $S4dqKO:wc 4u>A͆ 6E-,p=4M`0Qn> Pe&ssVwTUE̯ӳjb"{"A`!(\PZB&0+)~,ɔy\dه` J/eHQuEۘP8b/& VrUS& })4,d(p?@>|Tc\h5Q~>/"׺Cba'~c[xi* LYz6p 8ipAwo1Atēt<(KрPOQcMQp4~9=5ɨҩ/B1Fe7))p,Q ]lo(/kuJ$HcXeXVփݑ&bnR 5}(і+OؘlMAlԾo!`QQcϏL]̉l?cF}^POhAڴ3n=b @=0G 00=oV<TU}wQL0w$d˛{S84 q@.#=ȑe@HJI'>`c/YCuQ(i2 QS|6  +Fy$$Y}9QBEU z٘ WȮ'31IMPjL~7 ڃdE._Pdp"6*=:Vx GsQH,VS;8V23TBu~yR)%[# V3$ )++w2ZEb# yYb->Ij|f6)q k復҂2V(P; fiL[ecR#]+ a7x-#2a Ge;1U\:v7qd/f-6TV6 I\A~"U.HU|68bOc)+{G7R|dSgMyO7f8֞?gl杤zZ)"B" *cC)E$ǁ.OQEZ" ( P. XO 8e"a*lVfA) D%H%JR% a[ S%C,w7VZsy{}?st9 ?h3#tA Zz nTA@>P1MTOu'_40>!!sI'`L~ZK\7֔Od\~{L wCq䟸N_?R((*|a'@==X>Gw3I͇8<& :7q>aSK7XϷ&pD,]oMOsP%UB-Lb_6:%lku(30߷vn5x"j pj`8qaNFJ@6$]ntg;J~qr*F5a1 @s@qGRAJoG_L &25rØv(hÜj,PG4|{{wTeGA?Fȫ)RCT !#,zU o/REl$8%Ԣ B.3oHр`l@@75κ ipD* j&Ű4fcIT'%NL [tJ!ID\>Ng M˖ύ{Q5rPgO-ۼ/-H\ #'}z8+T:$ē.0Kgn 2*?0Prj14yƛ4~)y5X70y+;¦ k&K-E'Gc㷀K渁zT/芛q¶=S̡]/4Nk.I yp?Յ51*Kn3jоi$PDmM;C{Z!MԊ@e+f6$YAp'_8d A+i߰A˺J%I53숙X4 Ʈ$]|OXYPl,U'odA[D9ę6+GN\}Qe"81V#roӪI %5%_^PM%Z9IC^4rFk|Ai0LCGq>nk'*] 鍝 c8 ?nIYĞ:Uwd[MٷMtsOyH:AК vObN!ãwoRM E ) *u;#Z @آ=] 39ρm zczvr^@UũrG2iV2 S㰆m-R,7iAJt}TD=(gܖu#m(qw*uQuRcjH/wK6)\'HZ6+9`H8(W?̘+f_kn\b 0M:"L)anGFFe,oi |"h |\eHTH0 5'vMZՆIɼLXd5讼+eߩUN `7SnNImK_kW TcWsEoЯsc׺aX:vw4~48/g71Q SzJim1T#[)^wSa֧zQٍLߎ J]\s2칑ou%.>^OH>{r\U,J\g%rc˝ύb̩,W[,Β6.A սe~m'CxHmT!rM30&ӭ^!aSaGzho(jq4?8iܟg*ʯiߢ&5#\W֌8[F"xayfT:}S> v Rj$¿[ކ^pY֎h|$ppcyN Ww Eͭ9.kJԙifFLR *Ps[g9E1)%42Ιaͨ}yu㬱o5S~٨75^͟@K$#m-H;ճ:.zQaԹ)tK1'8uT?#t7Bte\qw5T>hcHADA%Bÿt5!zʂtE a;1B@6}j1l: fYVe=>W[Q#>8e%6{tSz~oS2|"tJtGfis-YRUj?tG]%b˴C45pk:Oa8֚Yo [胣!cޖ\~i @!f/q/m-gZ|׆L򋜯4&dwYk"NsJΫJ5./7Vg զѲIե1b@qċޏK9 ׮y8oy78VM;^Gb`Q7‘>tC*QpCkUYh!O.O2+4V7dfWkRMO-xF45񯘏jwy{h-Bh0qbmn i|cjY(+o7VOƍlZ8 Y;͢_x6}Æ?g6nL ItoY!Vn=))&4 aU3gZi{ߵlN nXGlbwHOʓuS}o|0cڜ]W-JIƫ]faCYid1e?e/D++,TЖ.~{Zqȡޗ^a_}1XԩNסωOczql*:Qm^&aw.(/m#1aX>fKL:6I^UtuxyA={X ˷eﬥgϭe3?kRi> %!Հ:-t)V!ܢ^u`)!u*zOx[6~EĄz7ڵ -Lq+ twdP,U-ul3G%ugqRSEO7jgnmN1&Jj^g. ] )g֭^G=&.sJ_)xN6YS%ᗷ3ұ'ߚtv緎@R_Osۓ{e4A׷\묹7jRq1wz.j} !lŧG^^&.i3SX!]yscc>U7rv8 __y Ly4ZxVb!O.:׮6(Rj:UQ@Rm!;JLQ98| z6X]Ϗu]XO/{/6Ns8c/yhD3# ŗV2AJy=zo6ZU߅BG͊>(%)zpl#ak0G3ScZdAs,+00i fpS?ҟ913SQ!`3#5b{ws9 VBk$ 0dhvg@{ixs܂PQNU'׍Mo wq_Ow 4`}ĩpP /U ',8f#<@2Y70~/C<6EPzţ015PTwSAxA#baEEcDPKu< :M ß22N= 9̉a6 AD ~#E$!!TM'>W*YUU0p @1!@AzJR'qۏOYH.VxD b>7H,y!" 3ޠq)9t:|]~qddeAA0caXG}0Oy֮1C>'!J bJSYCqnS(H$"zv׌ i%`* iW.}8d: @|P8v'/:8z2&Rh Oce-d#@9!h^x# !-JWLL`jk 'EKs)b(( "#30V گF?fgE(!@/*&6pZcT~ u ȝͷ9swr 5'v\ [fj b?yƅņ$sL;u4>HyHR@˞ N0#o{ 1d-KQr3 *}:^Bizvʊ;@DAaQN=iP$i\R%0NzCwᩰ@<~4fߠ<6a:2P<ݥxb<<yEm~<Ӿ vrA+_zyM ;iV/`P*++&7\Btàw~N~oYx:@N@.R\XvQf9]s2Ȃxld@'cMgQuk'*URXG>~9,ΜOfiND,WP4Uw 7 #" ɽz'/Y߮S0#A\_ty?3Ayɝĭ%\DfGzs Db,cxH rL rz`(;DP%g$}Ra P:gؼ&H3 807k0$^vP1߭rDRHL{>-D$7,d$wL0br _ˋ?H߽r &6o>멨 9@ăH"M~(ίc/Lb vJvQQva]}12,.e7NI~h|S~͇0/tPt={ٲ ycÒu9w:5EUʃr1H8ĩApl\IwF(@jzG`\K)ʯ$M9%H9>](PqrHهzx>lWN  B P7jȔQDB:" 5f{9@A@2P..+(Ij'Ň`:0:vi~GOmm[ @ WoN.ۉAWa&:TlD :9&eDnyNcI6ٸRerg:K+|z~z]τ`}t~oǣѠWa`P-00{*)1O(k.@,R$c>@%bAE4!Ϸ;6cG.}"""K 7P]U wT/$țyR2t>ЌCGm?ruS}GO H5v!0' *'$a :I:_K?qGMnt(%=?\>{:T`ߺL8@=[VRg_lk,G*.n~wz ho׸A[sz @9't4DgPAF)gu*\h ""{ ;J )Ξa4 rra`|Y6Y,ԑDQ!S|u'?Xu7OyM[lɪ[ E:LGȖNr M^^ʺ_>Myi_(A>8|(ކ 0z05~ޝ?2״ @Qd@l٢G`2^qrd$eYꗑ Az"U4:|z0CךĻ.3O; f8 _8_ Y66/<9@eD?P|mf?q?/ݷ.M/jaj`,0P7?۞u~>$NQ٘O|濒*](A߫.䈘*I5!_7:;7[=MAڽ'1~lacH4Oz:Lwse;%%:_d}_{c~}//xŞ Nsv40 " ȿTvE ]g$TډZ?##NII/}C[ k%NaA\J'F0+@`0"3J1?)+A  v o@I-y+}۴5W_wöߔ(:Q:g8hjO" X{oO1^ap` Aa5#"*)P SH! ||01?<U fAK>NҀ/`6EA C̈́(c-9mR=v򳉋6҅&n@"$KU8Q%W uAeN jF .:fp@tj9 (; 0QTx @Q-AA''02+J#S>\.) hU(+U9 JJ$+1̀‰vQ @` vKN=|!ru`8Q% c]spnDxğY, {nzpMuT6b@4З~j^4 baGXՔΜy7o#}a I.W;pqF7??χ0p`)i >f1S?V*l+I&Ա9 y+zDyѲ;Ynvܠ$4/ʎ0L612D94Cϯ8?*|pdn:Na)r%_(^矛Di$E((!U~im%(JV^C7®KXJ--sֱ N` M;# < ;..t'dh`$I|q7y#)u| q.d&S$*sD 0aٿI@c8s< n+wJ+%BXQ6Tuh02 q Xm3:_,%6̨r 7wI:|tl䇄2y%/ Tlgl&z zz棃T2>:u0`8NU"bJyt xo&)RQ$ؤ"6IdE!BdRҹ!Xk +P~`o4pȬJS FJw0Tc:Zڌ.e۟f=0B,9|0dTG!}7BCKAoT԰~ə@6K6KGhs_9{srN^:r AKYS:XCqOq>|qTz/.! 7ʟ$zdEA@JS'Th}'dƒCBІC<ևA@Yw)@04۶% 䜛U&DGPgH@abJ {)4% hiGi(NHI_'q. #Jl)JJ )ibJZ"hJJzh41? `װm5CivΔKh|\KU'&rAd+"*%7Otj)"&NJ4he^yUmAiCIQdHu:V'TS23䷛G7`Hۮ3Es44~L=P7a[j@ 4wKBJR%&@ۗ))4 R|i9)1-06IXы>!(BP4uKSM my+3<4jJhLJHz_e>%:@%D% Dm3AкCH%E M6u^Ɗ (().jzZ(M%*ԙ U `OD-p**&hj̨"~Ҧ%4:N2ceeAHVM 1 􇧫/8uIxc듽Liß'ݱ'cgO+CFSV`f@C]E>u lf'^ bp'PC4+D/~GD\V7{ђח|Yz\=t& vQѮ«,ht+V < 3>^g6l4{bOʗ`8؎>Q$#{C}?* L u<G ~￙>BeBBo?~f$7Ɂs]4oN4kblB[$` 9횊LAAHGbjSkL&'^4|2'B!Z^45 4TD`h>uDzeR#HHd!T!q bA1W<b 6l5?Xlsnؘ>I1tO>'v\?Qk~Pcё $?Q #^(|Q$+GU fP QG-V ޘ`s`xM@SLtud̮:p.C"꬚M͍:ss'FSå33FpZ1"5T4Dąx_|t|]?nQc螾.88_AFQs~yxa˕`gF0Ԫ"UNBaY- X$#(N'Wუ ^VQayOH qcVEPcƤ|gbbv%!.PV.Xf.d6A!A<9oWw{>o5_d`H0zs,|٘NPSo:>}yvOJyx:ܰQR\ӘT"(y" %Tc-Xt( @` h0>DuӬi"{X'L &J@5s"P P"7$jA kq.!dνd2A  œGT+mf=^Ģ D$[lBL_SLj?2$DahQQFxLzbI(:PF TQ4)XzDaŰbJ61 ͡Y'zĉ41F ]r9mk%[mKjMar4 g(}6K)$G!(P"0} O52pL^0J1CTX#suӇhNGA#yъS]p7|?(Oa)aL??pbAј>@n,)wx=8?r"_ P (2&TS d| >l~ۏP٭l[ϳZu֟Ljd% W oؔ;dAߏ>?.;Qijt~C2voW1y`?6@CSxCv8qC Ѱu;4z/#P7=<8N/L)gq9Џj'70eL.^T (?y#AB6 |4X6"1 ġBuo?\`6E @m!d#/~.1dcH],7ANy+4*OS%j=лaA)Ό=}`y}]F\`?(s҆?2zɪp$Ԓ%)]9A0s'iMOPݻ=\q| i_ SDv S_^1WMy%>r0:/cbgH nhpU͕??RVzC)CwmD;.QT=Ů"PTp>f}˿=0aŒ>ϯ?>i܆I b0_kє?`?1Al k*QB WT0>Xqn?DLY0l=~׸Cw<T;^2%6xms*el΄ZG2&i t)dp_pM.jBs x1`w`e^]ی؛Np7(Y@åAL fDJc/벪F"PWw9A yA3QL_24A/0DzTPJ{NC }(0԰)=f3͘Ez݃GX6Z?l%8Cwǥ82Uf8̰,W_JZIvHBeFC0 ?zBP܅Z( K&rjtw>'wAs~0Aoy ̟xY Xr@ 锺!:@˸d?ɣ<>Jr/POtTF 5:uS_aqs#g9}Gsj.6[h0R]J_+\$ǧl/@|uMv8Oe|j ;o,=&p ׌0ɛ{Dzq|+7vO۷ɡ{?_0@y 0<.w?<0pIv3u^;CdЁ; pLB$YeA=.H& BMt\]YvO:?V_15O_f4oQl 4t+:b?ru. Z鋘=s6t=㒏]5ד"NLN>+?WZk$kMlQ(@ @j)YMf>?|e5 CQVꨊ#H$Hh#wc!F u<9'ƛO`|HRdpHݰL 5ZQUtO8QGbC([U8¦Q2o\Ӱ#6ym8 ݎM>{X6+_~(~7Q)}'i+6م {DH?m-lV/)@7;M:f]\I һu%| h*lO`sb9ϰ| `+1A9=}_Ά:HvX*o0(&ilDQ εMmNqײ:F9rt2E FOOHW%G@h@o r@xfR*(C9\!軾~|"sg /;gSr:a듧ae[JA,)dWO׀Sw<@6Ї^ 0[ (=(}:!j$opͦ"~Yq[aFcN: _fƉ6L.cׇ|=?$nߠ\W2tƙoPz\!0AЩ̋ i qdR?ndzx@X1&=nޤeۑQ\jxw4G>( t$S$BP+iy_ HXT(d{SQ}2`b:;Nu }z:Gg%}0ul<@J NBV_TA|;lPM,M<4^mhTn,9S/b3a@z+[,A2c)MJ$*!I{Ǵ kKU6S<oy?. vHWLX8(X`1&ee( !G2' A__1xbsq  y=T,>M#۹- =pe۬G\?Pqȧ挗v9ڊ98'%J̕d[V  Z Qe? {~玿ׁ~߿ٌyP|o > }O{<*-• P̪&fș@gu|b J? n(@J[ qcMI|s{Oa~3!ljjWcƽ<Í1GO);γ{B(bn. @KBKƓwj#k|I<4lU=eQ5IpglBpq.xt?*nϷg:6l'8(qE0qmr#f:TUg9xP@}g1MD℩(8p|90qAF =Ci#æB''5/?/[B]4b>"{̇8 }00Y~t %> 53 `yݩχ{yG/=:5d`tDNLGܮN>SˉhiP"bQ)P)%!@)qy(qw"n&Pc41cvvg _U/WJPdGKl̩Jn }1] N PBH $R=22'pt~B7~@Ro 6xqgfqZj)8 \B1VPSe+$8 API6tT}XNx~χ?dǭ#C8=D.@#}9G`d8WA_9ćn>cpgM`͙9p89txr3<2Wj~T7~W@! PGHd'Mr+˂j~$.Q~:9wn&p (}@ #;10}G[.ꞼT3o3'OOWL_GةQ)D1a9kSӮ_'Λz't@zp8DzX$jJ>ɻܚ\߇W" )Œ1T0ގAV?G*gcq8b!yBP/>S1&M.`!;Y"fumk^O1>6?h>w28u8SV7l<` >fMDv#2S `R\n6kI`7*ÞKh<0?'K:c1P}mN+Sm&@Du 77sU㱍˜eʍ8m˽ "V(U ~$6:o@~`\P gM^[t!ڣ,s:# &M^:C!ǻg{{vB${.cfx'~fZf㴃sh{#%ϓʄ \H>;Ꮴ"3u/j2!ݩ0́ ^/K,OLb/׌AN ~=o:bRHxry=;z:ձ=5$DAM1PU vA"A&W1'&t$Jye]np~뇙ʜ!~xMQˑp9y}!hkңWYP 9GT sE@dTsR -Payysso s㯂+OD'p(/q`'Z$k|Oe qPǁ0C}LhB2'^¿]fgF#RP@I2c|($l&;@0yrxz3XGGM@nݔYÂU|&P,}Cs*/bM~I_vRzoFb`2OP i0OOq7@ wBѴۯסU`"yO7C}yvHNAEt=I\+SJm;;DQXxփYz5wu}=x.6.^6t"أ3 y2 H*#t(cΞDEjX#jps'˞0yHiaΌ{t4#> )pVU>p~%?BG(擊"}]zdǃw 0 {=MP>,e*1O,`89a]MAռWU]zN#Zztl!H(Wnd:2,*' }2 m9:H:Gb!Enû7Q89F#w4r܅ LBD4 bP ~EH4'"sHx`0!tzy; 2dtcNsS7}yct}G9QN V ~v|,00;OQlV!bAO$@تg1nٰ<?|0TAOCU8@skez ݏRӊ'֣.:Ng.^ ~7&E` j??2I'P(s 0H5#XYeZ&(VtDD15L{4yɍW\?)oL HW8$TYrCљ &%@UW^'Ecc4~po8w/E4nSp?2CueسhmLV./Q=p1'~ ;$$ 2 5 D_ՑD`=1+uzN;ci s <WPC`Qb|L(ׅ`1ϜÈ{d!w[m-4#aY6O;6` Ƣ~? Nc~M2-ff3z8`O?WDGgWS?<trt8gsGvOb lE,ZOdO|GΜx|mE;UC(yQ5 {+0=CһGonQW:eAF;MN~Qګ8  IDO)ob )ޤUIձ:bhicǴQuQlRP4h׼"$/c o|-~ I1S1`8>Z0F wK R㵀.@6elO> s94fʸЇ~ 4+0J>rsjSs,ch )&"+$=,E4cnxy"aλqGסr'xmzG*1+t2i\CN\aˌ~CZ{7^!NL0XݮՐM1Qa)1 vˬNc}&nB BLL@?ofhL 6dǏ~bҟVd߽80SfN$iUST#t.ȼ zJm؄fp>C8)GWVe_phR$xv;ӿHArdaNr7aZ5>͓Q+C/A6`iPHJЌzT~_~Bi3C:vLkߩuNZ\ G^'HQy…B2B;~%{PT_:NeуC!9ozs㳬m1'Vk:zSC'l?o?{_Y_Q/%? ^p0- HiQ4Nx!@E ?>n$vNy4Zڂʡ9Y*EOSr2B414}FڀS:ĸQj ;P6@8 Qmx8zҏġRg`ӚAOJj|ϏUv;zk=M[pS$8li2Jv}:R!I1-h" %Ibl ˩UbK5a!%~71)K7_!B8ʺD*qAwNߚsjVћg*r9\8qƝh)*8akKEeA(k`\5&نBrt$cT!'O1 n' N''&6[gT%όD,huA85AR ihQ4 ~oφط6ro޵OÌ8^>Lɹ~C (vyOt;#r vh=M;?&*1]y!*@F( ʩ %p4<Ӊ@ T~jC4;o L*ܓAp|H7`l 1-8D{Ñߐ9 CG-?Yϊ(a4DH0L fdI+G4'gzyA@I"%\c^\ej_f7!%rCMKGbCt ;>P{͇t7w96;r{a" /daH<}`($%9$}d@ ID|ܡ盠yxkѱ_"]N: iٹ G`vb0 #^@#,o[Z~dYͭ^#CQ c 0"l ϝm8[{o 0 ڌvMgP?A90//kgrӷm=y3Ώ:`[#`Q1ҎW*/ɂPP 9,'$}f,ÛU5wp %rsc7T'wr>VP ϯL8ʅRSdT 4DCf!p["Na `J5 "K48Tk# G/㹼c|m4}h"oH$#r4RQT}] YMNO_'dzx*UA0> |:8.\ㆱȾA*t2*5n)ґKYЕ:^??D*@a)AS(} !KhR+& Pj4"_Łw] wi-ذ ʚ ?0QDևz|,(VS516@*Q?-LtbÙm4v \ª#?84oboĈ墄TKkgv7^2"5a2$@ - ??%Q#GƮ`NcusNT YP*-@(prW&2;ar0Xtl}TW D^K"`deR8?liEj&P9]l[B*{ܦЙv&#!Do4~\|` ۗ"G5(p%Xe!'J 7W H%,z2{k I2U 4/ub;J.j pФE@b토0hfr,A$Re *ddSf4ZTdpAs~jCa.+뇋SsLQQ Q!Du5{elE[2' 2uUR Q.21qWH5$P@7nG;YwP0mlqM_nEٯks aJQ<’o^%$afXzZR#hGnA>wAoJj]t/"Aud*.)Er Tx\|WK]hy >mRfABVL A6 eC/|j(㛴a_8gh W"HBYZI0j3'n8¿/{N˗D)ce]Nͷͯ9"(2v}da2䚃 !7w!/FS%T V[U~r2FT $fw`ʁkz43Qu{' EQmO?JeF 9qS蜑Ptn[ex/BK(RP& [ݰ ˓%{}*[<.=F 7B!ȡjJއh ~2g#άMW;Ԥ`;_ Ov*DĦ 2!#.>Y,O͓b}xz xײ& Q٣N|1o+Q`㵘P^%sDEq, ø+TY?g?`.m&Jϕ@׭eZd9zy#e$_4qX'UiӘcrS8OӈR> o'غT?=sμ{dTi׽~ڟ:4 ADKFjόz1G3Uei=V/_:B $y^G/S*gLK ]WnSMÉG]<#/-A3k\;NPh<~mO} YXw7-)[-=c=4Äi?gO߫!oOȏ@`P?E1d_~xM%ie^nF[HOOҳvF|$z#7GYA^mWєz'|8ɽGdw<^W_m_|SOc%{;87:yyxP=Wݺa!?5ixpoQD/)@>bi׋?1,[L\V !z]i~#Hӹy ؛ dcکӊH)v˦,S*d|TGV׏蝟2.x6$9 iWIX]7 >|xmi迋4(|$(?@BhTܫ@qPd@O~"!8duEMP\lJIh?3(y% (RJ])6J(z^4' "CzO3ss!HЁ@IBִCCfIS-AquF"f,G8E %F6 # C?^t$S:b_ (dRu MbЎւBHhdK^dIj*@ dq R E-%"[eJy$BbRRwIPI2I|)40KX!0CPAV#;& 9%hͅ8 I7' Zm%`f*`ZjcFX9 `(Rc14ٌP` 4QrPK#,c&I&Id#AƲ D$BLaN$444 6`X]9B je t8G=2m6xJpO%)Hx2 km?.P:`Dθ 4  u+^G19D5P ҥ&˜r)*I5 <'HD&6=gU85~Щ - "2:S4Ͻ RjHM"R!+b8)҅ CrT2rUWѤ!5 Yܬ)?r<\JJ@æ jCWnzȚNa|FEb(`N5i8%yשԏ^:p5o:4$8`/1Թ&K'fdb%4`t%i>Mwq:zeNxvy\jz7n7g~m)ݴoz`HQGj%)*d '㯭ycrGe6z8Dž|㵐U1^ו_mhqhlOes`ea{jD SPရsy̰KY$z$Æ@D<1x'`$PARH+҅M!D}HzxD"Izj Pl\p6I^o>'ٛĿT}}rYj= #Ԭz7W8^P˺n(.ӿ?@%fϝ%w-R ɏZL r,Ur$\X&3Ny״/VϳR|itEDH K2KjP$&5IBE `XϘDq}$S*@&x| 5(`niRm"5H14@H("H!DN3 r^`ܤDO{'8\O}OQ(?nՆ/E}p-?'Sٰ6ӵyfd']XM,) rnK[AQH8ICuOt.R]q WF: wl4C@6Ο{(r<盢}fL rx!-t }ì{|g@a%TV `7}! }6-LliwH#6QN~6ÁqWN0[@ն?uc``~Hj Y>SL8z؂M ر2#(&ZH6?Y_s!ꓱA,T1Q @D ǿM]g {ZZ ! &I%@"$V(bZ ˺NYM>%,D\DQQ#"((X~r1 d&a: IìPN IItqhа.M ] l&$)IiUB"h(.4L #JH% 2AB=t9=K ZC# &FHP@ RH3(aBC}=.@a?r b`aJqLDAE0n?3w4OMDSP+}QZ yͮFA ̩1 I&2`%B[(D*Aҋ e$B~P(@q spvA~AJ콨i)=>oL10t'-CT%f=IJg")cD\>A7p>Pn?ոI.M{!װ MCFOf $a"& i Z%ZBY( b"HiR B$$ =DPvK9ߩw$١MR@LB&%ipM 't0? VI&1i |pHcqHxBЛcf+$ hY)` UD* rV2T0ևpxncuРbʏE{`~9sAnoxLl.i|d @eE!R#"}8b! Y1"wٳIg|?G(\w k"= 8s (j)P7G]ABRxXⓒAl g"!ɬpp`ݸ6+2juy )4vN8!a==ޣ {th|WW=$04HV 6x$O0(jC 2#鲥I%=sBĄ1z!=A ZT4M87+AB#~@ܽE RR4,MFbXh$&%iFF%J@ iAJ+_ҰAʔŨ ьzZ ~_m[mm+=Ku_nͯVm֭n[m;6JŚRQMжV(kI7dCݍ'm>?JE p/ R#Jb r `Qe=wcGN$ @0騣q(O҉19ᓐomtC'1}Re}o/ bj oR #DA|>7R$><Ғ."gBFʬH!Z @Ў$KB @ T"tRy*H1/B@I jX1!!$ T2TS%"B|~0ĆY 4\oY%Ji(@q .EI _@@/ ^>aFpk goy'@H][ KZwc *!ъLRu03!@Ӹ1;&SԴj5O$D8NX"#>:NʟO/ڜ,Vean_l,#Gv0"ƈ#wQ CCKUK$}C4B!S2~`BveC;vWTcux#9y'vj~W& eN-} -5l}O&09>¡~1 cmII@8?Dr?‡_.?:A C6v>x$zIyj΅8 tW^9t37CMDPQD@-QCA2 r>hJA9a"kQAPBD4"a "uYs25C'DKQI<n 7ʜ%~ry0NKIAHR2_2(2rosHĤup~6v|9vƦM%|<I(=ߑ vo{Of>z 2`gε#HD(J}?T`d 'ĜJbkz:l_Optw)!+dzCub+&rH ⇝ {P+8}Pꄡ}# ̕j;hrM<rLIfaD7OAk;3 b}`S>(?IWyq)3LєJ88cN6D)2M3{PՐO4"^s9<ǘ3*TSS*£ &S/ jQ'y'?Qᢜ蜛yA3MwWGC<9ȁWaFFz99=Cz5>opR ;s aG"}SP@B@(2B?ǝtD(|FY SRR/%NaJ AP&n0e98u(7Gn5{염<.eFs5 EE$1ߡ$ ͨA s\h #|g'l-$C1]8ؠp?(Z & (BH@h)҃4D&s5:@JPh1:`%fT0AB(ĩ@* J P$䃴+M H%QT5JR L4-   #hJ?̴0EIHq Yh*iv!ZI 2C! (J8L@v8,!FT6aMt#9C˭GS@9EEAqҜ7!U'?fd`n }Zs;:ϼ  ]83T\2(q@xdzƛ<9oMWp^s)Xf!eC Aaʤ våO;MoIǣpM \!ꟲz !=/hS "!ǻfoi 6_:! ]/I"IZ)iG t%ʣBE*1itt#%!OSMq&vf\&}lZoOH*U%GeC@~>oc!YJ>I(yưhhI]Z0Ĵ'`"fPq8rDJ4$~/ B:S7p&"%!B'"K1cנYX+ʌ`.tzs;3¿/d5CCy_l>8P_/L'h9>J" j%&6ĚB!@H*sJ! Ή.0Fs=qS4z0<H!T*+HЭ%(iB c HYPϳ~p!)8/ا( stɲ~y|ΐ"9zSYZ3`.4J=pH,ax41P @4M"RRD$T5JP0%+AC-.!|&YP1?} *jI1$HD%M(h4r4`C5Q:/)8Ȁ\:%){1Q YPbK`mSL0KAv"4XDƩI.tOf D4nۥ4,UqBD]ȞT@;#Uko`8 k,SSm,TMݻ:Ԥ]fZ@n:ڥf&v";m+9̺Aچ45mF]i-($ժDZGZtGA닋5c`Lp@lV,A@ ޼cJp&PA 30 gaD2XU1r7RJB@@HPI 1Njq|Ѽg9LNB;b&Mђ%vQȂ%!Rol(Uc-e 38CPM%15(0I bjhH}c $*a!Jd͎3諺o'&9m0mx;Urt,vLAХ`GՆq# &JP+%ƮX g;yA&.rkl[C,`iF '9Xv)K5˚gap諩DX:N"hB]\B*_~h @jzA@ҥ*eO?nbS@gA퀀K Za]G28tz4}o@4tuxzNR!V0MTSEVf`_dNtSY]IJ X1; ?KOs^랷,?NbxZ80U #ycI;jqokUSuiM(輨{B@`RGءsDk_o2 b$S`b01"'PDg15 k.쁙j@f& Yf6I4*bѪGmDt 2Dq`^4(JD@GXT8%"`@,0H-i4@X6v &HPoSPQfƺ45;$eg'V 6D&[KilUED2 }~(hBzj 7bn>C!7B4bLܧi8 _lL*^(UH{ +Na\'OK=}$iS6DakXb׵va׃ZBY*+b [ re*t0w:8/.3&𗮹RBPS}bWj0ɠvf}4A|91C}Q'攤 Dd:sC8?c!˾q fy@*_I^C:u=M9!:†wMgCocU$G !Jt%:bTD!p e:'ف2(kHx>>rE}9ݬ6:E.Hp f/;S/u56; CLX(^):Èe9@x 2)zm71O<g2BTzCH0P3*Uo 16&S%6҈q/)eox迲C !\8@Hߎ9 "f@w-ƮHg'F^ )GOou?]_^_.?_??>BOlG#0/0ֱ;fp{"IWZv% z? t? ̄n1F6[/4Xi{&q;l{yY?VTԚ4Jp]]."ER;i:Hv2BD^")ДaB :գERD$^M%B` + ;Jb)5kȟW(imJT4v- (@QOZ*{ndJ (hi@:z5f{9j #l8'vRuSHDjNIBk$ VaҚoJMQHxg-@gJRcyspaCa%D0J:GlF  M7U*b;[ pID@`$cH RhblMbą-R0`80% V, K%*AH/A>&S *T~IшhS)6/JGN?R;(>S]ToCD=Ũ"/Ey1= S oKߔt~Sަ~P_ZWAP0ؠmU޴yMOЪ61* a*E#Kv`ĊfUcQ@T𳑶G5aޭa9.H}א8v%(:#4,9b("*AIAB|aREJaPO?$>_~_v88kĊa!a C9.A k*Q>|Jg~^̑(HEΠX*kJ}UkD]e`BģyYR-V2B&fD "zͣ84PY< G43`E&p ua)uFϱw-4U4C(]Υ7RjJDOHJ},bخXQObl%OO!lLh i>gD;C9`9QF(%`2d&Ѵ0#YÖ$q 1iS;i㲯PySd|-F_Xj@ EO(|J(2!j_EDShбg@51(+,gb9ig@Qj 3T0lSOTSc;1F fcj& (%)c4SbQ*woJ]\ yb%1aP(a_zb.oM~xO]_ CcVD~E "*%{NyC+|)ƛIj(PQA@$AH(g=`(P=y%d0"éX6UQ ,Tqk?WCҔ,<ܧQeq#Zе~6)pqOuhM- hbST } z:zTN#{(y''I|'Z SHF% } :1 aj k_3" 2>gT3U` UgȞ3D cBj {V؂Ζ6vԄ]}I $Hd=N4Y1Ǒc]~?ЍH¶1%nXd ??py,!MWXb_%-"!pwO8zYI=nxsÞDhF" AA̐Sh!'U?g<ƫӽ 1}xTj{8Qc*-n²@$ {~?t8Ri8|JR_ѻ^jǬ׫>&Z"^x0 'R0TNvij) b9E㒚&hC`щaLQF"6;B\{i 씛BJ=AaL2g:a,U:h CZIADIUWFzR(TM#QhBۂ 5h]hWyO=NN "4feCw_$=]y1p8]za?O8nH+6v&iMԣI lݣI&`"A 4íhӪ2N8kWC;yx7Y2Cv` (`E0 !˩<͟/o<'*"h,d nd*B]LEactTF,B6lu(3gL9|!p^?Oɿev?Vwu4n( OrrXc=x7Y8<ٳ\n*l>"$|@.LRP| [B9GqMNpN}<M;wopo?1M3TNÇ$@48T0vcJI=*9 /ԒSޚnaCUCC e;S;6;l"~G$:ptsȝvuq⨁&`:#yIwטdF] 3%Yd^9jmFmYj 7b  ̬u C3hDMCN$b(5C"y)dpSAEn8䙷@vP;o?PiPҼ<\RM`4kζ-m Qy cˉt {vOd,\!:SD8kĦt?V?ohv΁߅; > LFɷ?h}I1I;! A0u]qMAn@rByG"q cPÂK3FJ!4!NN\u&SMEp]NkU`PI~Ȱn4'Z ;6*q aJqF,)* tt^ݏ^ݶl篱ۿIe<Ge_Yxހ5 jC|%~ Cmt=% &\S Q 3_ I`N z!_Ɂ;xHPJ{G~;oX2||p?K Q9!?>O[`xUU_Ԫ}?BPoЧamHs@85/Ib|:gYl#ܩ3+@@X=/k;Tw8Ny _@?6u3}ɞwRpg9ǝ;0 n8#hVx9cg[+oM*-A`ȓA< ui1ק3a^Bh`a1k0ؔ*Jr> p5#RA zyg{jE=iR;ZOSu0Ǜ F{sLR1 =~Lw1DGDGDВ8=qł1jGO48=}`"_u{1FPȴE8 fE ly]g@'hגM*0e hb+Ա>8yZ?{[#oU/H/Rhfg BfDO8 T%+S4TlJg̷0, `Y2^\a3|Du^˖4EHi-EAk,9`{(*t>1Dh):@HKc^߫&ؾ-əz;#G̿U4(`tHha  V ]PNlȤdgp1!#PH$Jb`T:kHw7zXAouw~8z;C] Gf"f D!N;Aq ;0&4=MîNg&'DqYGo.>vo^gAN(+:O'GRyq40~OP>2~b|}||U=N)'G!̛8#=eNm!ѸAF=! }i9%?Wo<Tn{q'sBd׵.#:>PY>6hǓ9;( HadsI{ɏ 0q&ծpЄhChfHlSy|"Oy]OnwsIכ|Od3Ͻ!D6HAHh3xh t,{0LQ>@DA%քll:07H8eF^!wbzF o݃kiɡ܏b;"ԩ;aCl;" D fłKlX$Dmi{^%DV2^ tG 6Gh*ZH10vqCzԝۃH-dՐ0cC4IN:%!Z]@'H(ćII;Cfm #hw]ϝ09n:5qZ67QUAKUn8;F.c#Ț=z1c|by6&CG B# ]cDn@ԏF4!@ [Mɝ l11Al(4,HSlftLvꚷ#`jz+pz=_Rtd!|Lح|ẁ9}vڮZE33*^ bA:L𼃞2cqS8vŇN %k=߮_ Dl zl Pa")zX"P g}T$ f.WP舓`ₒ0S g$&*UP7@N^Ue UP %* i^4`i4F Ť=NoCǓT7rsĈN R3,l$OT*@` bmϠ'AN{9HrM xEI߄ ԕ *}'p)h5ݿ0,XR$`97EvdDO_ |p=CAH(p )$`\nE+߷~ q>λhΫ`D-oÔg!0#P[$̹pNꐊC9,cL %E,XNL5F{?Wy҆nݵK{yB)u 0;1ь O poafjc@<&5rlF5F1U!" $McPD?53;>?–vd"&k"XDX2]#Iڡ4P i`6` ¤%&mQ*ρORyBL21@>#``P|9%t;uÚlvD A{$U@b^] SOha,|0ϣ 2H : ;&mkhlz!K0 q/3眉 x>03XU Ԁ5Bqw)x˗d} )C"((5 $ %$xytv*x5HU[Lp03yu Q3 aơV@cL lـ18dBȎ_u"h\6ΔYKPl2s54.߆,%c@Ԍ~nND1-Hu,qgdF:_+WӜ zfᤷΎ$8%~h{Bc{TS#ժ:[xɂauv2 mI+ى)6ɀ @pA şM JwOCoP4 ]L&$GV+XHHT=3V*x(@Њ#}H1fAIO-<@GǒTt,ʂBO|R Mw/x\qԆE5>njs\Sq(Z7#xRUՆB~=$fq: 7-n_wƆXW5Uk+x7_. JaWBت0tE|J$ P}c!z9}ݰ:LG0 z/~ֳg0I#d!o_N^4I: [Ra$pw#6<4t%9ZH˧wG4{WOT[Ͽ28$*2JպMVxI J;3q1}uxe hh # Pۈ_6;by'+k6ו"M̠~ \l1C4gdu#P{Nj\tKdmLp$IfcZ J,qȌ0Q` > ם+/xF$|헠 WNt $4qV'ϾkGi/ʁHPNg# aT{T #H2PU9HGN# >BFGKzC_ e@ r"Tl ڕ uG A'HFR^Pw }fΏw</R! zNA\gmyȁ@ -p~^ PJjF 9$ h#iXsfym3q_[޴eв Sw3mG̓b^$Li4c^ hrT@r`HHS=HAmB j܅"T")ԙ7;^y&({]):aނ:N`dFC䈱[/G51r3K]%s|avF9,U5,1]Om*W+G 錽QT LZSZ9(xD ;NEN23޸L#9u\LlJeo(,}ߎóur̃|(4 xHPϣs _&RBX^ۨR7[n ڽtJ! NF]o["3OfvC-b<;j0~(H5+dEic#ii{6 gnDtoLn#;U0P.[<@F54=K͎__7=qGdEMvH5BL5Ӊ]P bA Xw΁z7v1|i(J4ad$U|# ??4fL.]7 zW9pؔ$𶆘c"L`o$tr"ƹרj\sKr lw*FDZ͙!"2[^ƞxָ %'>aCH@ ؓ{XM@ ܊1 LI:e +$̿))f/NnBp:fr+-Dt n@8瓒j=+K…#`AVTɈMr F9z`x Ԯm}Y9߃>bP`gjJ˞ ĸqA=H:Ip5$&ƠJ$ ZhZ:o~+gj:7\(H OƜ|&Y >, 2Yʀ؈']`Eζ"G Q\pEߞ aDΘ^ɿrX趿*(צ&0܅7}BZK6b(a"X:<ƺ'4.쀑I Oa :%3Ȟ:Qo$Nmpn3PܿQk&Aw L"Z=g9!] fRL4'߇*兆#\,P[LJDɏQkߞ'T9TC5F "m%`osN-{6TzQ$C 2H0zւx-̺:DQt}n?瑦,{!/CD.:ޤW}5|8WP <Mi\xnO"w'o!wחK}z՝1ISaݢ"rN$ݾB PȩskޤFyyN .6yd=z ZS0] }f,&`K^P>6b[^,gWX<dy] |>0Ahk^ry,8_ʀj9@)S|Б2UPީVgzzKQ1n'w+C@):"5B'Mty.s1" s>oX>b|J4Ԉ壌y_72`Xo~qHS7 #9jS["B,)FZw~uC[6>{c  GI#hΜww[3㍆ i `rxFs5ۃߥHvȔK b 1QބGF,75%cJ︒^ fftBf,>-,]N (k^8.a+P'ǯ-4bL+Zu$EOGnaGZR*<*l0S/VWk&χ\5@FNYֳ'CJ5=mIHI"(A+jEE3!7a uU0yӢ)fkdݪ4j:#@e> 5ij$Av5Zg E(d(Yb;BͰOkkGN$s< uv_[%APWj4E$F # ҋCGW- WF8먙=$6D+ . 46\ӄQlo \/lK]Wz1zR9L tXbԺs1݉S"EF-ZWCưt4G{kH(-ZAYOC\gh0%y@>ܾO l|T ^Ђ뾮8~ڸpQАz5i*-D]9[֩Nԣ-%`*;'S5թIڢIo5W1Dם=eZuwuȞFzegWٛ50B*gsҎ:EVѽYpV\M.ݵq'Hev=d]} $boS-*fzBOO1lxv] @y[qʿzw漛>?vCK,q:ֵ ["t*P֔QĀH^ӭfKP\yW b J$=@0V2z{4DD~'yh ߮u@1[0;(|*IXAA+@n#)08#&@l*>&6& N_c.J U5z|#cIQqdJ:C[̻IuM@ #bcD5mP]!cC7#;J^g{:""sn;*FȈ8Ͼ|$2'@҅$ h!4#L|n鳽 "3JX cQQ$2r?1}BO8umhs*7z`S;!] &\H)*:9iHBCj :༵d^Og=Xr$Lc$TMl`*-6QJ|,975@'~D( (! PH[o@H~GkF@_F a ' ѣ/\8@y!v24g]Ql:m|ӯiT$\ Iڮ@\B52@'SݛMq{>Xa>Y>Ȭ `h\<b2_HcY&& , #e%r2F;"C0NQpI` A6z/%Dz߲}bq~ 9FUs0qU UT ]Jɘ-a_ߤ?0K8 ).P{Ƀ'N3Pā3&*J`QD2,ǬTt!J)B,KbF i5"^R0 dO$~ i 0pi',eѤ;Xoziw+'ar({GT4E 0o` Qz)P6d.9>ճ3C0i ?fDE"W烨'Dpyb^qI'@*'‡ DΊ CI* >}=(̝8}>oH$ qNJDC2 u¿:!، 4 a*@}E]aBP85|Q!P'6ѩw*lBZ޾V\G6\! "d1CJ Ԕ:Z]\}CI-b3H%MR4JF=LHAE2DQ#!Ei~ yhg0[2 &PhJ )! uG8B۸S{:iaa>78|G7oz+7]>fiA Q)D7>'(qB:Z4%C1}HyDhqnG|"ߖ~cwe@$흻լmʒu ) &a[9ZՕs60,Nzc|l|T.qJV9pf̀$-OYǘ[3*&c$ %V +Y_KYApA%[֗{$""oϾU  6C*Ti+/!Dnpm3 : R3C֐:\8FS7=jiۇ&Dؘn_R;"M $:b28]j(Nʖ7%Tq@!$ 2ey-A>8:.>b@TGb` GDp+J;K^U#b*Dt{|ůtNh3f3uu"FZ`F[ G[ R,D_l)tY̜ ͷx5374' ;KF\]Պ(P)}b(Fjb\bs*XHmԑi@E7V*`m84eeۀG0*;ԑ6gf&0H2'#ʆ}P/d"=%c<52!FaBJ9g%/[fEc?].`)ږC !Ii?W1Xj{ZH̬gB]ߋnR{X )ja"Izh.3 TObXjSEA+_r)`LL0#_}ky"m;H PjFe; j<^s"z|>Eo'ٷ6D/BϭhjliNYC"bB %Ȝ(ʥ'"qjd ,(F"oU#b$8fp3 J̦Tỉ;1DQd`MB(NSp\"#S-G#ȋؒlyq|DI agʼ{ ^ti/ι\ ` Z0AMUWo!#UޠւIϢ`̙ cHm3l!u4a{Ab,؊ܬZm" $ab S(PT$ (AT@P G"BT{A6N>\-{rAe$(>~3Gw.tꓟ!O<"rnDiUq"N`"UIċo)]f*Bo݁~*`mlمRRP]گ>% /wuOֈ$U_Xo(h6 rc' *:r&Jع29B1WJS18V,A vLK$4$h&^޼{\VR}Ugvɖ@Tw$H!9IîΦܘ>HD GBJoh -}HgN/ ȧ#m`ߟ$ ItA6 JlNeXbD8lUTD&uQEsW#&",b/7AEDS0Y&T"̘`CQ n-wta555 EE$UxI09J*"̞-PtvIDIHUN~}a( Kac(hR%B+R*{1`d10=d#PDE@_52B`#›}ѐ11if~q!(Iz"b;1SH΀[LPJ{UU!D  ԢHPA֍6f(  i9,]80}?aq"ZF%⟬ߜ82"|׬@:Ii% ?îٝM3 ˅<.ac|Cq<0k@fJ{4yBtouY{7,BX MbiifOcEETcx=G}[<"|!O Ew$R$fqj:QL`0QRQ:6Nv1!çER_Ǽv yr}ɒRCК4-XE6ZDcȄ8:&`\D( ^ɉx%ʞڽ#,%)L>6/~T46q2b nL~b)!C̓[$STRRWCEMm?S9~:H)==$^I@fF1.@M~϶*W%!?XN~2ZA`F^vd}i?gE\]sZŽ bkp뿒O}{iXƌs11w)<}kw#Pϐm~!$228"3J,AICI>_w&PFl0:~~o]ytb0!\D WZ2v0½8!9Ӑ˯^Y3OfVIY>Dž=yKFMw@P]&HDl+_x}j-5fXZ Pvfzx<)RH]]%GI"IjܺB;6@b5ZB4kq.;l7GSf/BxBmq9xo:e+I'V^qCP@fO+~z{Xx[y {&8!\b0P~f|hRG eG#d| CʟJBhZ+Ii-1kHД ``keqc1dO vA OP"ʇ'yInJf>&J&Z wPt{EH@7QG'&Cctҝ86b]r+SXiA RyXSG[܏@n9!TaO&V 3,Dӎ~?7utKRK@:LB~I^LN a7[/qGO("IP72Cd/&5J5#Z_wD+|({0" F (A{Oh/U ;ranDK0LJ3JDk/ CܯJH "Jj;$$k( 44A)@$L 4U02JKIDP!2*DxP~?GƸƹ+__!so`qHW]Ig4Gԃc!YIL33\4n}UuusL&uOLYgVJβN&A)#;`GREF G1 M@{"aF!Q7fekǭA^npa#)|7ФBl C ӰfM. %Nox.u<]%pMD?E@J$#UUAX`JWbFO,D^dȣdDR20Ρ}>w\;օt$ؓ;o֒1" ˡ@$޵rMO%$ңB 3"WeJuGU.y%^i`(io_$}Ooֿ Uν&U"JUT3T̂8HołB'x[K:*Nqf0qqeVBSWYެT`ضɕ jC#a,PDQ3!`vQ8@7^ˍ"}'Χ<''_. (lL~P9$D"x ޯI3`XR\2 &ȗj61F3n !f |C8QǢ\nG,^I$b&<Z2@.GI7,|/RXSwJ 6P:b~#%B:ھ!rxNaX@~F6fCm^Uĉ!Je "@:,^jQ 02: Ȉ+H"M]R:BkZ,"Dju c,E&/"E24%dH &{C<zҷqLZZZ#f afa@'SA( anÞ07NPQE7HCf6@hGvl! II0 +8(H㼸'HX+$kEtF H0wppֲ{}$tY{VFyS}NldhnmfU1 l(R* jɃ1(Q$A<}>jeXX#٦z89w`X |ZbɸvDߓ1/Uf'Cɀ1x \TJ@9byx>?a2GP Z3q3;}~ MT3CEX39%.%"-º2 oqybε52,f,"D A;SHP+\ӊczFh*mN,ablh˧ՠh1[np,#ZX4 Dmknb;1|Z6dXȶ$jjv┘lϠ+#bR1S0dy@3@Pʋ,'DY#1"fZ8e!vPrT  ؒS zH$@r#: vY *Qbid(aD&$lڒ>Llc*SDAART+K@BH0DpZ`!1 l"a*JU $%oh[&@siXKȥd?}bFdy,=ZVYlub1]n[&,.1{׽C>P#G[xZﭮyr}̬U浥Ǻ^g/!n~ v=xĝuf_O9p: P@HؐHq%1v= <b}V:Z%W[L J H5o}t 7%٠6:%!z 4 vY։z7ȝxqy+x [}ȉ k*j{bAOWր=wc`hF ^I8YGS,[(/T)"OX t;Y$s66 FRH4BTHVC6ExCT<= =v !j3Ci;# ~OA+}Nr{cϒ/cQu<ŵViS{Fw. +get;r$RS2f7?g]Ggc4{|ޡAMSu*ks_bu"G]wR_DUGύ)N'GbGε-|jzPFmaz,8@D@_5V̤0J=1;`W%MfR9BwI Mh5!zg0_ߚ9s"geÂgEJޫaxO3 U@<>ÿ;قk^~b]W}~:0xh{ƮARУo `Yk8D j U:ٝMNA<.`|SH'5ʏn_kzSCK@X U߭k(%Ꜣ4KT58e^d* fZ>[U:j/26=*ؐ^P9 ^=pa S~!d$%'릫WX Dùx*%E99 qnP7ߜ |zأPa8ƹiV 1 TxkGkh϶| eLz|Ag:yc9O&>>(l-]ʙIs+. 3ywﮍt|vb֨uDn(qs{p"nuj۳ֽ:)l5K|&敽'vʵ;˥C[ @B}_k|wgWjJNe.ZN:;kewԺ O֬odܹ"E \7 Z~J #@L,`(M"LlH**Ugo`䏏G^ nY5В`A [Pa=D 2-rꢱG%]:Ԋi'%I$C蒔)Nݨ _M!HC$IjϚ JN4B(RD @wBQb BZh-bƙ db:n'jmEh5Iڠ?ĔubDaPF,DmaRiމ i H@ZjZbfj/[:pcL%U ,P'0(Q1 "vRT )j=2ۜC-Cwauр^/)aj"(hhZ5\_68`\z!T\Uee%)Yo=C߲h201 '8NKPQWRELDS 4.0d ,lS'%)$ @q*!BD41 TYmhha? ~`_~ؚQ* N",1r L |$26{okI{sEHA,ĥQ8#S& 1CDDIQ!t*}G߆Ν DYeIFBN6S\li{1`Fs(|Y_" |u, O,YʊC=¢F0U_Er o>', [Y"P/C9Phu>ꈢb (a~MCz;$0?xzD3>5U1TPDUv) U-ff X J m좛#Dz&wQix|v65"$"8)`be#54A#HБ,C@LB4%1M2д4$RH9@?Ѷ1JR"#A)J1 T(RRD DJSJ * 2/P)UbAJ3eq[^Nꀡ֒0H0h4!f0ӿ 'Xx_a.@GXI((гD!)~Faޯ=AǟCC/}MO c.TGŶF(; K\Nй*^;8q꣟v7 yX>w;fy /Gr]U4Xq."vɛhi ŀ6onUR̓z]Vk`I.$"4)bjcN6҃A@6l6EJw:i)B e [;g1hSӠttKF ` Xm!1mVTGFgLA"5l;m LN ("Djd>$Ŭ٤r0@RSڛC R{oV% 2TH0Ov:M$dfpsw@_i!L@<ئך3c |;<۲ D! B)(S9O͞?3,5{$?CKߑ}?^n.`h6u<}NN?:[ )WC!/!AGLL'j\ RV5;z_Y˓!N<?uUF>lb _H_0ykNو]G@dՍg+B{*L PA#wݛL$'r(jVBtSo 0|PAhͮuaMꅥA(=Dj02ph(~kllF(0@MDi%"塮Cے;ЌH4~CNa(%>ilDq4Q1E&%[1&s9t&f"n_&rxL(Cr@0|W'x2$f?r8c%j,mS)z~%~&b[0S34GK n4+)b +AK0uQp6'3M ΃6`B ?.9|hD^S&q&93 JCeW߀T1w3=fMa+klY ʹC_&~od7h(Cp`;'p~8^e1\ #Q J:zmܯU7Y|4)_~(U>2('&#~8K#9uip%G)#ZƲb@ ZAG5}C |$8yi'ϭɐ9r#H^R/H3- r0u1P ۜEBrL -('@@S*PpQ$ P*ФJ B qR+TH.]*y!WJ*+I! OUn;a1*y0i;l&$*HִD:aCAA:JC% HM+E-zT< jgĨ+O I2dv"RNd6?{}mfEĉW @|)!Ӕ6P>qu'*HM>gT8I$OR@kQ,[~z>IN+9d6'tÈڡvdXoap&7_#p;"@PE+lUXOS0h]0%j+v/D@xy]<`G$@l(md8, G;YtIl΂qGpnוA28ᜯ*YA)C8(NxtS'Tv֚%)9G Ert 1y׳Q?0m6t!`!2}Ȝu|Y;c4Lm أ';vb589{qH!C(x r "(n;tzSgag|0>l9Ʒڂ~A Z@Г"D &4TH#'H::J$HP)ЮJ `|\q*bT1(Q%ޞz- BR%!P4P4 E 4)JP%%RR QJP,H"P CJ #QDHDUEQAUETA4TPSDCTQD AME,DADDK-M%LRRDD5)EEQ$E -4ҕKUE!@PPБEKD CLSLQ,K12$SSQAS5LPU%A11DUDM4H1*QQ!M4BPM@č%1LS*EJ́AERjVB$i"(h iHBI &) A))B"((A*І((b($*$if(ififJhFJA* H"HZ(BbH(Ae jiDiJJ")JPhb(JfHR$i@(h" )$iBH!f hi` D*ZP"V$*@)E"H%UMQ@4TET%*PSI(R RJATJQ IHѡt DБ4R 0 @P+QХ)HВMURC6m%:д EDBNْ(JJ()J)B JZ)bh* %)(ZJSҥE е@KIRčPQETL1AIPUBU"D‘-(P@$BSJQ@%(DD 4@UERR$ JP %*A0 @lM4(RR24E @%41SDL T)LJHPHL-R JIxtHIH}r4ϱbO|6 kG5׽Oh 43HRC E#>|$7ŰC9L#'B,@"0%d$D"?zQĴ 4"XbC. @Pw6f**$3v\t0QEԔ5=!G=x,v }ʙ>d !d*(Jh *&&!*)$%$ f:*g<,J -CBRHU+Jn2<~9^1PG  rUtAG@xP)P b  ꜊E֜iBf,H&8 RE*~D%*((`{Q k-fh"$$"`ij"* "$"(b J `fZ(b*&P&)d*h"R")BbX $(")e "B "!)Za&* B*d&j iJh/q_@hrg"(uw;f΀?gC Jy%B&U4wD݌Rv \oM $J" (DNm=X:1X;cO$7-):eNPz9I@cfPyl(9H =A!o!p1 0bAQF# QrA/vr`s폍9w2nvը;f|,@}' 5q_\uۙs+2㎛^ _<'\;NN!Eq3;>덡ݞ8lu50D{rL_Qr{ cJGt?3Ѡ⿃7~sL=L@[[)1G{H1U;na|fGD]S./~9~)2|gA[̦Ø~bgv"P!/Ώq</(RkQCGlIQr_ #>GV63f&1-b! 1vTRϏ1d6 P('#wޔ)P% Pҟ@#Db ((&i([f*b̤u*sBdz0wLmǣ.cQppG#6}Q@PQroAJe>waYfe应uu5<ʂ`8="=@1E b;a+%z5>Oʑm>z~i؆"9z'0"MxIZBɱ1uU.M lY3lc Q6MitOF(!N?{&NohY7F,h3qM*C8/ƍZe+aͫPqZk(%+%4'!~ӏyIIA]ȹ?/}{ΦsHt99z+t=C]OGk85Q%4LJEl.#c_7}WB%"ӏ %>Hwڅ'W<%=qQh1RMH BRDnH`*jm {&"(: va>i;m$j$ӶA}(?jKa0J"C9QΒz^rSL4D]}f.;Y.Bv=֔R9Q?ԅ'jO5wdrj:/T>0dҰTmM.6XcZv*qPY1]@h*y|! QJ T͢Zu%nJ *N ^Lf0*7%J Dq8|$)jZ" QvMy_+|A/}EvW'T*cСH((hoq'q+b$)~0 ʽE0>@*YH"?pes#3`i5ljҘ t!RDClt. Nh'Aw< JiV`:P ,2n#tb!̨ |szmzwKF ?( iA(i(F"ղhjVhi*g[}6'jBJ h aUćD7[cmAfrLÑ 8_~P'nph@3 3Qc4H@Ҵ4yhf,, HM0?&!ʎBБ'ZT22 c"s:"('d)puȩJ~Ѕyb(4И`H!6§5@uJ1 uCC7P9Aa">TpaCdd2 >hd"F*@ 4(d%h2A}k;~#dX˚vcA}\ל9!xK;l\|+S +5GB<:0iI>ɤ`k]aX"*f /KE].>7HRpO4ҔU~Jﴂ_?ǧ`s&XJyc icg>CQ%{g:SYMaMq/Fi*":mn˜O?H|KJhObޜ\&. i( =_,=(c `dV&OF*)*!"cZjڇ 6)6o)7/cGØTO9_5s H`Xq_Y;bv?O.>\mx9%n>,e h sdDȽvMPe!ALޕZ̓.r\jt&$oZ(M-HJ\}ܼH̍K/3"W:g%GbN1# 4'+4>^Me`dAbҀuߪT+}LcǤ=L=`cӋ}y0Pv4˹IĚ#0YI5ŐInJ,E>@uR1 ƥ+Z^S L2 [Jc/ȬV0C!;0:i9 #O sC'ǍZ~\`*Bw8ئd86l8#4EfpI}ʿFajZ<#홠uNwIӄꡐ ",PT+݁띍5>sUu>\z(DZ#AnpE؈5pY9q6;{u}\)ǬN"8,E ƕ8&0PN!l&7ZXЇ(r/JO!aq (*DjQ`GD83|'=SÄNnF$(x:do{"@$0wwb ;GñL5z$?&`Y.sKx.~Rߌ{#GD :T+jsr8<8lX0=[xOYlno)#)_`ּ Tg.A;1VTȭc۫ ž- ň`z"Ƶևvb nu룓)pzF=oT[+< i Vt)\ ΢r$U.ȭVg!g) 6fo~^?=󠼭FZb͜r1@㌪x}֨k!TD}whClFQK]@3FX`B8acJ΄ P1 f%] _ 'ƣby jYU#oy7B|NyBpzkDkhkTD>ׄkMwm Kt9YBO@, ~5) ˱)=w)ϲ>2T|LJ¥6VU4%-W܄J(=5hoAj1.mV IǍ)Y.)Ul `D[U cUEj+tD\ fז1Lo::3$7A`Sp8z~ ;oSY0yzke4ej/S$@1*E;:{X:& Hо}`}8wr (`Q.g&9V T0c J9AkRa, 0TuA€,Lh4=ӾDyu- 9=^P:3c Aa Àk;I;8b'is9pC)CAzJڱot ^/tS=:6%뽲Te^NHFFmCE8F !<:á@_S{1*yd\ r5Gs$H(ݰttFuB45-GuIqqS_qp}wY`Htꃃ?^_CCHx`_1(+̔}pɊ7dz0B<@+=t̴urx Hf?]>0c1V&&gձ6a$8 yKieJM_:\/\ >y< zRWOHҘj12ԯR}885 d1yrtDr0#<+5ޘ&͵>=ISF(V> 1|MGipV޳3D4P%DTRBMʔL(hGf`(JA Ti(hB)!J"P&$"jHiJP((hJ$i b&$ ` JihX ! H!XFb Rh )B FQ(hF i)Ji@d%@!HH4 +I 1SKH4RU)奤FP) XaH*5P@B (- H41QJI0DP4Г ) @+@!M5RR -HE5KD ڴ! 1 auX v0PY$?~x_.~A׌@.q~/˯YW-D MHé˹iF[h'p”=C$x',!xְk!AT}]8XysAqA#bv}=FBBhfvRMu`d9Bq)nuბx:" :S3EI4R\'?^Ї(>T9d/!օ hM5c/|!ӳ]< 8B16{7/L Bc)^l{&m1z MwѠ:z`{5wX~Lj^v\ٵyvI/6C [slr08Z^dֻ/to X$(9Qn͙V?{2Y4'=ןCT|ƕRV :uOvDM\2lYɌ d2I CEÞSaAMD~}˝rd'Ď&0kn:Ϊa9d# ٓ[l駆w̞ `}f|'iiF  ((A"P_? W`*෨`[T@HDߠI3,F 6Q_M$Q+ I%4` {&^4ԁʹ;wKt)=3[CH=c]2!܅xRQdG`}'"AD,+_, ِf +9'S:|VH>!B"R (\YjjyQ$o8(}&Ș2xрn釡㸹@چ="ߎ'"0@YQ̒b"Fn`0V]If/'q}`6P - %(4-("4PP ̈r 1 4H?| }~G)2ux<=@P? y}o1ABΙb yU5K&*qprNǬ%Q1‰MK!ripAsjCE"q>J8J& ^/%zKOHv&`xG$͊ B*0Ӳ C?|BxDOgDz|h) $)[ =z@80WA2 ,&X%11)&Gl yn?imC_ŰAyA#:@xBZ,QAJZ֜b H V+"HŢ$EU@_ G.ؖA:fw']&h:\3B`q PxlSl̸̜81'@a; DL~ f~Hxɐc QOYPpAt1n9x0fBc2NeHq߁l>\*(U^)ƺ^YįTmäQb]blǶXX0TLI4EG5Ehqcj; e@~֦u !PMӺ*iI"fbO;Z<ݙ VDlCE-&C Y#Ո"Y`X|nyK9v%A -4}r|OcF[L] 'X1Pzm1{J AQQLD^V!TD!%P{:%v2>I!8 F1):Cǘx*cxAxA r8F)׾qO_)<+*am@7Rpeqč48r#Mpv1\H4sbQ"p,c-L>Oq$ό`i47st5s>=<,xY4nֱbcRilyZo2bu6cO ;0wSC6_:goKu4JT7cAUQ=-=səFu8QQk^4,K!3g|<8~>Cc_c mwH=EkuJXҦivw:cl༕ \ו ͚TJIǔhwp| \~8KjxN^cѫ!.[[ցƢqwo|9O 66(a|d:uڢ FOk%ssM:rO*RSXPf\j*65 ҖFq'J>2[HYG Y19)v]eƎ]j5[RV(=b³%bubpx:M>^\ޑviq&6 ] S;A2 K 2{t-MrH(EWP@5b(q>%E61r\ Tɋm%`bŽs[wAB#2 <ѵj)KJrMD4&;d EL2/Gf:1uR>)pU MVy4+ب?NL0 d Q d@ʞuf Cؽ'@G$$y},'# h5BҖL$ @উT[*JNBI2I`Mb*L0z7fOvBx|e0Aަ.8q Ph4+H,,PI(Z%eIo( `|L ENxŗ#CRef_ NptA:D5WAhHl0^c85/3{mIݟxWRP0:AOM$fORa$3ɲѧQeE ,O_vK>] m3w +(v`; ~.'q25n 4#{8J\@ _##ְWn῵3ym^IQ$T%E55!>co $O+x_-ZPHfTXS)1R2# T9T1@^ptDJ!2 2HJ4.[ )X Zek go I"R*o-C!4MG()4r$I`XQ0)5sqb:jŻh* y e Ԟ]+t9aBz (>!TM;QCJ` 5?|e(Hv!qyPH#'#TA w{IRHH`ngs򀡤( P* Si" GiK!P`B !ȃpu@(Pt6O7G;$0ɼ:A($Ea8rXY@ کbI::J䎵U*+3/'d械sAaQh{Y!ȴzԳ#70͙e XpK>!qNCC@n{(d)ӂY@PlJ<~"o7֚jcS? L῞|3RaTCCi_wl%BVy=iΝ>*Hjzi;ã4ITn &ŸL bKR@yO>m|`U9y| ʇΨ^V#гw:%eO>jx%c_f>/ ] Bj yvb Mm˭-4l~~x?->q:+ڜCOJ)o)=OQ>LOY؁v9<_]GyG5,=t'^~2>d]D <Ӑ2^eG %SŽSٽ<'XSfd,lb1 !Oi~Y '2+6s Ÿ|+[ɔۿ#漚"Nԧ?>C; \N==h.n!Ͱ0NX^pqp@&f" >!9*݋ 9X)a^l"%qul6d`7X 1!xt) CvZGɘx_1=B&i Q$hb&X a( Hex{ߊk!pr `;7iBYmF 5JHu䉣8E y.xjZJ@zKyO̩E4)5l9** rZ\D,&Z)Y ctVyۘgH㲠q'7HRDiS  fb6+M&nvհk4'IG& ՄʱA 00p!M`His2h5(r9>q D" QFnȺGubB&J`qYk( Z9)Z"%em;M"g" v>ԇ`xpv6\=x]81C!mCg`m` (("t锠w]xda.^$qP (Jw{_L`1"hIO.~'D&@Hd'M┥ n(͘P{1P4Z091U܋RWP֋reSB9(/W@u.Mh_I$)#pe4 QF~.xdj& JaD<;P'LOd!|)齖{il~Kb@(Ͼ])Cw>ͅŠ<hg4B?* b !֨HT($jBVOȫUgdLL gi򧫓ǖ. ƙy ta_v1&~29& :!+}oF)@ɐ 3s|JdDAbRڔd~*uՀ­IaY%)h/雟f#A;0>oPYs#(|`qÐz{xm<~qE#UD=Qbay|;جK9T6x`Az4B;a9Bu@Oi&!@O䞢O~V0.0BO.DX{Ӗ#Șd`_9jda(hIYhIJ @(J4D4 TM!*@ʼ AB@o%BW (,@JNr$`kM)kc2迋:5huѦt3Ztecp2hb>z\L"ɠ#N Hc.{̝ 0q_n?V7{*>O }Ub/QXjDa ڍ J3o)^D~7w4`C<cyj.rq{7o厐镾4xc\Zuըg6׎jdȍ5v n;w ̰/ ;7 Ju>|x{&aE%QLδIjMN;lur9 úsγ^JC'ETPHyq{10,[ &QD8(:ZQLiD=t>BRB#-/ >6g[yO+fA D9Lvɤ N+)AZv׀`a)yzg 1g;JIP: {mO #5qY+>u$'ͤ|6`*|%D`0='9A3AmiLOH+P_~>7m%ߔT_QL\7ɗT}o yzTbc (wF,Ϟ{̪ X{VE%!_BH:1/MaāK#DNz@~y>Nb5c|&0x932Va!z[`ч.%rq(BC-O|-:jf+NçHE[d *+Z U$0F1 au&g&}fo 1昳[֘`|MgAB8Q4n($lF%)ޗ9,p h]ôқlνB9Fp:8 3R: =0` m[~"&>qNZPZ[tج<# 5!oU`X>ykt' P&yku!9hRIݎd+FNIZN'2/ $%WXraȌ`}rޥ@S1hژDFRωekx̌||'O:]KRj`egˎ,xPe#U R1L ũ~v< m1l[cxQ4[--RV_# 9;^@;%XeTńA2hy }5%B9p1wGfr3=i2.$SԂI_2>6i vAcxu 溤a~mtDbB'@X!fLW+P|0YЖ"ŋ 6$~~~Z~ֶ_tAXB_ǓdƍM'Uбclu^٥vӸ*BNҕBq:|/^L5'0i܈౶ 𾔕X '6wT+ہr^Ry)Ձ~λ g IN9iu=,0X%RӍ>oL+7XBt%63*#SXhNŇH:XcAJ}wIP2NʬYg-R84/uo/i8ݤB:,2 @P!KM͙&p[r |VR˵0h_>ϲCA-L}ĊW<چ#k] &Rw^h]߸CiBS{b|u'H]=&0nHC8_90΢ATm2sQ+Ͷ-yQX+w>u/V6;p]_vozc< <$mZĬ6݋@=cmd(qZŝ bbHbXښ%V'-n\;Ӣ*idLE|oYc d&'|0l4o a)'&sLQ&LAU03g'џ@=s"Q.F 3?@RG9J ALQ\ddX ,AгW1]L 8 a1U̇Dqkn#@s) `@Dm3ӝI>P p^M||N+t O#0q႘Xi<UCu\>17z;:< 1CE4ԆCa؝:MTHL PP_s"jH(i"(”;gn1ˬ)uď==C&^uGZS" B$?WQHZ ͔+Aa9884b7OAN3FbրpCESPSB ͗#>:A5Mm!q!uڤwNl5bLmZ " j?|S?mFF$HJOgioj+G⃪hW@*HGJ`|)=;:/ݸzMS̠nc?rɰ]LG(p"q%T) 4$4D!4D5cäbh yp>pJ+ID@DD -""R$DJf)RJ"DU)TT!GLJ/J &!EA1&QZS~Be21Q4*4PC(eu0x`-u桉'~P (JrAIJ“xx d+RbNC"BN$ USYic`zOmD'.A "H } Z*Ih)JjJ!#)Ѕ SĘ(!B4-)iE0 !*zd9M!?/=m A*h8FzA|yyRՔt){ ,)r:Izi#+@DJD4% I]fK>mql/13qy :Bts9S>!S+;A uk) &I\ @?(ډ$!@d9A.|`Gt$T2GEBPLdٙ9>C/7fO|E| I !QPUI@AH#IEP3PPTQD4Ous| No|Н*Ξ$r@qIM?xkC% D:Of,/rO=|(C.!xP'ǘ_ .: u!_$d*@҈R>yUYR!Mz?vj f]QEf BPD$90m#2U$1D'hu3қk-,AJ1LX-6sSx@3NM8t;h](#2NrikD9y (Dh US<(s!BR Ъҋ PPP-+IE%*}*>@Tȿ7E_\>y@i4* Et#@'B "~0nPR@A"Rh "% w/PyuL>*` "hOV*\r@󇈆آ&5s}0a98W+Bé G@J 1 .Q3$N~sqh6;$ scGϕZy(aY<h':\ JMPCH&^Pzᐈ̤(K!!AE E|GS5@}8/CLRHlJa(.DIt@Tr҄C h xII|c5cf)6uXb~B 4P7Qb97^DPsA4MA QD@/$Ϫ ]K  TL@BP A@ (E!P#@4JpF?!pwl Bo1Bd9շ 1cyrGlGMmb4QHU6)AA0q]"H!@d{\rO XgSS>]P׫'Lje\o2 =! 1=SDTg!+cSi@Hh1 Q;l:)TfN+Ϊ8 ;鞇/vC:ILCD @Q@4>9n"4!45IXTK-**q&4;@;h2 HҚ1%s};BjN%9%:.ډB=7d&OOu)˃b^v nR틲i *I>Wx9(L`ŨlNhYuX|:x~(&E.u E)N0,k6E"zB+<jTI_zK#hi`tb~$ d1+06 _u'ξ*VH@=`INϰq MEEICE!@'`BRSPxY/B^ar(Cr4)??}C|MGA 4t ~)W2H@l8@}rc0$GP>?,iDU?CyՂoХ-=%Z)"h`у!C߀,$t hD x_VХo@|ZD!:P>"A(RZ˗D3'r3wpϪMCLHAW\&OT~`^Q݄?:BI zc'PNH`o흉SDj*lhPL)@RU*@K ,Z PRSJ?8YFiPY Θ:/2! @59j H":M ԿYT1zeB(ChNd(Xj]Y \!CDW, TthwzݓD4#1NAT[~ΠcX1W?c!;7!{ĀREZXV\}MW£QM0"$ftUt]Ę=0'p6N-"Pb]U >CSy1yt4/ŽP6?gxH8_4L~My}x 8_ϣ)I Pcϻh$ijSĻ=r*%hAHn[_G3嗨YAkXUOSQc$|K%k8'M5ggoaaQy=J8QHH2>hUտLPU)>7Đ54R4SQRQj#wJJh~SiyVm'~)Yi9_W{qmJŏ'^_ z(?wQR1Qb**!p@?&tsFaKBԴq)b$ :G^N$o;+# a :o']D=C _o@Q+ d?LomMA|D5E*EO#`U O:jDhN-h40CM>o8R :D;4JfA&wcLVvCIH#"z ̷ۯq޾9D$95Y-6ƪh>XǙDY<&c"3_obb]2Mt0<|5jDAk@{Tv!:*z=CMLE@z }mJwq2|XRc}PǛn qGoEL%!xh=(Wnuw!Y( "`{ÿL8>G1BQ1*4CUwSM ~X#d @ Ǜ @ך\$R!s'i421"k)9"Qy(ASd}o$\ʥ* @RӠʴMU@AZ=h{)`Y`5&YHK.$5T"`h6L.IAfRN7g>B )RqO֗2} V#Cb3!*5>cd`5Ky>CyufxT+ 5B|5#"kG"$}6E2r0CJN~=MwG~ţ;Nz`ʉ%2 @ P;, 5Y( 5Lt< ћ;|f^44QE1QA_oUʙL(LL7W*ئj5SWX ZB%`)PV5紎C L l?~ HڟMɉ5_/&(b"(Hh(f` !j)P(SAOռAHp њC~tFMum֍A%5GcP&[YcOԿ/ѹWDIQ?->q1YF kGO}s}ex s(hԦCy, BC$I u|#ϴiYu Zdq4!P֞ Qz,W瀣vtGQh``$u2!<  Ş]cMWAy& }|qvϴ0'XZvCJO)1|`b#~ )CD]Ad'shYۋ.{bx$v.Ez/RpQG3*4F>ej Ns K^S[*KӭRփX'9w@4$YkKQ(,qI, wR!Y ڀ~aCv֨Hk4_~CwP$@qRzH(fC/-j+2gΕ\ ubKT[E{p>\C7>}Т m5 #"s oV PN-|+|j[A14%NSJ2ԁ\Qx!5 y EJJ~{/҂9, b1ŋw 'o'f@Rs۟Qeuey` =p'N^`:"|ߧAz6";xf۶'MxG$ Q7=d9&"EA gBJT+%[{{gcϠ}"޿jj+J5Uh}{}X0'&Jvc/9gjNlz}<AUN "G ?W9DD'! }jgj:=x{)5  JPhLi Уnzͼ3/gBڳ0Gn >S)ca?/%_s :Cm|~! B`TZLs#xc`=\Q|ЦWw ݼ LfoBx.tds,1)p8Bf.HhaPZG>ŭCYo(Q@R ~|"k1 ugܮ (=Ġa}9P'boX恻)gACD42}3[a0?Ө)OXM4K$kJ&HS {z:4Ht~[p) lP{ȴίLdU!I$$|J0܄ŀt5KAəKP@(?EH yNGN_+4;AKy 9lKXz02*"80i||#눑+l~ R?L&di8֚b #$bOA\$TJAB#C꠆P$j9=a" )YBփl4+ o c47S!V)X]}Gp>1SM6J3ӒF6GFaP(W#6,fS ϙM&bsv9/&i@اyѭ|}h)Lcp>1w#r~/5ݦw z;jD qqbL`L FDg>egBlĔ;ÃN:ljh Xu@ j*OӢ3Xq74oܙ3St_in0@E6Hg?)IdM egFf1ejIj6ڒk; BHmSRQJUR:U~px;)LIH6ǣʪ&X*L̚: B!)BE4ΐӇ k$1)hέdG߫o)GvX H"=N2@ޝ^}Hvo &iU3-]A…MLx[\At̔Q QPKJ=?ON;x?ˋH(w ="GvBءR@l;.ն\6Bk&&;>?6tb@` wB&^?D~_~&*>]t|lD3d`D;&R0A ]5 zYGO^}5u a@*BxtA~=8Ye#)>3Pﴅ> \^C ?Re7ަSG]mHN,>xҊ-1i^{Į J4 B?~N5t; L@+b`oBx/$$,!K7;ό&z*2:f僭X؉3[( s1–cE PJ@~@*=i)iT~xȔM>t6:6IX(`B٤L @.%.cF8+(T>]3plGjJ!^8HC8{xP]S( lm33 :uTTL0,GX 3uuzM{hxp#݀?n0!p1F'XdAE" ;}N7k[ KC|'@ZQOA bф j֭ڛ"ׁfx~(Tq(GMF9 fnH@Ftr2G _`Hgcΰ  :*AӀGɤoPN6 Bǧe[*0ϻZ;h \K<%~h"?Y9on[9 $"I('b10[1Rg6 cP9YdmW"y؊ * q$TR%ERzIdSITЈUc"bJ Z K3GRd+a=;HL^ɩ!Bv"%R8N *1Zb4 E, P[:vI%DP؂" %(c (Ȣ/P1bb1Ih؜Fu!l%l ru uY@Q&)5!Cxs\V G`S@AP}qxb7L !wkJAP3 åe#)HkGGQW߱Q8/go2ъϝh1LA []*'k0ڲH! ,QDE5BTCAATReiih"&bR`*jJ" `B"b 1QN%J i" 4Qk9JjzK:Fbc5x'6r *=ID^BU)$DATDHè;a0ATҳedITv|{O_5-īaټhbSL8ғET*lS91\ j0 !8}rɧ,mp^3&90or,cAabgq|xU@iSI8oOx?N`.5n:ax &:GS?#E4 qj(nDI+g83DĴK@1bO`j@h"IS䞥E[h͖$"J~cWd*cIEUTRQ3@) (:ŊT4hھ Odx%$棘:3*Ct8{84l/E>KDhtw.)y4u,'Z}Rv3#YگKj))L2b%Oq-̂R)@0EA\ca}Ge5 dɷ-mAA%~^`ԪH=;퍧EC&"T1f j1ɃkF$K& \q<؁[o6H2馉dڃ=UstH# l}wWpM tJ1!rW8TexD"(L?9_MO'IQ96>t8͡c戔&Ab}3 D}BWe$NNd"Lc ENj|S$Aw˦O~:(硟=#CQ$l*~4M(~Ŝmhv @z]K᜵--(kryuķ/OmE3k ?C%8**i` wqg.;$1PXED^bzΤS~O@qQG@)=q5N`P,K% s!iD(S??)a P4RѰbrmK$T@!&k6PB`BYd<ɥ"bUi5"aj$>]QwwjE)RX'0YY ,75%D(ѺS%ʆaY91XpmAySQLijUH87A ,T:O6tb_'d䍰, 5&,<qB!7c +9ƔXժ(ԊV `e5ȊM{#zD^1i881B`j" PD䠄 ؠ,bØxʣ(yv r=T݋QP]k U3ӻp3׻G ʳD%Io* ZuJh0ɍ"\!Zupp"~GS1l+V3Bn;J݃ENa)B2I& ,a;d_H`=P8&~ۣ\/^Γ%9$4 9rfEc4SF_''pb)? G n-,{w*b&IRB@zZa*AB()\D1L4+BD2⁷ 0y} BMby HAEB(PU)@D5T&D<Ő_C9=R] :[/^3AZ'owیL˰x(y4ƯuQf]ν9Wx]p|P[s>蘁/'LyJ yV6h4h؟Dz;绯c{i|o AV&aLӰ\w]êP'")lr&%^IqAb"s紃)'/К* @ 0rom c}z&}~%5߼G~/ĺlL ϖ &'7)Y,A-ZHDj۵疚Aꨟ/ݰ~l)<1&u`q'~33|i`u "/='Wjhc$YMXV"@:Pf EC _, Sj> +R].@|pHQ~>Cj.\5DTC`e,a,a]Fy%#}]u7׌w]z<^\rw/Y@5ibxz|>T*Lb:$M/5~;q!! i|aĉ@{u/P B@MD@(NY!%"RV@`0"cxaUJR%)`y O7ݭ*'j[Q> (}ā!:=W= 3ExGAW[ʧ!3Q3_M&GJ y:AgGdK1R_+F,!RiZB݃1k!l s$ˑb :I) a@ӱ0MJ()iS1/3H-QT:EEP$JIPS,*AVMK$DLT=r?q_'=$O{8s،4*SJRDDSLD@4H&fbTj ?Y ZpOȻe0~ 's:xv($0'׼> OwƅDa}0!2JRhskV@ ^)yNyڕBXhHSU(J%$ d&6X}>2;`'L'F> 8*$E0?30PNMpS* hj*D)A- IEECB H(QSA4D(RH% {*882LU U1| xvDTI0G̔Wi.`%]'2brAd2a(ʄQ@($54N{thZ'Np a * kG37Z8@jT TU(wme-|e-@i|Jp.b@!MFR;U\ HJ0  Z'AyɌK#0+ZA4ci M!@JB@EPA $I&*$I` "X HCBjIlÏ: ?rCM`$# He3"P&P htfZ&"BU4.@[H)%& 0rtB2Kc:" 1(-PIH q LDZ4aҴq_&w#x2:jH IJ $M0@Pyr&̋OP 5DE[WSRw0|`cC# 'ύeѸ7N5+vv\\%a͡^h)b1X- 1z&m:K391=f f4nbKkUZmnpMU5V88 DBTCˌp[,U-,*l!ij {MF2Q*,'tt&݃E1.#cFv&.tN6%`E5*Ph:ՌR!v[pFEh0T:苅~E$yg{X$lD1c'a5qF3 3;*P~ .[NZ"Be9e"Z(k>xvWډ@Gjo,n(.Akz}\6X *́݌Dpx43drN}PE3wː4(Sa7sHQj6%"W |ziD*CDz,j:k#7tW3LD5kؼPlD ߶J{1^ԞMov(ٍ^SĹfBLyg\ѽ^L 38m,dU5tj묛7;05`9 t;E\s6Քwy&.&OJŒy,=~3ʇ'/cDX0 Kұ  LPAߴY3Wkm(;uT07L]E 貔!HL>ZOс^z.VY͵ M,mǵ GH~X_>z94ևVίrta/PПX}0_I~3%ۄ'4Bd*(X92JA 0 $}Ԭix|o w̪$P/_;I+!񿪚F<﫷W;L>RCX> 5L bؒ4BIPdS [F.( H#a@/tA@-1v맞Pa8ϛ*AEV"It%P s50nc2VYs.:&Ƿ 3|D.|̨ˀ端VEB$8=ʀ=OLxUh*!5X݀C'UČt"ks [ w$ ᆡ3jD)|߫Vu ?S=ES8oXP׍v3s+=W Ԭ}vfprj|uoZ=fAҝ09eX"Z<ܑYhwJd?(2d>8*-j"g0͸ZOz] Q6- !b"S!YKHфOZ:H`G li!jv@dE,(s1$Ie-=T>_$~ iώfぞqBƘnm|& PՆOILa&ڀ~{H"΋'8G fEr,`|V|N< `? { a|"4M윔ryO~sNU&@Q@l/WсDʊ&cz.r),T31J? ?7 zǒ$F" ~݉a 8 H1KCjIؘ@K^o 5K5F䡨ŅY^zj0.`vFW`B|ip;0^`u(Y>HTA",pIhicl[<o4m-ӦqykOԏS)Z^ (cd@m $ 59Z aO&2 e}9yI%C%/$U!Q!4 LVUڟxdwh2aDyHƼ9Tvq);"j`&>T`w˖ Yjx\~L {G-ݳݼD䀣OtpYa fH#J#~4"7/tt:`Q jQ,;uy0 rV͵√ @ R5@&%WD2Fl\zY xY5c"*'M^hw!QZW:!s$~KXj~CA&4fJ";":9;hV.F ,(Ld#в(<@d`uu;PӬ޺0y˒zyfbd*I {$vH/\3qrzXA) CF4&wəh2@3*ɒjѧyN11F pv1PEDLF{ d51%TL@Cͮp80$&{0]!HQ]]J v韍基x'(4DJ}# e  UVY b !1cЦd be$ȅڎ}>|?fۘб9pc+7R,āE4d ?SCѧ*(1?penL7l #J'+r\~ H"Xh05=0fma= GE`4 [ JD 0`E~ҷ|2ݮ:=wS8a@05*+sQ c_0cކj@|LĠ"0FY1N#.Pf;85AÀu뾧^:=(?UFgLC 2FHH tiO'psfNO HB_R#E;] ($9 )C. (oB,0>hzӻ(#"Ȉ@d2nV1`1Y !f?ClwH"(r\Eڝl?'Z رʥ=ז=6DY4jq0VD b;ڝiΆCE%A0"`JD H15T[ q3`|8ݴlO`*j~iT?$o*;(]T53 WC%e >)@VC?j/{ǰ.(ٙV)0aT~!*d4úk,$8Dk_rh|%A{Q4_F]^;䫖 ²_Ԩq-)@+hormE\ʯO51Ha&&x쉉lmն&D64i耈pt \2z1FT4 +D!6dI1 Cãf\c a SVP!aZ -9VuO7OMi*Y5Rf  F5s.\,)"ޡ 09rR!&ŗ-PVKVD $_&c=z"ۂcV ܡ )`o3-&pHY!x@'jpi@D kwf!& #1Q9(J"DVܓX(Ъڭ+b(CDJT"Ï|7Iϖ,LtG5;*T&w=TS!X\Cx0ۃ8$4`R0Z^dP$R:73`Mջۥ9!?9"%Jm$0LD1a VB[y "d1S xp䧝۵xNjYCQ=$tKA%EDԷ8 @Drdkj Dz'W/߈^SD$ aئKu,{ PjFJ T;hvh1?FXռnWM@Z4R'&:nuS2˯z$NncO?z@r =z{5.ZD"sI֎n;7*vA uDŽr.Fjw 8aC,lcn&[L 2#@YHy_5hDXV>f1c2Wyu]w"~ާ2xGd"<ՈjfU*%phc} {5=i!H8aQ4꿪ET ?&<:*B\/ĦBZ4aj࠱!u1&o{e EW5-Gq׌Z=V:$N{ض V2"GI:a׺M>Q ArlGp3&cqQD+p#FCX+i9u*]t{sE˩,S#hmhY>]Wޏ鷻g}ĦP*{9V[Nxꆪ5Piٿ/1^υ5%U쟴 Iu+݊? t(Av7?aDRh..?2kͯS. `H=X`P:-xD Sotn0XR hjP9*lpؓ1WC*%1ZRE4(6jmKn#fvz[ߪ h?3r)܇vAҺWbuT D~BtHPUt͙,gڨ@2ll-ց$F$2ǼW" dMT%H;#FPlI0iKCA::Ԃ*+Db$p]R^$kXPx^KtoHܻ!W*cϬa@]ۛ0%&A ~.nMtQSl\- XMx„I( 5 |4@"D@@Gt= ̀bQ ()T>E2`d+睈5!Asc) q 1PGA!՛L(DF)07t 4(sɳ=+0Aٕ,~+z aSCzczys᝚ɦ:C03H(aJ*!!:?sqGzDpp 5W !k; yaġmڔѫb 񊢇DC۷C&Ƣ6Q#L5M7q ނ^W ܍j6{@RkaHf\Qq %߯: ?:.IL!Fh٩08d6fܻTwzJw#K 2@7'@bY?bK0 ꮖaab`s!8:D g5)Fvgaud΃OF$^.SjN*+'_s%< $A"ș>uփVHU@Q țטXm9`RIw~nS?ur%@Dݱj4f)@Hd^oWss0}T/A3 w} [SpiY94u_|kAVY|ؙ xWT[h}!jd҅NaQ[+<{vNx|8P֦`}X|KCe952|>` d5ԕ0 |<6*:NCﮜz-6KLvkeURI' ĠQ@,D+6@@%IX #߷EMǚ~ʄaCS4(aDqzB:tI1^`<\NaÈ]bJPv|CNU8M$G'16o5>%ZCU5n ew1Uh/ͷq19JxlTQ_}bK@eęM!E܆XmP Da?|$'P|F$=۹q!$&&PD .L2JULʌ[?^>_͂@{R臼Hl1CpW6j|#g&rlm' :p3lƍ’g``{:A?ybeoѧF_fxd,q VwϞzey+/]k% yǏ?:E@F82[qu?Hu!b=p<uɨzspq8>{RCwՒg#q9x# C>EG;htb% 5 ">BI0~'j)j$zLX8O"{|Ju:pR~y)4V4FX'I)7^,k~s@z0zN G^a.a ^P4#m ~ u~r| <fK9].s 1m@fwP0+hZ"6e^R፱(HsX[%HVN'84jڬ`b<(X@VHo5O:d|ȲE*aPO0Ȥfjƈ[ڎ]BS42,AI5a!66inPl-:v` ~֦(D2h;)hMˈ DJ4FAѳoN϶7hO`f'c:\NBMS 1Xfɛ4kÙ\nӏ\4_{}tAykt 0a# >Z d]3|TJJhbLATylC]t rdgȋ5b07#D'tDDҜb<`tv!3 w3 A\l?/8K&㪜fņo->u%@}DTbȎj8}@_#τ1FD>CQM2ּ2'Mrs[i9Cp# & v@m JąC5KTPLRTT2D 2 ȵ]DihH&" )RbhFH6AIе 4C(TQURRPAL $QA$C 5 $!M5$PPSMQM,Jwg)H~2R)鴆9T5z>deq'qk͂ulyd{a> RXTI@d˫>ZLV;^ \E6 y\eu÷&l8LJ ,qf&t `<>b"C$2CM2>_Vȗ/%!]8 Ö.L >" h ӊ1 JDBap4a,%2TS IUT$T,KsܝB03!>hhk>ر2*i.wq3{ =iË ]{vktS0'T91'ge` NͦH?t%񳧖(Ĵ%J [l"7 [ $hp^{лX1M $*Ȗn9DȬ&j;I{FQl-ahfe}!j.󨱑κQQHCt+8YmaN,͂Hy%dC$OI k+K_V&DQU-)X1:M=<Ex7`'XSŸ)&wPF_; <_9.iM0$dk{C'fL>y rˆ`X mr`Sv!PZr@ d2[ Oe/~]6h)Oz>)ɏ0(D l\1(2|#g"WrX{B=nSu|rb'Xt(V-潐 #\4q|[H樓(0/Obha"Ձg@R0v ߗ[+pJC)̗YuDCD@:@I2ıW XbÖ1ZT (N_ Zb^>)kcʃA\u RA9' DUnXVR Q.FI Vޓ#@ f YPt4%A6,Lɱ!R4*&=3ͶQ<I!GsT"DDEQeXSslֳ:ׁT,sBb!;8P5[P;&d#>DD"]uv8A†b[H1:.S/}n}) V*tB\@@J$ KQ$OT>đ@1<]ꡀGqtN-ų^{6ajTQ-C7Y1pw:} Yyvn @#pp@0 ] 7P|fDJo")EPl&i(_ζظ1La ",ف^Y$Sp2 hCszEMjQ_-L(F%4.ZDZvLLVCF@J QJ܂n4UU^;Eط#$4҇J@-:"i^#!xD2>A/V\p`G0&DIgȋ"i 0%0B.vJN0(wrPְPd:Or/g2z۹;5gaGE<jIPz`-EfyNLp* 5GTO%`` gIdDC 0ztȡ.MU ߻tCoF(0nf}"|E isLPxK'ĈĮOCnG<}DqXсQ4oq*XjO RCt5#!!OXhHT3ye5@0$t)P0P{{^D"O]fEЯ )@BcpZw1UQ[8`][~UPv2y>q/ORGxI p$X -O)42hdLЖp&oCPY2Ԡ\Ħ1c,v6S0NptF"&벣I=`@2,& _BݎM#0@>2N)r#|a IQXbJgS yaܣӽM6б^h%0R Zz=Z H%=Qi1d* $c[ h+J~<@"nJ!tB\pJU  Ң)S4&xfJLvevjA+əiW"@!!CdI( $ht}&Ax0 4k|큃J4O3"F Aں1jAcp ͯi04u t$lH1&xh$6H@*BT>Hf_n%PI%QCKUpO~`bdhfW YP4`,]uKqdP&^Z8O7i!֔IFJ0 ӌh}jrtuڈChȠÁ© 7[UMELi)(] Xc8=/UgAJI Xt!5b}ڪRU!"M8 u|(&QQz&PG\;caTz`H&RY0wc7Gh ІMs)lmqZ=h~^zFA`E0Hn&P/B y4pwmN6|ƐhQðe@c4fhK4 ~5($LYB;"|"EPAPbQ.2DؔEԍ6@ 5W[-;ADL(J1K!h9dC$QOT$޵vM),TR% s,QXۺ 7Q&!Ad!Yyc8">566䑋X0 rd'S1V 5"G槄|&!ǼS7Ocesio(2*fpאr9].E !B"D )@2k/}A#}勇Q8YN ?j8O/(t8pdyԃC(uA>Nc BQHV(ȱYQQxY7 Sh&fqkpRA Q9T~7g#N}<~4 O˦WRiG& A  ҭ!Bv d S(>~s@Oip jtvOHhCU$HHOCp4+'Py(CJhIhUV؃A@Q&ABDʩwVúf3R4CBеDC@LH үkaX~}=(Gmjl3xi;Zh`k|4O<1Qᒰ((SRA+=b́p]7L8,'奔S K0c37+%Bb˓]sJ[!niG*W=<%/ZH:vҲEzGE=_"LHS1aDWufNeL>cGlE I!}#85!Emk̶6{se.xo\ '+F,X( Hx'Jt$+B@)h T#?U%mR 0b)-`,`0fsT9uACv$0A^gW !|:uƺV$ 72b h[٩Ӫf7.u5Xў,X`&`^HeBKLp0#|( ]e]Bj0w!RfBL48I*E@DL"ld{GI' 0ƌL֧LJhwBcR8Kf(yx` , ol 53P q;QBeM(^MO}CV|VC%ri-,!F̚Rw'\ԑ|Cd Y0FJ,01FRY`I)U:n@z#ȸJ $ :P茬asDdԬKNHa,K|="'{!_RgbRtCtڏӢ8U $Qͽ ={NCA 6rQ4D150 Jc2ǗM=O P3ILK E2M 4)4ރHTHÕO2\ʆ$_0e1I4*1$EAFjKJ(CTҔ". ZGIZ@sVF V$ h@Z#, il&54*A9Fz6t`DP!'_-gB0:'L\w[ iVot\ (08"ݖ y`SDEHiҁtlS(~+ ouS1h" :ă2>OlFQU5PKRI5@Wԩ UrC-\kX3Yƌ1xĔAF#[}v~bk~Y7գւ7|b:]i 0ҍ,F4\3- #jh3h_7tXcY-ݥDKJq,mEAQfLF2SV-2x'umfelK Pč)I;HXtJJt~̦$~4t7oe4ZG#*^!8Ns'\z~8᜜ל7co⏻CI>?קf L Y.r~<)Nu"mghrX>B˿t!4O-0[ 2 ۜD OW[TI"{NBq#&TG4` Ilݹxb9'~t'zq^4F?1Fâjhd7@! L@<&D`&dz‟raGx<¤)8D X*߻ P?>őƃ!0+<:Uw!3 A!pApHN))P.Y >T;yZuՂ%Aͅm? @yS"9b0PIUS5F"bNu@.?>3+%hhP4nN ?Lt>@JP'CD#:  R @4 +.7 ]G` Q(c B8i4ҩI!@ t4J4 i O UPM%J6COiAZG !J #y%'@|v!4(=Mm9٣g?ѪZԐy{c|ԉEMi@K3- U[ QCt尧wxG }k֚bG[Uk9LHF%>pa}2&*}伭IH #M Y}UQH=E4OGq0:@0`9 t"u㿌vl9|ہmW6PQJ!V y"4|UhR[bmmnPQ2- PZ\& Xm͜,m6xE'! HţRQ€e(Z44Q Vxv8th$a8eA"uEڂ%rQ*&S!yf5TK {EAL֯ TjV)lMaACݦV^.RZ\BkE+kŕwn޾ z7 zhWt/><@AU`k"ζ4M%!C֠hT$sviuG\ UDRmVAsBOytIHH@"4+Һ =<$+W(hFJUJPCBebJ X.pw$P1 K@RtJ DF(% (D kBmJFrtxS_qr*:|sM/BD/D9/ɻ y:zD,QUGڙLft~Zќ>PU Y3P5jJf"(""(" "Mtj" J$Ii# @c:LKrtS7t5+̀ht1(7cc2u@E} H1hA; I$QREBCDD3STgG(u6qFh:Ɠv@JdȠva!{}'$T+k)גNSs=2s}x㪰5Ԙ.x_ }߿C/|ǒjJ E 3R&vC+%mѽ(%lT A%#%$81H<đ" Z'DjPP z7v.S|8>~Yv9)CqyO/❼(:ʜ i6]bMy՝KiƓzZJ-O5kNaO\([ic*/߷?~ Acޱ-/H}ކ)1=x3VywÎTi-(e@̘?Gup6st>`t{'NN+BBhcHCbISW1$A "Ee@6GK:ZQ* ps)3AS=%\D"ZIY FFPvLhG3PfaKG|`y;F`1$}l+?^S=p$:S2?l`*EU<9/nڜ DD$mհ1@(hJA "FXV2;^S``̪yL6|KQH!<ؗ!d8&`1ldjrQjYeK9؈~%(ڧDS}S:3tR0d(|O4^~PAi۶f0ak!?lx|I}I;tz7Eyl(|{Q;dӌ'fo֢re"P0CP2@ 8]p~ *H(eCQ%8Te8 ZN1HxXB&NFi/QhqA@ӡL܁y ¹" | J'G̹ ak-Pi¹A*NTO@j RBTD@<;. !% "B8pBe?(Ù =ĔVS >YJG)WAMġ'CF$ >Xma[^t1>x4%jX*b`&i;N" 4y!DQ+LP(K9h(R" g}ˁ) "3 M )-9&EA5*Qv@?6e) >>gDHڏiBY&V)P)n퀉Ѩ hLE#P43P=@OaMHED`pm @>{N8f+µ~aSFBΉd)+tzg! M0h bS,@B11 TP,41$) ̍ )4 I0R1#JTP0)UTT!t!aF|ũXb>/g`"vIэȚG4 X"Fb"& B" BHh(****h"`Z""$ )Df"iV#`IERO~9 10= /?tbꁠQM1d0A)()BBRZ i J(IO"T?l$ĸ reeՕ5mvax@Qa1_ Q"8;5?9 $PsrKЮ7hsmv 6b> _`;x:?t!' 6&P 7+OJȹ0QJWOhOw1m3ٌj^6R4 W:=ܞ8dž%XVY$F yC>CdcP'c''ޜ qa 뛨|{C\P9]aWj urARA+MQ0µ$ $򉆒 ^1y0L!pACTP3 +Jd(?Z`]'W9 35k:?"V?{$wUM E@ސn6xx]^C'zBNP`81dG? ;p,F=c>Cb?wa8>#kJo>8}{ CATL|,'|e|u L4P`BvC%Z@2#?X#ěCG9R`D8\d=; ez2!mB}$g߀(CQu@7lrWCa9m;{˗7j/1(qiObj54V / +,Kn)DZH] +Vd;`6;vQ=R϶'-֡mQ\K=DhHh- Yثl>{<yhmξ^F6K3󐥘хJ0PF'PA Bh+`3ph1CB@ 6M0 6M'CGMDGA1F]CF1+Zl Eb*J-&@tbqqT8$4=(@>BQ=<3e [P\@zfk]>tY)IAXK"'9!f@>Ӡ !Gy F:)uV)COÏdockl{ϫc^ɪj< zMN:]@v;<iJ_NYWj5;duNUC@bwa)Sˇ< ѻY;͐BlznFx*+'0"EM40 X1IbdJF &R/B $_ْc2 +!|"uBƧAR$$PGczlzH§a@>(xđN|9 q;y| 21 w998";kFWڣχNLQ7# t/( qm58nD)N {= DBcO z>x`*4"bwyi5cg@T뤇 n0BX'̃3C+JԦE4)L sF2MJ`{:H2#T /؟d(JDz:]$_Gdg sݰA ?Ý;a|~8 ({ = hM h( !I!W#Vw.7N9з漗 ZAu}/PJ$ތh JuH ]|Aod_NuxA9Q<LfHe/ B r= ?O#v7S: +=zN* (PWuP RL¨#qtٳٞ$g~?+<#1{Jj0{]#:oS~ gD9*n|{ey^w6:nO)L34)'4Gr 1៟lr/A+@S@R2*C3DC2KA34KAJ!KME*L4ısJJR@cI$O xsU攡/9ɘHxv8yy ` 씹`qhюf4'Cs7;'ۊM2!\0>Ø JpspD}L)d$F?pw4W!bZHziM%DB1(SB".ӯ6)@PAB#HJ0BRS-PQJ OP??9?>˖t=gh+$0Ij豦RȥBuf665,Q!@1# y*aR JIAlIyYJBCdNqFOl7p[r )qQH#J*iEoi X12ٰU9ȳ] (EƇ(Ik/T$L@!hW[w7\Eƨ @CO}|/.-*}ߦd9(%BڪwK{EYuu7p}fOgy( gW_R/#Sﰇ$:<'gk)e<ۊgҰٟY (i%H**0U~uu1mW߇x gE)OL ȟ8Xd[:( @90Ic j <\$9v:C$$B  /5KvŸ Qƌ.b0Þ1޺C:_HaO~~vm_ 0~R?4ЁBⒹ~箾N~>b9m 'F7$c(}o7<)P<39B P:,hX8R@b ${`8r.Qi}2O]鏢5B2 PqUe@m͊OgষǑɏ9"{x-OتEX9_A*vpt,! #ĨꋰBNф:LY^"TaFZ@ ngbXӠ:5ҹ *tfs ~x{2֔B졡!9?o%-ʏ!DbJ XaRD(RP 5@ LĀF ђ$)]%΂MPcC ! eBUSYByi2b)i% -Fg^xJ+lPO O!;cYD>1A6J~<@><ޞ`qW}`a4EbUMM `Iui`Hty0Sp"`[-XBC.@˻UH#=n3 % _,QFO|,|bX1heꨱa,>0bu(@!ÒX*bJ3lB팔 T}ۘFh>au⎜ z$h/^8-9>*E!&[H.\}Pˆ %i *@"E 6 &7ϟ@AJ˘nl `G`'ˤ s7qV6 ;t>4zL!p zڻ7j$0 P&U6H j0()@љ!؛J%4ֲw>P2uyCi>#'WcUU+5i@Q{?2 rʬRʠ09j?3;Two+/oN? tz>9읐QKB1:aQ|FK<KGuʵwYRl֚zqis=,ɦDȉ΀rYOWiiVT{^ "h{t惖B#]}9&M7@7VeʒsdTu4<;iC&盂Q!2ӀJ;suWaMÕ+²zMS*8vG>H^miD$؄RV9$ 9G̷;SR2beЀ&={9z.(I {6!$4׽~*q \c.矍M@IH8~@e ʥ^K(肴8cƧ9F \7G~|F0aDC()0Kcuĸ}?PVIk/AhTGr>2$@(zwXHo\^4owtMP{P NRE *J4Q) 0W1X-I )) .`ѶwBMJPHJ}ҔZjzP@t@Ia ִ AAf>NT).>[$ $tҐ)I^-{40[:IR= |jNmu`u}m *PCGtF7" C  }[}٭s{ *%6W.70z< wgiۖsd I@!ǮZ8.Aۻo*:RaʆJ8)H`$0ҀBPᵭ$@|^Gwz'_c{>=QTLd$2* +@]@|T)UJPjAp5*U'um FJ)@ MLXȩ 6N Bk\PJ, d kEEIM0@렾ӾPJp` *@}X[TSLD`4Rv`wý b5K7v UTv6lim !+l)TU u@^o v]v/qAvh)P.nyM "=l4ESl(=p{@  Pǣ"(i4J͵:5CkiIY@6lcFleeMݬCG\5ZXEE w/SJӻrʆۖAKMjB)-w(Q <$H(Mh&{4iTR>.`󑩶bX}_Xz(JUNXl"ZC) )}[m芒_3NDZ >P嵴hnP (*͂+/I"*EHR*$PF"U Hݪ |>}  )@R*)*d(fZh  I& A lwo2i>쮂* >:yl Is.ρVQ*% zu`2Hh>6R H7=)CBZ*P *UBo^}Of(8U )2D0@( E}5$kИ{T,R70(8iw=NmD6H@D=z{2p{0;|'/@(ibīdot=ְ<q02[H(7za`aHPPR(Jl@K E8(HQU7۸Fm6(4P-D*`]gȧђ"K ޹z_fЄ>,(U@(@$P * &ɂdF4ɡI 4hM24 4zO6SFh&'x`nJ0 H} v'+RK eذ.Zh|b6:w4Gc9Mj& Ug0#j#_?bk[Uok}޺S@Šy*tU)@[p Cn$0& -D *^rg L8u6Ϡ<[p`ȽcX7hۄ_l>ͷz}w>rPhF& ={?[W;_A4;|.qǀHޓ´zmE{~iiW ZEn(0؄m CBAwr?3Z;?aB^όCC| nG6ڽH_mp0I8> o=o60adp !\M)zPb?A^q [.G|`0i@DҁWr~}5gabĬ<Gi"rz R|+m79f.ȝgJ**Pɇ7@8Cx8q!9)TqM%78?n4/=G|K]ׄU9a %<.{bߞ2H|$ϥ#^xI#|m|e_A[/׻`] ̄|FĿC@?|a*aׄze콝It}|=$6ֽ3[x_P~o=޻\L[ rUI?Rגb^Ɯ.Iє5#!JD|!/UV96$ we$De=*j' xw*9ۧh; o&] j!\GNH|AJx^?CI q2T+7%'pN\r}$`pQhMS g.AT[9 zfNqqkէϩec}}.[ZK3֋ZطkԿǰ\goɟ\%+RMmǔ]Z  A4 G;=[& {! `N@̛Bsb|"iȃzke:w2^ Z}NOe_#=Gu>bQqش?[]@- /mhґ9"=Q؅AYѡ,X1`U{P,j _k!QC} 09HDeQmHZ(u̞w#!}썾f%5$Bq} u R"&U{Xqvaז"& |_L?hfx=Ty(MOEh؋n$tٷ7.[rrBh#Tk5LRXtuN"~ "zm o!J|^2ƅ4'gBvpjWǸ+??A6Wϯui\ᮖ#9v9) B0pI P %B@{rv+yh0`^4q9`:A@@ [Q>d" gzAȋ9["7%ZI#Ƨě(KO1r$͂uKY6,*zl/S~:,q]4>LSzӰ,r4´eG;c{鏁(3,9}! "kn];͝`߆ 9g{T+;o  7'B8s7ӨݜBTu%>V"0bҧoe3LeֈmK2`}?NO+:&M;12Af|4VuZ1A7a3 8r 9DB#Fq'yps)b/4P5GhBHw!_ Ϲ8gϛ1$B&Uxc ep;_"+k9@x9whʿ0ĕ^:ib*c`d9(0EUKW֌?ψ2r ncs0CVD3K:J}Wosk )T:~l?,L^_ "1o|t1W.lҩ![( \x$,!_7 x!TQH?\&v~{ Oa{+ߚ0 F%G1҄Zw; 3Nf/D/]OTY~zDZQ(Jƶt1YmN_Ck]jzm,cd$"+^3;tjfִgtJMB4a"B3vOgE,UFFwo殩[g25)JX8}GFUuբ' 1%ě ߐ|Kֹk#siH]ڎ̉@<瘹VfeBPS12یd(bž2bB7 ~*z3rjm ÆtLO66 4( /q#& ?Cm?!-\',0@H@ C[C^aF2cOͿ6z~ e̔*(:J.*~wA @oX# 3wWߝ ʹt>kx,vbzN 4t>绒\wH 0`u^Ps͊m0Cq;{RfV|y^kt˓0LEacK:T =ܢ6AzF_aE5~X÷Q)&zț'Z-CP`LJ_]M^ZF iW%VZzXo(9|+~"萴s:U" 27pcZ.q#FR3N¶8?C_s+.l~%$twl>{$V|L#9A/)Q 04ۂБ~JT^GE.Q,wI/5syn3e- i͸˜q/2l{ J#^Ruql.f!ʡUG {H1PFJI  TOdû`H0en{t:KDIpP[e` )UV uBA~ [Ȥ>u8z)^_FQ*̨jh;YJAGk-v]GZd ڨMQ/^/LjG֏uL0©#$?o:0 yHC--L\ 캧]@|& P9Ho=298@#>:&f3fmU ݘ&poe?CN*Qۮ>+qݣ2J첣s)iՐh6H ĩkbf;)Oa~5<3xt{v>4C`3Ǘf͍XFީw,FtE5N]gC^s  ebk ;+: ?'k GGׁl[.QfJ|6賄WtQQ[mgu&xHyn4kЙљI& .=!K9 NV~+zDW{Cը}2=8OEX ,vݳ1h!_d5-m a#Y4ƧLbO򙋝%݇Ey_Ws]v=mH`0U-d3>& ;\sn]! _Em#?hLqX4YRs]J\B}*p:I ~& u 6[,4ph> ԧR8˜;T$V`B(6/74ͬ U ).W솟=,}}%4z~, n^uEN~_ ݕJ^6 ? k G0[#f _Ԕ_}Ῥ0_gE)S6Sg7Hni0Yi w7,{*r/ GP@"ovI 3{ 8@|)f_2aUܠݾgte1z OjPl@!L u) Jպ7NS'&O7a87r[^kk 6 a k.0ʹU='oEJdWYWL޶N ddފ'*%x/Ϣ~.]lp`~ z]/8*+zWWj W 2 cOv(ö 0>܇i`/?#N?83WG㫆O3c/%?_#ɢ?Z]Tw(Ǽ-X(xԏ@ES;^p~^,2)gv<~p%IAC P|LvU`1dwovv8m>4Xo ,eK6>|oXU}i!s(o"E-.vYnr%DrDVMX߷;?gr>&γ3zOONY=$mdE-6w-vM;[5*5pY`ܚŜOx#xx ػGk&+5V_ F'_-'E3.7 o&=i]"Z8%tn1㗲FGwٳ|Ek?,&?k/||\?s}~Njv^XW2;ijov㋄U5՘0ְ07EDe:,_t*(JC| fyBcrf)lL:~(#ڿ9NY{;~afRL-b? (o=L&S-8nP'$Cȧ|L;Ð{e:SFj}~=;߬ޝk+853,Wxѱhpx^#8q 1d.|@\@~l'AirjF'U|=؂Bq(:ݿԾV$Ȋ,W.+k"K{l6ÙIf8K);Q2FcHIFT >faBٷ0r+/,0(g~?K3I<* µ܁/{ %u)lANs'ejj(@ءC|߇}~!H1f!% %pvE<$2N\Bl;W?ca9?{sztNgr__#=::6Vtnq3+Pյw Q-P+4\1K9b+為J Ci#i|?FÔOHMtV=k'<{GysrE$zDŽY$;PYhfdU#0dȹ&\e)iR >\(~ikYVS#եj2Ah5{;M]e(mFoo/JJOwh$i<0-Pk^sjtBOy 貔Ofl)J5W D0HGQB4R_9(73% BP.B|8hBYQvy 9>qGє+ f@wYwed^ 6>d:"KX hG̎`09NE r:gJ1OBLzEJJNçBn}jZ*&z?CH o$sƿN{;Heg ~PдU@Yuq)۶ZK%AEp'_.}_h|#`CDMf] Ū~"*Ji>nϓ> p'3ٕٮ:d:dSCn eOW^ܕ$i9c$Q+V35566\eR6IDA뷧$Rᘢl.Łb{`xA̯?FR"=,a>q7.2U@0sp*MBv)E B74uQtvF9P}㤩NӻXY*rq\U `="KF*@ K cVOuQԡ9.H!ۯs@ !>z>5XfRf%l`!}@3eIOߚ/%+-eg"}S ӗI̋rG/g[aqvYbXr/)Xa D_&/ &? 0TILei쪙?qAc?"ӹ|(߲N{}MG:DU6< ~GFUQ BR*vS(hz3BlzepǣEw N9/qPH(=:4|ݞv@"y!IHp>dm$9̨Ӧ.Þ`p1ǪƭÙM;#B'1Tv[V,ju,F7Hx.c # u1#ȥD!$TI9[)C ]V&_pY؈(]Dq'!f &=>\8חsm[*k݌l:1%}$'d"! 0,;yI$axiK.1" !HҝqCa78 G$€&߷VΏ&ĎMYGXPJH4`BЧ/OJLM!E2%% "*,?hhr? X|myaz>w{ z:hB9E%—ܝ!K/=&FE\&aqVڵ}U7,_iDh lWw|8, 7ѷ\ԔumM :i$ C4Y|uk?2qb9a>ƞ`q#QY<+Pס ,?뇡V' BsJ6Uu٬D[zJ_Ͽgj~{[.UG.#gs8cG^ʟHdy*<2\:MI815oЎ_VRMoYsph, Hq9JߙT5Ne \SEy^sۯ}}|*Gwc,K6qP)!HǢz[d6-P21 N:Oθz/;w[LZ'Lzbf}bTe^wjXc?1fi]p3dթTIMwAe #;P$zG/Ya_]5`s.(!l+SW宅}vs3ilƹ4! ŭ-$TaZְ6*=֬$2zrU"Z8Y-I7\f4Y(ܜ|Z-oLAK p:v}+ˈ!P*͑2L "~ІPM^uW{a7ZK-PJ8f-6yKH5 R_ϳmܢá*=\f-fafe3ʄ/8%U\^QsԹ d-wznu&~pA5#e5iMWMY&Kf]6>[e;&zvVlK-\5v/Lw>օ(qj܌NYq#)Y+șRw@ iD>AP2QMH2/ShUWDKΒO)iw\rH4i-]b(wcAJҰ%HH4.~VG27DA8'*=}YYt}0Ӈ%S[=[Eo&}RMDg)2|ss?r>tńH]r& P )uU{Z^x.F^3o']ϱ3WQaM|t~o:gh~7MO3ٯ]Wo?GuQwLk&c?2r8{%iZV)) _iJXGP?6<\;,)OWF~M md}( @Ib(#1P %|&M1!) ) h(&jʚC8\ s/gg/Ey7ƊI%5x.xbM&;O4b:bk?[?Y1K d"6V"Gtl&#OM4`,mKH u P(ҢD@1RoBDU A4\Ȧ .^.:ױ"ybG!UuBG3URA|?=qç!@Ĕ֌lCi=^nC{Nef}5sk0s;[saiРiA2Lpc@$7UpŢt^sq^S%>}YFdVes"t2IaT8Q^qܸqٺK(vZӞ֤aT$28Ӗ(׉ԁ}X-NnwlrJSUaqڜEiQe&k[YTc^|뾗ab_íLUT؜Ol=BpƌsvDr!ȠR?ocZ6BFv>{4` XeŶwXVl`"J!CR)њvD_R- h-VG#\4Z]'_O䯓\17=mwZVNw]y?30lv|_,($~A@,kL9*樽k+w\-93sl-䮷ÈJDDh7ھ5̞6D'2w}/qwg, ֲ'wsB|<?G\^`s VEyt[F軾-~_ɲ΅u\%X+.-1OINN_O(cMVa2$)!).7+&; aSuǛ.;j^mA뮞}cXeEUGFE=Y'rU*M3hnᩘN2x ΑOIog Ϯ5gY^ s|g9T3hCi;" fV ko*ӧa=,dinZSe~ӓi,y8($/Rhuv<>.K(c4FqҮh`ڳ+A2 KBm?cUBgFB >,OQZѦ|W{je KDmRXq/,0qZ19Ge`+U}" ;d0vR[4Lx¿H)/a97EAFuZ^zNGJNji)Q䌴iձK"ݕC)fC:jzHկZT%ϺUV 1:']$ږgYZx߻P/=S{V}[ S Hr 0jK5w=Mq9kjΦ.􁆛 wvv`S,[ 1./pSlضXKU8Ltދ`ӡPԻYcaAdU^:2/de!hwS::U_շgeay{Rʚ g CBD0m@6U^_$0ayCNK񬊤QI*AC/C bG8â0ljH۞lQۂ+~E!nP`@ߵfmO߷vF6=k؞pgvQHetNݪ 0/KS1M1(d<&4bkGKF/p)%txaJ3Wgd:#}FޢQiDd]b=X ` ;8?x`f3'-Y`@v;v!vuZ Q'@J+V2u+*O-ż䉣q i,9/1$_QXb?[@l>׊ٰ\?oem wx_{zmd݇W}#/@,!L' #l,>,ufo`Ўgj!L|ct*ܜcY^OCkM ʍUq]]~iee̚C(xώ4Q>]VU#&b~Dw*|l!I#pP6_%A$0x c60°_=ΟGdPՇ =򳊅Ch=[vhi  8 \5&/jΓczNmOAPC_@m6颞>ZJ NUgHFq4[r]%Sy{.yr2\̯r3)Z~gAg8Nmp M+?&Uh}3CG~a0wH,Q/ Q~f&_?/XPubJd",ٚRϠk*`}0|:?oTx/CD0;;K~;a[jCGWo=K*q?tQar4'54D?ٺu? y v2XD6HHBY\.7x?co3=,Yj^۪"oWn}(H,?WS;K&n ̱CH?֐fLl T""R)yu@&ȹlizNnXSesk>d$B8>|PQ۩I(Q+ Łמ £kB6+`af=Apˡ`#3~6%nmΊd%@k~wBmZPL%54BmVm_.$𕊸6AD)\@ƧÄ,Dɨplxp6 ,j!Ai>~B`WtsKNC7 %,[*}*w=]j4fda8p IEږwS8t /'#W~C{Q%F2󠥺\[S(DG{c7n.)B@ɍzx-@h*v9lZ3SOF.܏9MyM\E[V uʂR:^TnfiS[v݋b7=w0\֦Na?o%< :γ6sp΋ĚTx콥vN'` + ćH<=wvǟc&e姑/.UspT t:u˚PxU uوO&tۚкÏRe)IHƅub=y I19aSMKLY֞qͧ4q/.)(%L /,bSytj4?;?~ԚΨK1BwI$ A<Wƺ'#2HʦZ'9pdK$IFLFج;DHVٿds[eؚBm3n1fUĴ:iȈeiXLݣKdm?VKq$"v[?-򄬀z|"rTAݵ`ښ|XG3yQuh^tBhʗBDbd NL/OQ|p^(tQ»KyY2-KVUr$%-_tZ]"kz۟ytPvy}>)e3i/35_rImC幝oئ1?`~UVW Xa>r&+FELv3L(c^-#2a"霣# vFH.$E Daybs!yCz~ZKq sBC rqB3A*0 x|ӎ]RdwJev;̙ |G}B {L@9\ ޙ]Qimq ?G,|@6 5@A5IQT }n"m aƟި;~ZQz[Hi-AZGC)D/>#Ϟi-J^F\;yrFÎ!:McJ. |h߷sXK~'\^pzw+ ؕj@" R'ƹޕuU 'n bkKĹK[h'جZ"R֑qYջP2goؐ:/;ǵ'E,m?7ה䖵f~W(w[/;?Oc U_o-t&pfVI/mULj*XN=JsK F$(p3,]fƑTer s!dZ1IB FqTr49A Np#4gT4L(>L0>2*t%s&Wrq4'HItZմE  sQRr[~s/P9NDQ{L'bOKsV(шmX.ap)Ď0yET\{ }iFm~~EL?/b` UyoFx3ZD [Fm LE n;H o)^,HWǵGզz)tmuOwQpp&-{3Pm*?l&vI v=$Z/_%\/һׄ(uh{Ah{:۰m5(\P,>ld7bb0p"wݗIԤ|wm zJ /l 0m-.Ȧ(W&ʝAxјS3 7sǤ)Wэ)zPi3xOȃI-ЉyIS% 8[0#͹$(%Ms~q 2^9uSo+PÍܥc;mԡbc_z~W34"C- j|If~}U~ODBW`~b w՗BGbGpWxFatG|\rfhYЂśOgqo!Bw+͜(5TyZR~Ri9".@I %b/o%)!LEo&I/OR{J[֔4tH9_brM^CƁU!k\Y\z_C+uS2~tAsbnϒY~uQ9M/J S < 3A59 v#`~NP̉+0;"ɻm:H!`i{~I֗AGP+@wWÖrƟn$L˜YKɫ0AP7!y̓co?ZU4[o^2zىKa[Yhk>z3{qnU"5[>gxDV3T|z'ˇ3}'HHL)JooyQֲTDv3 m ߧ/!MAsI e~Hؔt)= M.X|̙PͮZg B5W+踿s;v~p~!,O r[d;]0pd'os!/ߧ鳱`ʃAaZO2H¬Bepbj%_D|Bl2= 'cR.oC ҹw q^d+L\~B+d7hAUVRޜJ%oryY %yeAVS%:QBs7 F_ R aɡSwZ: K3&o)V|?LZ#f)ଭ";XƃI_ѪevmRYxUe+ !jw<85LGD M[M&=^yLu>&6&2f'ً=w^654Z {̼y%dw&a3iYu5IK-vU\Kꔰ_}4=~D,T7pW w?Е*խ=!WV&DkTaSklBY U IdY5h ,8@Ȫ7Ym6'藱>Qcxqv腥1;0*=uMOlo RP(_m)NNv=qS" ViW )&9"i8rv/ b7q>۶An柳4D'a$UlTsǣY{^^S:bcޑRWyh8~%7N $q|z-q-Pb`ZNuϗ>ʡlEe/sKiiYr@Bn 5<^­ˣUUU1U`SŃΞz @~ m成N)2ZFҖJrtաWkF*j dv N 9izY!v,slTs2^ĉ*3k;Q8I^ _Ȃ5:>@m[1Sxt4 ächk.\+-uR<(zMD((PNJ& YF1U?ޒl+ *f?w 7SIP5u b1>81uy`h| Ɔ[imBdԥbQTci:}x2Gi.-ǜ4\0oDlq +Nf/Ǝ!?ɈL@<@?BxV˅c%A0)ՆuM% pf>Ѧgiwj-a&O%zyjtMU7`i },6-PoUA*@S.1(B ?;<|RE{>LD~9O8kǺM]ymh$7u۳oi,MZAao>b"rGh&^YAPA)ʉs>(x۔RQ`+y0Ik}?J";O~[>g3+k~ Y(L0"I+Y*gʃl2] fk.H=} Ay 46'~HxXuF$B.$vG0c"9ѾP$eN BC2g8$A- t'E[=P<< $ V 2:l>)~n?nGT;`DW@Р=@ (SPEGmܳ(ӷ ٸF"ĩ֌63e'|Xb))"_(Cmxɒ)~ Zr )2jraJ,Ooq&DAx$["w$OъruAZ+ XŅJ߽n5£.+ VxR2ʙ `=X H R(! Jb`) (hxXKNq*1 ?sViʰFcƨA`ͲTPX 'i*ՅP1UjS% "(U-d0镈h$: F&ʼnBBa0-Xzdk51^$-EYT`Ŷ0A-EPM$TTPQRUHeȰdE+EVNZjRchE4A2 JH$!2ā JpIXC S%AeH1"2"J1 ꘊ991MD4IR:&QS"#% !@IR4JʄE+EIDM H%ʀK{MF^:֕=rg!@2\cmTV->E* =JSARDIґ5̢* *+ߌȦ`" ()($X t(b iU e(" .JV/zG<82дwPPRAT+KTdRS+ASTTCxG%I"((SUET#ن T%SASKU0DMDDIL4"Q٘PbLDTTUQBTRǧ"$Rj 8އÌ}Ůqy(@[iRШ/Zj3_=S3žPI|dbRA,T#QqK&8`C(MCcT]΂Ȉ"uQKRy^*m NGw #7s N3Y\V-m.Q(;&HNױ&Bf*gR5/Ks~J\+ڼ3ϟ 3HU[okw箃(W"eи֐A;,ьG1Hx͜&CV T8Er! CVcYlJ0Yy{;,H 4F)TͭਲS6-mRܿ.@O(2G._Uч1G՗b~0T^rWCYT(B -ՀuD@El !̲ʈڐ"H<Q9NKa0X_\:=Q3!Q478R{E헗fR>lJw|ᘝ!]RR/ݓǥ:¹0I>Sn!qQ"ipA9DX,Iz28aѾ~C䆤'Hgy=S@DS! |KL!)YË(A72B* "\p H^̼!9p8zT|4HjI)L<|fwo-f)^Iäܕ1ra ۷lz y+5]%i*wYkiYztjPhz\('vzLLw `Ej<w^TdoA"%SO<^ٖUfO2:QB%AO؟a*>L~ eg[d<7\1=t˻! v;$'~E-?G $qy TIϛK?_Ԧ ]~iYYv15 Kk7|o/OQLOH_M"oodXX>6}lviR9M#NnmPG_`1xk7 F򞖕]-=&٠ c{>TF(<z/3YөW5 $˺k${~4mg^ĭz64N*Y\V UJ~ 1SubC) }Ews^"M>_bㄥ @̝=φ~-*ӆYդ'fD!}*æ^5{l> zW Jo3yjV5%ɥ1Di=oF'?(7ɿjP]?s5)΢ٙIo׉%KhJe|8&ߓ ^ `r7?y;p/8n  ?dE֓Ϟ]5cL#F0p㯠6ˆi [Gn~\oH 3g}^v\^њS/ IIs.$ ޹i$j7]pG:9Ѹiߢڼ)R%"4#(Tt|3&C[93V?|Hȯaf<ޒQC<[޸W<~c]W@QEżGk#ȳ*!H]}HA` ϗ0j|KzXHA8,fi.Y c"8o{Wv~Yfxn#=&@3]i1jr&Q f3 ,]?;c崊X˶KK y%ԙqnUR@$S[oi|̰גTh͡9 |?kS,ulE=Nd|2 2o?Rn g4lQr9+O[js3Ɲv (2)eڵ#/.rX%yql;ޞ}A+V6{/21+ GLa1Mf SP}^>ERs&y_]yq7PFGGogӈĒ| Tf5**7D14pp <;C&LFL~k4koo5MsY{Q}a=mrWiW|L2~|GfBLB*d bEBsw}1p3! }Uwe<)Q!v/}35vA" $AG\lzFezo@Bin5p H"$dnܹ`5*PWԨ]$v %y(U5|m~*=o&eaX)N3n\NB9T:{o4pb~i,ml뷜DS`t<1B{}PaeڣA`LcN `<0zPXAΈ织g\J-(Pn(h|"# N߳ V>%,L׎xr 0(Yy{#O<de5&Mtl[N  Hi-H_j|qf+5ʙfUhh/j( X=(aNL_/;4D3t/B׍5RvlmaE$k}C!Q`~0fm=h8r=`tRSaJ%l2`ᬁHzB#ISr)E5ՓMQtuhJY(0K-KN{RF\tSUKέgW;1c )nf̪֛/~^J%/]WtlI< ACF$.harE_1 &@ Df"$`*կztcvjGNZڭJ|bV2M(ADX2Yt9O~>x7x+nԹ U\)M)?t 8Qw,~(di'䉕 aw:4/Y>tt<;6T+G{E H5D X qaDTja`fQ˜ICE@յ]jB\S;LsQت(K>Da. 9Td 7&AUqNsq?UCZEQGBƑ0 `&S 1vY/Q s^C;]ddx]6)ΩWPXְ݊9)-#|}eԧ]qkjM'SfLbƩ ӐLGm4YhǪ{\Z#֩h}HiX{!%IzQvI!1m OL55*)}g>~*׼]$W3RH4jjTТZmɌoYIVR^ O"a^5]h$GMRчEA\=w(peZ |j%"?3ٍ"DA&0VSL<=ɬB9F U7٤j!LY-Ѹv 1&yRI$גpŤ+Ö#3L<ޅ69e PpdxƬ!B(F*VvXf%X)f`2RQL0鵋ѤS/uu˞:,Ӡ*(Qy/4Kǎb^@L22gB0Q%11d: HqDzO 0=9T\z9p dQAu oҖr{QÞs@R:}:*;fI@MNKs 2κ?!?JT~%D~ >N$_ICZ7wTr )`C"kn NLE2m+\ ׻bX" A tC+XPյ*m r\hez[Y'ӤQM(lz|FߨTŗZw@] Ȧ‰U7o 0BJAmwMP\P0**IcnPr4( De-e"F F,R@"4k"NbrEўҨ׏|{;U,UpUʵf<$S,hp$h *d>b4Do#>87f #B(@F }ُ? ?ae޹ΛW$:W<^d|o!tOjcsrn 8SDȔwotoWA+m8LVt+ L_ۄեVd(o~ DAJzW^YI:s ӷAo:wh.ƿ#޳r0]a(#,eФf7*w#x@A"d !{%ZS G{i$lt^rb[ P#2[0m̔!P*{=c (rqT1b#\? v#p8 }3n.ÿp@{eq]G5}*") ))>m@gU Tf腯 G"KR` {NZ@<3me(A>2E򷗇_AHT)&`(!s$: aH;Śvfx#@S'9|iM5\k$e;B<~>!xQ-*ZJZi=֢z{sIQ0>]* 1*-Of1QC舕H+YVIA5컾#׫߽&"[GPl`QQC>PhwRDHx:I  Jcÿ*O$e06׽@1ʍ=s $hmc(x&pLɧC W J;oqy|ʆY<\}PǾԍIBL|J\%ze4#~_@ d+4f; p*"PNQ{kk/bc(Zp'-&TA%*=^j wx(b[hʤAC$TZ;.Gj]bLf&[8gp?r;EHi:QMQ.w6HHrkMt7.Wt 1]׊?.ȹ:eWȉ 6E- @'8Yo<1˞0 VF,jg#[dFMxɨ :nb`OkEeyl>|n+9Ն/o]4e,F[Cc5|3CEx/3)2s"7+Z[ ی gAky &4~J9ftZk8Bke:lZNtNȹZ'U䧎/;`bT?̻up%[I\6 l e9h ~}H}_%e?=M sԟwWbh|V4-$3DV'8YSI[>&Va%{ E F_i䯌oaCI셺-Տ.֗_0=*>%p7/J6M8x ZaF~9  lj(HPo)nO-iQYyO2u))n]-ޞfo'RWvשd%24_I)?m-z X/.2t=JD$z=ux{&WY8#HRYylF}\/)%)3Q0TaC[ұnx5Ϧ;%nWDY4EDjTY'F{7s]4nX疧MUlR+nh8mnKuTל]͞ec,0浞3\wɠK#z<$GoO|=!QLs*CgiNj#YgON0Iv1~e/$WWǂ]2OC;"y:^Uг/pjpI HO ޣT6z4C؄X,h_Leh2:5pO&ȵA->Mܾ\̇ULwݟ^$b>.K/}{:ܝi7RNuΦ Q8}kH.osZ1/Tu\H"PM+T$U=$*m 2z\(TʚL*:ثC3[OH5YΖ-e2$XZD"3Y(d 6B!EHz؛3v91-o~R#U4B}~S|bەomAk^( lIIᡮٜ}?M 73MȔUZ#lҠiO1}tpWs2cP듣] +Yjur>t0~cSa{ꧪsFs#DҞv55.꺕Qg5[D_F,iKu B"w/ïقfeAYZi\DWW)hL8P22/ bp8V%EȮ)vu7_N=:XN6)NNwW wRetvjhNAg`D" ')PV`Ė@Q?ZX'JXХfXf %P5hcun#WN{4QÏ>xP:qC<+$@TPYVtQ[ I\<&Dv[3e9Ę is*j:8.4R%$2T_{d"j-$Rc:6Ilᗚ7SR|3՝yDSв"YPs'~Mxh<\XcZ'wwVwW} 遤\]ID(;ŒCXzVZޣ'wh*ې@5;a{GRR]Ӑ!~+@kaXiJjƔ'4 9܊'\{O-[ߗ{8zO<ᑆx5z953F_)Zr1%Ӫ0-E_Etv3=I Jw,@n}'ؗx BPM-=T $:Uj/`hQD'' m`E^ oǧVB P`xBG*guTnB3_eT餥=pIE]ӺKVX1LU-ú^u#),iƞTN>sXzys7rQ %FYx6&z(]Yf>$^m)عI_U'aS)옹}}^V=";k!4 6s )@KL2Rs} Z% %"V ÿS6gȮo *6&*0$Cc'hܩ} C{x8cAQ|Sy!ݐY4Us:H\\70@+df6Ө=TvLl173|zIhĦ0cBMAe!ǭT.~sz2J'ڃRVҴ}tw$.rDQmz z$vQC`(Wwi B;{(bC!"uOs(%^XS14@S\P.fp 9[g{Ri.q *;NDL!=}Y ee{]H4UY(xYI{߷7&/K@DÕGkvnPL/gѡ]+C;mJwUjtg%R_jbT_y; S_a-)q3(aX(%_p5cMv488;͊ dȭܠ0$׍[mo/iaϪrh/z&ٙ9#{dֻ:ˉ1M:$~Ԭ&`2Ɓx2ڴdɥ9JF_s3dqJ3g1I>$,6R‚̫F\PJdR&F?"<>(@v){z c!^X!͠ $=(!gCP}ALe|fqT8M{QoORzqdU!*͏kЖޖ˂"K@)\(|RBYYiHe(E\\JtMcnᝊ%: R2}56B!9of.#|, N(7\\_:&,mvV Gx}OԀr>ۢr9=5 *%bB2ZR vyJCe5 SG PX!dTU9ֻ\Hf)8D>^uztԍVUUh*wP$ό}^YRVs0*]^>)80 ' ^Q\gCz+o,Ե,䆠=IR6 wQ\7m`Z9CRz.D&L߲Oݓ<=?oJkbH&Ãϭ/Yvwŭ & p;oȘ5E7oIeUls}bsm$ fcY I$M6ĴȌPiU$AI>+hP|6УK@1q^\v<(q̇=ϝ=jCyd~t%`}PCF=D>r EE=:wK:2B< *]}ir$,tqɲeDad֢ vP.Re8RYS"`ٔ!Wm3(a`2toDYϰLJClerOfaX7nyÉ5. FI{3'"B>*g'v{ιZYƦ*)u-Wi*xmXnUY˻_3P$~?V䠔 G F7{K U|#XwIdK h{ I*[.9|0L4;$ "3qȸc\-0+eHJ1{Rwiuȿƫ{iS_ajT1*Ty9<T40wͦ=3l\(gv(bIE_4{%TS^l$9bnگi 'vAN8u@I(hlτ}&P_ <A(m^@;g gJvr4c)"LPsXfxӣl# M=Ζ?~}Z06b/|Ï/@܆iYxE"UK= k%H$_) 3'7 B5a@tW-Vk,t A%.R1h!o?5k'_{zCIZ&0;Ys $0A[?Ԟ xx5ٴ^ǏYːXLiQkb | )Fr-iH('N?%YÌ"&^/Y FǟdE=Qsa+=Etk1AF8a"46飧Չu w좁ɘ_OuJL3Z- y~iq`. qgM6{i%޵.-러j% ǥz wh@g6 n2΋/PIBuu])g U@tNΌ ,*PK ޕ{ ȩ{ey|#COv{νb#D"E?|4J)f^Q͉Nڔ-Vff<RC?> EtW]y7sE])8}.Se A >V/> Z3e|>WF9t:WMgzuV+캳Ϳv8)Z9[N6l)A2"O)n7ׄ.:@'edsdEdT$UWD%kG}c@vGJm):uA^i<,plC1Z 9"TCal_LcÏ{N>͗S~ iY0Z4=9 yK!1逯0ʺ?k[Qyj|B :!CV+ ~ ۰n3i,[LG= S[v]pɖymhU $^h6y^w{崼_S3 JjP¹m1-xOۧZ]dX3 sB2S: gQLո9#uRT9CU˛*&bGhvRaIq53fuP^ ׮YDC.@/.+.*Ay.)QʝA«ѥ,g6P535e fS'j\}lɴȡP8 $L 29N dar"eަx;Gm䃽xR݆rؚe>ѳSډ^ ReX0ɑa=QDТIU+SS:6[n9XD CrzhϘ]HĂYfΏ"mDh'A<3n5DĄa>ͭLzhԹ#3&ɝԕ܅ka4za {Гbu]mOK}W!_kGhp ʈf(lQ Jz:#T}` GLp w.‡EPS\pDR!/4$RrﻍP-tCv\[&N3ė/M&x;_8K:k8mFK[J4AZ%ZK;.2&5ӽ::{ F4/J\bls$(JEHԗK뺁xݶ158-NL \ c5 && )r"OY;s۔Pz /iARU.suz~xuV2#Tx=~ﯿcK*wY3af'}xΔoђ2lh持L]iJGYPNw3 `i-yG;ϰuZːIsYm6d6 ambXXAFK約d+ZȂ/y[WHlqUyC5eٜk5p׽ #@H$RQAߣc_IITΊPyB) QW}BiR`qTb!< TB6[Bвq\m)JA!]4j0{qTHk 綋"Aԋ:ު$֭j "(RoAE s5֦i}Z>}(QY┝ZuU)ٺѺ3 ُu.\ 5&WȆ5v,rZk撋-1;;zFY,'].ui[Yp ᠹ-yոveઢθ; }o_~<:vs;Dl"~_o<'eQ}4=^.dWtt6:+w]-2FUET NR]UϗTuR#k?5{lЩC`:" ,WL2+w uֱ)W Ӆ5@ ;d}aas2/ÌiV/ )u*ɒd` #%^.( 6 M< NeX© :@jPMm R@ zhY]>&Į'6iXwSe^?*۠7كL:_7kCacCRۮo9!>X4IT#׳!,P>^C54Q6wi1qZUwKpWe@Δ$9w]spd 6i.%ڿ6]Cd'.SZ[jۈل {qfZRY,O@Ѡ\6ŰOqĤؤME(AA{A#zm+:Xi:CdZ[?Tsp~ ꜋#:ig" izrނV*4{J^isV[J`.E _qo1 %)&%z \yd(~_M 똻m˞7i0iY)zE <q5%v.X 'IZhgZ70{OG/u3 5?c >Ok9п*Q%]L\K\Ћn&A*M%I2,ŞӰH`s\3\&n?C#^[|l JIN x(R` odc>m's+*E&&DJ?80V&}uDIYxu@A kWA36GR܍fF3-PrwUbH( …%hL`S]";bF[Qnd6@=J$LWR 4gfz] $]:lfwo:5A=uݝû7/(i82MM(wA;` ս S`3(+E:٪hGZv*: AēJrt֫B ^f\9 ;'yS=wܿ;WS8C↛:lCߜg%F_7N;~~sFxq\T\es,PnS;LWW#gWZ srMhӛMj'FX@D5趢xȗLԶjD'ѱ7)Q~>s>ur7OtT @!&"AQy=r Kbhe@ɻl_erǚY`6R;q'.X0k=jsq.,S;8̱lh}jRԵDzՍNO>bB nYEYm՟r F[܊R"BH˗8iR#[:9eCy*E ?r&QE){G-(R2[FGu>卩nv3ʫNCQj6y-c|HmmX=܁>JJ(UCrԭ2:k?f˭zp)l:O@љ3dlQBk9@zEs>-gǣz d>?s.f{U\޺_by{i2sZօZ~%1S1 iQ1=^bc]|vgS3]uU#!wqVkYpu웇D0qaA LV"&G_{#,]MjC jjѡQKj93}4n4ȦKa~9+; 3 `D(Ʌm  2{Uj!D"q<~*8;ꕲPꢒՂ`7 =EX!AMFK$2&||rz7wkX }f< ȍ 6f/R]ڷ+KΫi9# 6GԱ^sub75[h%Qgo)pSRF .1^-1uLs@ěq[ 4 mA^[8iVtiiqRnF#$X@WaF8J;M(X~ЂeI:|Eu6Y.!l8JB5]|~ƴʊ+NdF(U}8^a(pDI7Ing(tlPԇit2QFX\bUyH_KGiZ[C Yd`EJb +O ^:; 8RK2jVB4m5/>Y շ)%ֳqN\&~#Nc$qBڝsc,y2XF?*d`[GJz-bOPu Wuui漾ʵ.5u׻~wyf\9{3'gvi[GY /LThrrrz48mLrrƂdvݺ׼|%!@]Ԣڕ,=FY&9Qqy}>yoӫѤW}mZDg}6]v{y38_e~NjTv zRMԔݔ1'r5N<3wPґ%<\}_]cԱMwXY'26 ПݓCj_<֑~ +5wR_Xb aN/ْĕMYdRk&Y3=x:B{܎ilq>?y;Sړ#͔}GT@ZhGv.S&[}bWH~kED#u' LܶA.Fx[J9s &sLs8ޔh CS-d$da 5yu$$RYr'Dy]6<9ﴅ@-Ū 1 A}bbvpAfqTs2߬I~gq滾Kc*Nmq qYBѓKatVӾZgPG˦QPse5W&H;BPڬ*SZOmbPg<2t5Xا`F&BQ1M-Gz_ϭ>|o~ܫVJYQsr-r۳2L2PI϶ז`Ru> #Pcuy @84!;t]h.c@? Y"?c0π/oipU I8vq|4{ßXžL%>݋KʾMiSΝ:J˭9=Dy³C.̂+:KP1=FYCI,KG'ðQ(*'xot[Yf\;*xKJjp?~ԝ9ik%^ Uޓ>&$J :`UE cpϥZ^-oq ҹ=0uWT:Q/D2o,YuH_Эg)tu?0a+&kMZ3>OE\E.UVnQ/仇Q@꧔)n x ͹qTb= T.FPs+ }-u3^޳腔!36D9 Jkz/khfПWZ3 -DV !N&?_S;QԪcssVxJBVޖw 5MׇB4Ywʯzg/׶nXLK1+Yjs*W 2#hͭgVk+gB=ۚI'~{QڻjnP#~5̉rՑt&LCشwtjpQĒBl#y 4ռqulI6 Ȣ,C#Ѐ>5f UVZׅ^P;/*B0$( 0uQ;(^fqCeI+5 :."ከ"kϩjH22̊ WϐPē,IuAz/8RenDseBG'q|h$(eXf#*9ҕj4ע9DDֳғh-F(b9k 7: 9AxCW! (G[k7Ұ8r FMD>fU_u&QV`Ʊ8Yc(ϗSWQLQV9q$Uqǖ+8 YKQZwJDo ZVM~] &XvJhqNuJV>ҵ5N,Mpf1^2˝0j)>6C©!yA9 K.\X˫nVwlW˴9@VrLnIu`$`O9!-k*7s %Zyda<0x 3|fhۮ \sCO޺][i7& &dX%UGUH/[)Fzķi=@"P%\ wݴ H#_r:¶1mvMNl@Iً߫wIDe>\+fv8QG${H޸]*֭숔HV:3ju% GͲ`eEŃBGZ(s1ALYhDQ9e+ZޜY-Ɉ().]$gWӌ ]BȞ** XwxNr X( G{.6z4cOgiuͫ9x5Ȏ.xƍoy?MFIwUUWaEJ0Q75$+ K? A(Z)b?1 ,}@LVZmN5gáwH粹S2YJ湔r"A Rbo4%P@2Q2ľ }8CO{6Φv{cr>peZ=6[vD袐MԽl i)$b%]0Sk4 'Q`23;.\ڞ ΠI$5&竀o bA--6q.н^yXw=]7W!*wX>e:AU@ V)9{Ue` `%۾M'U$PF|g|o~2n6GlE)I}M P6D-a Uzz:U*om> 5]r'dAaj:>~bot4OA2$/[вfoٛx$Lk 0A+fvnoN)0nbC>1!hT6d;zFdVNt?ڊ8 ձPe aA ;0oZⴐ9Vi̍naY/^}MFMWlrÈx eXeoּì T~ɂ0!&ͥ[ɤd@u!rBԆ 06l%Ҫ raB)BH {8RI9Q`3Zf랆%ٲ8?©5E~JPItj [Ԡ~'b&ABu2u|2fD&_9aU 4|^WfX?'bv\qpLʉr]SBe|to1qSܵeFTfmkÎp̆8zk6m%YUx=!-`x&K# NOVELa-10ԉY_P1ϓ[Zs?<6Ie*e\:Όö8ݜUp؈4&U@h 7%^oP7_)?/:S$=fHԱ~O]WxCrZB&tnJLkVamM ޿tI!Ҷ@0:16? θTdRş] QDKy/!;K+Ţy{~/"{S[fNdZR!U燤y.cpW:h{ͺ鉉)[P=0\);tĖ27)ZtS9(҃i<\ϕHJ( L9?aގw̸ġtޫ=Vh+|a?W\ iT~:FY?V"4_U#Vl =ΘZ׎/9_ 7unHR-(˜f iyL4ri& _íV|hZ\M`l9Wy@(0?6s#6|RH>6wwu,v%Z:<,֫U>W:kY׋4{8e+=vŴMJ*raT^&p0/{DdM\oG>ѹdnwAuqpmX68PvHwEEbyƊVx:O<3R"Ex_[ҧz{k/RDR|P,uK NpkK/\R/UnU Nl]kx`H¡Eo7]9XyX62*28c[lO[%@0q )e. uUg)ȲP1ۛXTNjuڑ]a7\'%V{лD]Vq{ | _ab_c+ǭm.8~Oh=\;ZFL~Ii},O .,JG2m{5eU3nsU%=VVSJ(gXMQe$6P0K$n$ I o3qTk%;a*fRń}%R lI@btP'{WB4,BWF_Gӕ8 T1.1AI s(Vp:?,*SRQ> @KBa15)҂1a^eEg.(VUBgf#xW#MPX8=+>#F;5HSrOMN ?Y^㰨olQp*.A0\ m^ruY![bN+"}OuQxXf2lb:8d=W ~Eu]iu4k\uLƊw`}0ԡa)bN*ʔsOC+=Lpƕ镤) 9VɹmfyW'KXqR(CK%q2H%{r_Ӝ&L 2_!`nC5[[[Vi{19;*E$Zwq"S;5:{GMP\|3l‰NÓ'GHR.@&inNU\{2k[5 ltg(ډ0失B!1&X|BL|bQe*?'BRXj*IH \:L@yM'04h|oa+eKLʍּ?+ 2a\̍E.%kSe82V uzjPBA`u#UmDm ʊRW*Sʌ/qQW3MJYF? F $k9Mj9 7wK(0%l)Ƨ`=-b? p%,rMH:"{ކ+z=8=W4`*F pGD9"3ɪDq}̓Cl~V&9/G_|n'H!P'*Du fؓt/LIXV.a+:S.(Q0XXS[ c4@]Gn S*]]1oC"bu縥qĤ7uäl~Njs|d3o Ӿ-G.d-rT5jUĹa,S9MzfHͽHßNS!wkjc%qb6̓Y:ĉtҭ D\Fh 8vW#tJDdЌ*3efzs͋^SCۮfyq.T36Eۏ"siII3Rj GհRAP>bxr'6$ %|:?i yVaA뱿 $~҃ 1 HJP4F;Əѝ%Uhmb10Y眅ȉȃ@(41J6ꬬ|vB ѤE֒4 ( ( 7~r7 ?(?߼:LNZnyt }˽ bS۩}y8nhϥk9VMlRNø"=W&tn@v '%C X@ ˿( @ΟI~ʠSʷ;tMlD(gi3&3X)C:i*[' Z^x:wVvFkQ5TE. *nMgߍφ5S_U|P$Cţz*("$W$i{=7g0QbCA#3H\SUhT,`:Y#r7yJ~#M!'>StQ(_ ĠQmצja |tG3 $DHDU}8Xo|H#*hI%"9f=aChl0t`2(`-ASJ0YS=\c*N գ%vyC~c3\VL\7ͱ II+'Fy4/kN4OԽ6InT=J0`ȥjB$$1F?z[O\?)>!ND0zha #C|n9%ť&OWՎ{ChD^20⧃z)_GMR}]p5?|@;a ÆxX)JsK]%Z.ela}Q¢W4k ٔzy9UKV*x^Th5ɿ@ ?bx?9?yo>n8m`,hoMFh's!^K$"rLIcuQk(6J鰉_5>1~=$yZR` S\ZQ۵>NY@UQeE"Om4$ )e UFӣ+0ͥGlb_]9A%{3ZcS~!?(  W™e|2xD?^EZdt5:keo>71t+L0e|6f;10H "O@18ET#aM֦^ 3%FUY᚝b~RT]JjouEa|wQՠ>䜡%AUZeNfDhfTM| f#}9ܩ1&=uTb6EH6 Ғ)7<"$TB|~e #~I}wXa;6mݗkVnsМB֩Z/{#@Pin6S 9t,KQuD*"׏ґ'Ħn'ȿ^w?6/$ q-292>z5@1M=D@BUŚ&[e'dpf{HrYjctEL5h>4+A:JAz2QHʵԠJGkz#֫'S#W!ڊ(?'fm)+ƴGя ~ɨMYf(>\AmI!AQ$&d,G?d= Kړ$IӑXVΉϿT=}n/E$*|c ei5iׅ n5kDkg9+eҚwȖ䄑Bt؝i?hWH>󐫣Gxj/HKI;Ͽj52տ &p)ևVdiTk S>~VFW&%-]]RRl׮g`5g@J1rыkz:@}|?H„lE0yxw}sb,g}`]UyGG[8 fkeplZd[ʙp8uL2gZ&6yQXi8d4'e"&w7F^+nڦ4~'*iK8eJ_1 XJtYSt>‚+NYw)~f6ˌoČ*iK(H(I: Ax优LHB17d1ef,r7936_XsW15sY <⸴Ֆ Qk²|Rk,—q7ƴB$4u$5FP-(0l`bv߭8ALGuF*5 W`<@r1:!Ԫȩ@!4+Vٓ[jVF'3QPp6̂DLVaf~|iN_ǯ@PQ9s#" ̍4ʜխߣI@`/?ӹ7Z]k7lw帬g0_:"YNR ӛ;BxR =$8܏1ϳ(aQ'XfС7JϱW.Tyy Aؼ~q1[ѩpI%x TS( gfz9FEP{.{Wئ3}`ڴ( ]{ o%U GmBbߵ~YK>1Ơߞ=;ukY^ Q.削gPmQ<9#XbxKbR!k5ne͛)[U(C1@M8EL }L]r&O &3hoZqgL9hWmVr@ d+t4Ӓ|pM30%lJ%!qN7aZDhה)-՚s G9לjQ1 J27AT5M#DbZ2աQװsqG3"(詇Rhj,W~zDJO&ӎx(X'TٌrmaB$kXF.$.GMYLp3&(_ kXh\m;ҒkϮ$V%\5N?GGN13IKDQ HIhJL&m{kw8G|;ABxk$V*Z)7XvUG9%=H2XS~Vq*lDuv6~z*= a!q"% ӰPSN?w&RI:I"mKw_^đz1"Xסin(BYjExUs™[ʸ[(%KNE QBUPFx:z7nhylZOTF+yrCp\E&cl۔T P];IUt/_6Э\[nDն U]y$s|z Ԧ559@ҺPivFo V&\b > +a=*&e{R۽j+&w.Ay 9V7 ߴWzBdljVճzWK'R~ UΪA7Q*IiɅ82i?Wu#[vᜢd mE13ɜJFR`Ȥ/!ITqtc[ckpZ˳'ޥ1v5ߝovpmu#2A|jea RH!VC*/Nt5^U?_YxfvvHLƞ~,;H'E-)ge*QT0g6,`7F zn )j-琔kU7!aGLEΉ`} 5G>X{I \KMowxno'^h:gD oi R5AJ Hz~߻lɽKu*[~O!vyYw4(*0X Z4՘F 'nf`9ӗk/ bPjx (#ۭrezW9(JW-Nay֐ƧHG=i$͗Y‰Y|\ìBmVV-( Q4IFR8踇ijϣ+_iaAPj7aȢt৳*;a:сIO#-C9b&8 # y批DrD:J3W&^}%U tf#mLAK¢ͻޟ ǖA٪e:¤;v c6H  ,nJP]I CZp3tMGtE](AQ,V ?X~҂jg.M3|j&;ti,$Y,jyF~ 'pEYdP\ց5҄ΑsL\1$:Ds߅dƱ&<SNҰ(gnĄs^ynr\]ءz/>1s8 kZ f[J9oK9Y q:Ҷfm֖mxض[|hhR9pQ9.Y},͔qZZ>WV^U ~Lr:>2%NJ}{<϶9aK7QCWHX:)Wj0'~n2*~Ƨ+r7:/\:n *MH)~4}mU"^jys3PPO+shroƐ4*O7n;N 5QkSuKp:Gx$ /|:0 L`~\AU z(هiAc,0ҕq`ES24P5 Q !ʍ- D43uC(.Hsԉ=iEs؁.1ۍ}dQ@/Эca? >`ܢ !/BSi7 pݝͦ]]˝Dr&Fy"K2Ȇ3)MK2O6>&iǪyozhTJPhii2zP&ݝƩHJ.%ө|35 qYh~1\ťp5[ A<ᴈC#tY;*%pZH!Ra0mDžx21oP_/ ץ)T eYV~6hF6"HZ߱\VczBz]'vV/}lNâ8̬(Q} I(t}xыk( "Rn n9\(~RꡐTeB %}jb] @:3KVDI4@gTv"PˎDvIe '΁i"`^S,9,uLMC$2#"8^na7.`,6\RӐ+#FDtPjEIL?NNh$=\*v(@MA>DI[ESW|Ο 47ZYbJ䩔| aK-fȎPXx'0y`P e7P#2d{V"*jaUe8p՝%V@t]w]uJ*x" /O+PSKLꤪ0A5 :֐dq3&/RJXV_-B,j0ȎxAJ/˃4B+Pe>@,pR+ԍv|desOG/{xoҖe?h\UsaDXAoTܩDl1UR,l(Ar`ay<ţUбZdA4N8<#>Y[uI uT`*%Db:h șW~hZ1}%^e.y,RQ 8on҉lj)#;JP3tRr3(唇&\=IJ^ΰsxp7 zR 03̈DŽ6/wo!w'py( J ) B" BP8`,t<$kF)=gq:dܡ_?}֙CVF=[ݹv e4JU¦q/˛MYPj;eBH!Zr~=V0n-:qяh&DulFB59Se!R;ٱUJN!FSNo1:uuTJt!Xl pyS}Sƭ Fu$^~V@,] ZFd[ٔP~!Dq ReMᳲku¯IkH)Ӄku]%j+k:3NF=z8RNKנdׄz=lkAL/XS@)/O{A9ʩ9֕saCOEw:K?qf U,1]9P [tlNt߆}:(Ч2[ a-sŞ륧T<﹚6o6:zօysOz;5#D3ѕ- ch<9S֡Ete6+|Ȕ3)ݹ:g FVM%JK~6bj{OxJQҼ[M Uш(+w;O5 ͥcPJ26@hYQҎZVVC3 ;ŞV[Ul_^K2jDȯr%`E*'AdTPꛐ 'H j=äK]{:`gAa+6S^e-(+2hm_qQ_A,@bW6M~Zcn;@T̅Թ)d7`?D5ĎzeY#PѠQ^TFf'2pRӡE_ ½xO`gh`÷ ]dl 9g3b\/" ʣ:G#f{iȒ5Ux6::۾ EBg >#4/[ܡ`ptC===-W3-{~nփ=0A 9rPm< wFZq 0 dt .vxڽlojO'LM[Zk܆-sV%,?W,SoLMg1Dszct?:%7ƝDP<7[Bog{Gk<.So{*%=8'M ;nhΰ}HYyrɮ/j(sy›'R;Eaf͓g-Fȩx\XKEɣשwZu,wggvnz[`ٗm)MŶaѿ"fCi-G:;m4/A_E4" /=ڋw!`x@kG*|vd`*&W9+PD4DDeFCC8j2O 0u/$Igr4<mzɕ'[V)BTn)1$\ıJP 6=r:P :ָ#,O'P>wК}N^s6KEYҥu']yLʟ7[r ښ~ҪKT~M+i/v;SUϚ򗺝{}{Wי^˷ۑw 5 Q%-rՐbd\ܽE#) >6yt5܁Lmt9US}[b~UU81)Y==ұgztW]jhas|9{kAI$"oɭER[|^`dI]*X;۔44 Lmh&?zzObb,F-iW .ۓR{iFi\Q8S|0f"zNK1\3khWMJ3L/2'+=wKZVf3+`r8 N[Eퟢ0T-YUe}Qy CtgΚ3"3_.PUS睌mI5]FZCH贤D_Z^פ9\@qV7S2ܭ{lH}k3R6eeQ s&CUQcN c5:\*ay֓u,S1]צ2YŌi f6"֬cI:VSDZ"efءS}T1~ ^=>v]yW $WRgUv4@X>1}Zg+}&} ]fu#9u` 9`kdY%ywbC @F9׾=MTܫ?G|Yko*tbwf uAdUqLj6 ~WYd gXL͇kMzek>jHO.rc=u}E>v\ל5Q(޴y>X;|~bjǣǧB^7}|znW\8bFǹw1|PéuoF43 UßÊr|J*mW1|eLi އk6ne\|6#@"C:G\^ *E,o1T9W|/]'8ԕxTeDދ~w_s٬c^Cq[C|Ǘ24҈Ȯ P~ӠU>9/z꼹&>cg^,dy]|$R!ruq$>J.9;}8tW$%w&e]$ʯ/80PE~C./5 x㜏M Gbfhַe߭u<|)uKV}xNm}4"3{丙M8ф l(2%H'w2 c#UZ$l쵶j>d͵ WeuNMߚ2qǻkx;1/c~IBx/z۷|1^-6|bo[jor\u|-Lqs\NpO*,u[:M_V VhZM;=Z=k]u7"lou%ZZ>D:[uEK,i%QmE⸭Sq4E{ihףGy8!i懧G7AKRjf:-ţ2U:2>ܯ׏|s]e}531T>Ĭ;zg vz6 "u`P$ؾy%>ڷ{C,{^? |ހy,S}~*'-߯xK\ԘX"gYNk9YkPp-JF]ڹ[' ߩ#--sUi% 2F Y>0_"?Q$4Zt\̌Yx7D%Wzmp=\:!H#)O `HGw~%TLy^j>[Hj`fyIBqV722gˤdSwY%kRS.O{>箦-*T$:;Qj#ϸ:V%ʹ#x`BJ:׶1UQEJAeєԟo$=~ بRBSYAr`cẰ{<_x4 z$W]8qJa{zf"jȤZ.[nQjR_M|lXsi-+w .zY"(A,`0ca5.WӄCrϘ̢( +٧QDaJUKg`A6R{I(T\t̼@!-b^eg#\uRVl{= D(jBE9;e20:IqA~vֽ6Ŗ&P![2"Zj|{ U6t[?^nLfՙǞu+4G*dќtaNU`rM&bLHJ@u֔~<-kX5 ;A9ӴFr >oLJ;P*TҲiLcGAjXUKMGMo!CR^uT/S?^,k~(ٳ]n`!0[(O_v 1.9+LL~ߏB FE9Q)5j&(;AD훅Ya(lpkԵ*C)-K>9|4b)_ 6ڝ%H(N={E<(,v;Ǟ&;ӏW(/pdO:u9Q9a(](.SW6lqb}ras]=LGGNsׯ%%Ty|4I~U (~iVi%V-I+%n\b~nFSFfڐV3:OzfYпuԩuۗ4 `Qۙhev~Z/|Z6a IL '6%Ӕ"+j"2应>ymqG{hI}I:t5qsP֨K2 URqx R֮)=S?7f%I&m'մ'CvŖ]kK*Ov%d \YiK|EEZCdVfdɟjX>.]s\Ln~k2zȈ FEI{|ڜʦ'VV ,v/S E+Ꝫ[{Z|#E ćuL_6ƙAc~JĨVH!Agyq瞱\`a. O@);NtaMg,I~9v.|,p|Kpz| CKGe=;>g͑d[;~V~z "/K;,v U ĉYi1ϗXeF`͙I5+ HHKTT#A"LxA+?B 80Fʠl|.\UFS5 LՈ%NQ< =wAMg\}Ħ~ ʢ|#5tʸ6\i0$\"Bmч} VA $FzE9%Iڰ@#/KYjrДF陬Gn m1 z|p u_D#w- O|uy0"WR~o*[.٢+f2>?j,o*yq*SJsU$jY$WuLpQΊ3zd/jeaQeOFC4ZN$;>q 7εVիvd:ɰwDQak#6-T1}ꪓSt >;SB%pU٦;Rq>R[U$ vl2$bbdA{1Љkz017C-jаC'A+ƺ~p}^I s` !=nBXe~w3oz[8: ug q d3?EP3-4;0.uVu;|F⥉b%eYSD!HQs9ѷ' @YɎPynQ{r,~]Vpt?L g4yu\J{iYҭ ~k8eg//Y^L斜K;TX\NzcI: crӁ*.W-d̊P c0{eo'2qBzS-0Yq%8Z&}|A㜧|] u}}!II쏩Neh±ak:ZQWi e-˯)-K]pFU{0VPg_]' Lw;xl,r|3:\S-1|ԛ'%5֩fSt劀(8-xLG*q8{R(S,}NC ZlX¿z+" LU*\3F/pzNx/ba9΀dV@"Y5~J^4Z"sb,O뭵#?_73|5X)m)iP3 גhvmu_Ӌ6g+ĕR;t㫜ZD& NqUrFI2*rFRD((P2t$]cB͔&HB`Gp@trJLwh}=xћ֘(KOB u$eC&{O:<ξVCBafBFZgrǥ -u1FH @" ʋ%dSI"¬H*vlVcޅ9)?`|.o~s] ~G׵=s*w= Etu!MY+&e _B a^:7.>%ϋq &_/`-]`c^o2r-ޖMYBePE".z-Kss#GxK +XLjulXyK$fk%I EF?h oIфG. AI` %tZ~o["2adh=E@SM3Edv{4c0:3(a危fi"Yqj! pxDu,s}՗} J *?cP}eY~15&7[Yykء&{qT]Ҫ9X ڋ= cbd=GKY%f\*JD}J ]SpNbRϨo^~B[e#Bbr4Tp"-mNڜԱr˚$Պ3zud{4zY%1b1ELMrJ;WWlff).gZkn2&&OͨwEeg\H!e۞/s{sN+^ՊtAbBUV. e.QaIx ;CRՖ9;o#KTNDk+V8|xrb ii$|f9l6kTz_M`+NH6><ŨW`jlB|}I8+Y." ߠJb>LPPO-phO&?سh}#~:kbsg"?Q1dgx)ډVX/c̦tFXZ,NRnprSH{=ݰ?i M+jO_c5 W/uto\? [$Zx lQO9`g,WwJq;@-7a۱r3N>DٕL)ݬfȚ1|_>>x4k ;gu @,@ Cm>Ae? )=ݓmH,Io}Tex~zKbyBzlu3j[-J7=hhb h=!n\K^1)dsߗGUcx~nnX 8*QE!{3>wݪx5:_k)?9_V Œ0NH&xCD!F#~4?7m.n6=FBWز,b@%7x֖rvķnA(#o4 S97DҸ폊, kZ$$XLfJCƧc[=r*G.q+AC'UUG{j#swa`xX mhm*O2,%cFDlu- ~t3idkcSǑ>-wj v\V[cJU40ٷy 2qem`ч$jۦv㠦=AaFSD %[߽9v*^:p/Y]سI"›v6Mg+fG/^u%-F$:ȷ"u3=7sy˒Iq7XʲyN~ TzuPb:sx٧ؕ:?;oDOaD"D>TQ{S#zRksnj\& 2leoYnboُ,%5k ?ecru%L\<< YWZ[nҀ^ +p0Ftp 7EX(Tp"\zxybab̢w| 2oUtmeO Yrϻ˛RM"[p&jo踧cWTBʕ^5Kd&p/wYENS,+!__e?[ `DGAoVn9JUoxUEr@zT`vPIbS2#3’Y0/H|#-C?'Goӗ{ll-fw~55:w N)JLoE~P%zᠦWB|]lH .ȬQr*wKbm ?ׯ*b*Bv8I#UZ~B<ӡfyUȘFH?Ѕ>+ea*{@$8a>I/=l?"R!\)Ƶ}_nꉶw~_ _g9`ёfr r$ aF$٘f 'iߜZRԤW6_sqUU(}jj3* ,l?#㴢 }#߄8޵THRE;9̉hjf X =hˏ \",[V%o2(H5}<Ԟ&KE&B 7t?jʖxs wvCOj5 }S[!دN]XmȀF?#*N{8'胋"+3 XaσuwaUauQ2rr4{M_$ة p6 ꜻ Ro[h#I'|  F*BioJ7{;Ɨ0߰[f6{AY– 0ObrWo:Z 8fD'A[kJm|zθS#F8PE:UF$Q@H@j+L+lfLr\}ɣyRs*F \i;f<J: |<s=}.$E&60`g Զrgk3vzZo~??=Sqdn`\j)Bt8 "4|VDbnB:=@l*k].}x~k?c bDHFàg7osOn9KO7pX'snJax?5!bIygC8Ǘ~GqY_c`{ZioBJ3/)QkM9Qwɕ]ߤxܧ9iKN-)~YN-o!Mde+'wJpd;{]s]I]3Z-5ټQ"d.INZjkWO@9#jbFrg-/cVq\0Z/xq恴@`  h.;) }MSD/58 ,- )҄h#D-ttSɊhOuB `YV*e|kOC+h|㜇hIГ`Dzhf seHP|pMz$ l6\2)G|希raUT4 `~WCNCgJ`HԺ5+DV ;ItlW;hg %& ;JI8aJ80D.cbd"FpDV_kimյ=KvbABϾHq h)s'˷W*;oe~|}4ݝxob/9]Vܟ2ڑq#2<˯`N`.  (e1yոڕm׫㭟s&/^6B{O&>6x s9UsCw3 owּYbepj'u>꜎+*sK2vQ&Ə9<[rpyhjc/TjF3N [V66&6~>D"->_[ׂޣݝOcFk0HE$7N?vu<~{Buos;Zg] `mҏ nɺñ-?vNTXҪr^WD~~ys>S]Y3kbմ=?JCx!,>d$;? eevGᷜuIx?Z-ތl ?/㳚(N9 !:iӿ坫AlWcMr!Fl8z}{Kz{WK!~_u^Cр2M>@9;z굄UOFřE2捍'VOTM!V7y><e[st6# W!qO<u>> S=vi@in斑&8% Z}[HSx\`gIyᵙOdt%p 6}_ue8r~A+7o~p#URJiQO6&"k )*H h$,/QK` jo("#ɘb$<%gMijny->:;zeJy3UYɡ\e'b\⻝QH<{[ҮRR]ӫ4fQ 52Oz drX &L΅ذ.[ӞQ$RUy.ZMdEaJdlUQxYբ/hԼ?soߦ'?sFt})T`hmL"^8;K ۀ/{G\Tȿ\vnxj9y\ӗñ^)e?7z A#CR݈;T\A2IdP&8i~os]uwnbo?ƾo7Z J=ɘS*( д (NL hhxw|7C)2ՒrտT!3PQ~C(w'v '? :,P/M>\B!5!5?L ] f8!0s=UE"M~}G5 ("@JCHpQ hc'2dfPØ_MNExc)$>|ja*jRJZ306ŒԜe\=]p AaRu)M) 8c9%4E/I׍]L×0IQD['oK|O2{[n|.>Y}X 5}=s|dNJ?҈jJ yO_^yΨ@)'U',LCoql ?4 +-LC" | o[)uާ%B˔S)z젉6Tg& BцXY"bmVg jumr8D tZPW2>4ȉ#:| ?+DL ~a?$Z7zȜhwge,$'~䥄5/T,YkQH3_h>_ޗ;$_*o=ot\bje l|*2 o'  Hk4hDdc[/9/D~% w||5ez>kxǰQuTkts1Pa7Q_q :Vo}[xW{ ,Ҙf;Pmim5AM`6e-Hѣ(AW`Ef%y UaZ(U]p1JFreȪX^˗+:{p5ZZ#)f(г`AE{Px̙`hGkV;Jel'|^wM{ߋ3lV7&h#Gc,lWS[͐o|oI%$%.y7U" \1-l)lfK_J[~blȆDDD7"wnx;VOͽz:ORH6D7:X8MRai"۴@ TuHZMԳH vnجQX+5۵IHIɊS"kʓo,ؔS @|n)Օ?hB($%_P <_B{h5:QV h-F̨6UCS+$6mq,E5߅^s1%ۿºhI ,ϛa:YAל7?aj!m ,$%' ëi0l?lrG"vG~EYGt?Eb(l &%NT#",SE^~-;xW%99!D;v'f$Ȅ1ɗ]D*bƕω[SЫ5`5`pUlX-C\uvm7?{;-O}ڃjPoO)'hGVt/q +nC6]ρ]4U`bLǻgV˭ :@_֔ K(. 0fDoiiu˔G?{M)MުtQSGdMX?/@8#,,2 ף*6LݝIyD֝3)SB<$}z7?TR-A~]xv+$g-tfVaIvk,u 90uOڄB%-?iĶsNhVn:.2jLKS*ƒ2+"B!g?1!X/DfY%Nť@w^xǹ8Y'itz['M}tfA(v WW~}[6;%oy=(94OzSj(XT*yFy+>-uc㪟6HcŊЕ-! 3*J2pPj&3!ƢPևMl42Ϟ>hNe6QӨ 8|:o*3U.h]Oql&;*Th2Mÿhq–zO_Eݩ,ԾtRe1^D SSڰWսY;f3ߛ+cM= j<+ta/ s^Dmy_ y֟a~;iٿlWwXn6(܈Pz( pt-GW$Fh̼  SΨKPF߶@bE6c^{8GP@~$A~LmugqNE4i`r+,²I4U{ YM%owیukD>.L:Nʼny˄ lGq /;Cx 'Rs.= ji9J8 I@]>nѦ*"0,L\oځ{neoҗCKXZ=Dz\bgmywb23c'qZu|8ʓkąWj<=87Ui"ڍt煍l`<+nSQb$>k}O:޾u ) t%!ÓM%l9_)w +. x÷x(gO/4Y T?}:zQ诎ǣ8S# 4_ %|mU-1mZ mp>3i.]ːœ=OЙ#x7Ξ_BLH=%w@Ilq>N S(8ia(LslUS/GYA4+ul!u WQ:~Xn_ YGђDϻO;m9UQ3vjӸ\c*K/xN o  (Z<&5]tC͑ЉNώiY b A ^!JffD4eK8W3{9c ')/gkbϝz<53"+E(YdI^|; N2ю j(г^!C~:@ΙD=Uk4M] aA/mܩE(vO&۝ ީiaΜ8B#oy4xW!C}l-Y^>TB zk?N~օփ\H!AA8Yr%L]E<띶㶛ȑ\Pr3ӅLdryNwd|&VnumKAacõd:6Ў=zϬF8|t$(2^@SCrV|T r%Aç {~i{L52JR/fP [oSJyzhpA$` 8B(,ݹ\RA>z^}Í|w}3{k`HL[2{8rT!<C6M\64Wܐ3#/ahT^E?6~mE՘%2o&ˏz1aU_Ľo<~ZON?hvБQIZ퍋.Mc"\5#Ì /G0|PWTS 鳓U[+T!Mn5{.HPoW8xKoJ]%ۛ\/7Qlz._Ë.XFb`8!`v&-\H[p?;s/0{avu(\ycqfgbßs}e~yn-HH\vg߯QKAqߝGZ̓8?WՏYб|6w?^/>MEXٱ}ĞjbfwtuIP^X  4e$jB* m:@:!xfҔ5aqLB`4K^ȪF޼2IalO6R;R_vq_9G@aŝ NM y(PȐ4%~{y@r!Nn{=7|[{,62!{Y3l:il6\VͧP43j8WY*[< tRRNvy їh۟,qu`69ĭ2xԯdwQB`TQGܷԯe䝋e)&D3_ =$[31 !ecK1!벀Ջ?m9c/Cyy-8HӀmx:8c]m| yGвʔӠ7sEoQČĈL~,|9EQVbM/LOD=gɍS(U1;%-U7mvc1)4{I+tDk_K'*yWio%נߧčbp֯.P0ٺ1T#;@Y ^dAZABPITK36{R`7WYxV}4^B5_7|fHiGcpٚsrRr Cvr@2nA(Q􈈫fTIc|i!lu4防dl5B `l q+ y1'.(`pteëb1 ]Yܦnc͉M>D񎻆.[&GXK c>d  uW%Ybܚv%~RrL3{Hnkm)Žcv]P E>k>kIZė?B$wFS7FyELG3O~:8rӮ?t[԰Ȉ&.M}A-#LD:%Gn)7cs̈0=_Ҝ3iC -. Ȉ uWUBV oߎ͏B(`TZFz'aTl&Pmל85ۉw{K5uūՅ=tV4ɤiRh+;*CSr'M_6b繁ovq!N"n˟۸VZӆRŠ;//E%i+pɯwHepQq/KEӂ3m8GZc# 7aecT>Y%r:oC"#avYEeۚA1K'wŸ$ZO2 0%'b=DpPȜd)+xM2zs<(v3G]Rs$Cr2Ȏ2I;a=3h}CXO]D5&" T2 Sʵ3 ⷑa-2ܘ-Crޒ~wB*^yCyNFk@?[etr[Y_q=>ށ:gt (V$ m6]$("@>l3^wM.uP*f?~HKRW/ç(bT h|b|*b}Zv?c5?ciiMKz8ϐ˿;OB0{T8P ;vZK_e 3&pxCсU V+0$E3ȋwm=6Iږ,< P7AbzŽ[/ 63Сhuf!뻑$Yg>+ %c!H4kD0R֛⊕hk ~OFfʅe(;/ v?{l˯Vm dSH:kp{vw^7BrOik.<<ԇD:f%p#ӦK`|ޥu˟;^ B(b#uagqIrӇkk*M#)F({GX6svVמlNK΄Zr(ejd;ju>hO;yt>cC@gqkސE3!9{U<=tĒMnQt[Fnx|IcC˄ƤR37ȵFtL9eQmeoK"_o_]"jUS֘U~[g/L[YK3o] f䃰R{b^ĭW3ʝ*l9^FPFxg:*=dZָNeCkQ4UeUZXRe`j,^:| Pk1,WJaepubsA¶X0;*`i6[<~XiU 膾N j 4<UrEnFwyZ7`<-ENĺ8$.g$vӞM * GȲwV9cn)*lzsŕ O߯!_هEfqPØVA1B4 (Qȑiʾ^YI6LTG[u_;՗^Fo>j3&ca}j-$B&jW|^՟dc[כƈpoV8#ٌH[ I˒/6BVRr1z9Z8>ՕUTʫP9Te=Uб:C>,-cK'`Dcө呠6K-z8\!ʕ s0Z.2rq>4}t2Aܲɗ.\4yA=Uw/2,.3U}yJ8=c -I}R^@"p*R]/@(6WB<!?Lf !׾y у-e}jj**%Z4A-8\s! Ood}hs:UL2AyȻ@OKCubF=SxQgG·}W׫ܮH3]5XNB1'^M9P*S+YAf{O9H}4Q)AJzIkm,$AChD&#(lcLO7rH+ws58a?F5"ʚK5g@"SEH#:P}MszXY)ܿG:;4{1f-#A"ML +Q@oiyx=vOc9-+-ΞjsS"߸|n3ì $#Bєz H}xJOÿYLmmK'y_ƵLxJ! ũӈmo߲bZ6 Miq qzY|58yG7+rCM}O7"젍Gֽs5ׄm6.*>o(5ogKuMsm,g*d]4^[B%Qf0ޮŚqA%1mI,:S:8_?#ja=Afn F裃*:z :L["|Ҷ;? 9T,X4皕q&NjmO%^i͢'vĹh0t(%ū˯T^~OîGkO$%EФ*F6D_(JEgfʗCG]nhKЉP"EកÀ0`RӣRyajP\/[2 &6#Ĵ_}[@~.тYL^P5l>7~TiI1( %. 28UEe1`!pAEDU0F6H>o/W װ3{;Ait^lgG~F;>AqHQZ487<0D`Wȕ!>T! ہCedP$A!VxX \9SgZRQO=|O)PFF1 1SL.{?y1+$X;-`k~^[{MV6ͧ[LݎI.ڳiv.pYV u ju{a^;UB}zܯ]XCbmU p=Ntv?9z/Gepyjc㽣ٓ6=K'[{Um#HFʅ|s㛱c}c^VϾyHbře_PQ]#sT)r&ͬ&ЋLv8~mk}koׇZ,% "juc$'aUw72e' R((-'@*3,cXπT@.SdtيA]ը(Á($0DcVtyZl,, %hȄ-O$ȓ^7S٬#V[T8Srfʰ%i4^,,Z1K7cFRӖRIBb[0h>ҏY FˋzrfBAXA)I!\ERGjRAscl~%fF Pb@=dJ</gXF E[*s#A.@$T a,\N@hJn3OHrBbM+،w4/ptI,Ypf6äPmP3{GyK!tdpłj(KWA -?:` ͭTAV AaR@[V.Uܺ[֩T1xS & Ҋ=Q#4 s?𷳎{ jBf=cxD d V34 #Fyp0) ?(EyLqpaz'Pvp#"D8@Qe#eܡTT fLQf}vxM}{K%`EbjahEld4i߻r%x3)`peHYxխpQZjiaoW-H;pO ^JbdTDMO$^YYZb6kv)(;V{Yx+Y. NYœ{n3#taιn͛}Y\^of6D2ɩ5n~V[ma"Ab}ZmHoPc.dd) Θ'rǣ4u[払{ЩEU1gWVx*2qwҷwR)2ߝ% -"]*)am[czʼndETtNVr?(VB'kWyV`&i,tʚħ!#K,dQyKP\+ȶh K:%w#K^3;dkU0$DĴֆV}EY`woۼE$MS)f3)%z{T6yYm9yi9H윘_ηoڞvXK*e}"5e# #W'jmC) ݥYp}FF"sf,XϞ]q|iUhY]O+F%fNMF}䌖8{N5Tݶ>ww]>s5xC?ߵK׈2>=bz2q! -59jw4H]'ϩC-st]Lu?QΥ \BSڽK:gwvf}%z>:'!¶3M{c޺Z޲j7q5u6hkCw{t0U>).kddv-Jxrc@j3EvL6{2s:RͨF_o1ղ, ӽdQyCNRe3TS[zkJMMh䮷pwG*ss)90ΌdUp"C77Fy8վ(QZzbKMbϹ'}LYv~(Q\X »YkEpV ~To70e]V?{: Tk,>NݬՇ?{HZcm#C\=|zK#N]y#ܹi8'. )P'^ӼYV==*KL]nukE'V'mޱ =-kd4*oJsezkWa*jhs=W!/{\K_5 /:D"zF`EāDU7ˉ_*D͜{ASIBW:T˰_iCK//^+ya4ql͋DŽ!C)G@9 JY$M(R4+T( vJ tMHay,J"[pʨH7!L 6ΒĀMQ(& &J""e`ʝiC@Kz8w݁(SR T&R4-4#KJps@a_f(ؔR'CⲃcMobas_ÒUM$ɇ٢G:w!1 K,$uY&?94[+H̫>ғsWQEwK` F'cˉLosQB `} G[GɆ n}%r?hyz{'˰uxDu cv__ܐ;d/e-QMOCOKE4*"?< 1' R*ggy.]2u\/=}Wq7wjŒr m"oBxk~%jXl|;Si@To'=9al}'V-U lNrAM*r!e(~pq?C3+ȝ+0^;NK~ /:XTe QO<0O_YaumlpChspQy"H1nSEOEs#/!۱EN+`*[> *@O ^C>^ő[*j-(!1:DH40*W2A]cߏq}tH%3I?Uto %%AcJjUC f;<G@rma2ki-I3413´xfd4)+ȫE1N-hQ 0.CcԴ |ڎHƍB̀ ۧ)5עwrMJdMPH:ɂɚh5WD\33H U ڻl(NP]j^~ffK]MG-_c-Zwkz{9yo$\w]b,EMJ \%8؉AWc7x0̾=0y.a$#oqH?N)>RCDs܄XanIfV4V$ˑ^tH0D# Wi\.}\T}va0 eƢ-5uZV<\$ٴi  T*,E(ƹwptIGTe 8;r=\oH:gzMw]o?`1IȺ1eYRL5 jsN&}C՛ZVk]X24lXTab;@ VڲA#u-FI073Kߛ6K0%?t<ז ǖg:qgK$ w&y{YtNsf] ϴLK&"Y. A~(U?hl4*6KƎ}=dg,\(a+@*6 <#`ϽwۋIp &%(8?=Nӭra4Ӎ0`av?^rQGZn_&& ٝ˳p89:ul}Ol;٨`8Fm[{coY"NVqSߝl]7uքl o?8(5g?] cyހdd-Ugq `e,w\M>\8FvrklƯC-kyϰYŌ[n,Yʼ^ү/2-~URlj1/-3 0TN™J)AZ/R+GS3V\&(Lt]_PtLY~H]JݿVAg q=rŴy4diX2UtpQ$(*&':;$b6WFm[%aaH$aj.Co,_fJ?GET#,qN'x qe w=IJQ0[f$E[UZN_deݿ8W6"ʼn^T!$WXG0О%7yJ|)81oȺR4L*$UTOP X`Z(I͔*gف!;u#Fhѣl~$ 'EoTjX`ʚ&ީbB^6mxY+@!̖;aBnhO,z$H呣s{0u\#.ԯxq| XG^s#=̹7T N#=8>Q@Ղw4.ϲt ڦJToNm;в;%H#J0a_i)E *Y (dok誺Fq"-T_T&2nW쟐/恌AI %G^S2>Y!/<<춵D9_7PH6mqr)"8""i*?sedX~;!d[m` n@R栠DeKDl( TJ[ 5T ƬBMm$4ڔMum KVWSu|?{㲃M?ѥx>*ON[2hVrK N~Q-Yhdc)Nh (~  PWxy$';Nh sOp7 J ]_p`AT'@%.{ ,N(*'8"fzZ0>b^ `G` s /Dq)%mNK\<ļQߕNtű&f TsncG<{XuNwKuVMYg~mG߷rwy-v(BM#1$ض5J ~uܱpC²o*H'mX^ooB0/+@ٳ'aR PԄs}Oz::]sx >q!TbY ƚ h]W@"46=A -n-8o  BRshΏ3ZsfnʩHT}7)s}RSf?>fo%.脛DbOV$ccE&9[f7scW9=mL^,ŹCy.96 lD$5Ox)r1JXFS܄Rm :WSvSkg>D hqɚ41qWlcrl˻ʈVbl̖. AKrHppy,<.GC^ ]`(A(ISpj?\W..L]!|?ɵ97y:-V& 8%dQ2TM_Tђƴ /;{3nh-07J B!;LlȯSzs?m%ΉS,O \L26um$ FBlMv伱̃A7,V uGI0 GTRNҵ+Ot#9O*KMB!rd`PFOshc\ta,*biEh?w 7U+k.CCTE\G6nj[<ؽF.pQih_ =CK}z>fG]}.nA@k3Pjgw9k"EHTX;;ÅôAWat#N=c}Ǧ6V/KՖLK]#c@@·$yZT/U=|-Ec-9_('2F+P0C[ hgUviHfdmT/Y?=@͖ 6vPX'!ICe# )hD|~,z~J'2#UF^&CHaBX0Y fʞf`ķƖ,J)dfA*sCYJ>0h=(,dt[!{A䫋qŞm !jSϫɿgb{1 % ȜcH 'F-qEFg8K췺u)Fo:ob0ȫdF@iwA_5Zȹ.wxW,`;mwF8@H :@Eg@Nz >ߠHX d0JQu߱??)suc cs2L31޺Z=%37>q11aeŹe0A`pV ,:&pye)[YtxQ‚':gԻ߽?v}\ hgL=rAjtgѰZF(XגstG5^+_[eTY}ΚauzLSA9d@:<<8s͛۽3Ac(iP^LT22񋤵,a& [=zp>|?ٷzrCe8aߣՏ07jU6IףS{ц p&wĐ@]~5Rpu ~}w'o;)am47x;L%=^X<|6<;X,B\T)w@ "S-h!Ĩ G%\&D&`]2[sTm+(7)=z~ :WX~Ep9+TdL>-g).E%x/ |? {l,Ɛ8v4uةY/ RB\ u.<B/I/;nuޫ?c՘LݽmqFzb*   ̨aM'|]'?OI7#SFq ?vb C٘/'!CCHV)C_X~I{uD"ryOTn0kҞU/Yݜ-"v(K"pY3*SP,] ]2 :x** ^S݇/yrŨ=7_A'CTAgU!Zѷ@$(F8ěvqcB3`!@ YLiԁWIpi?_mkg6Vyy_q86 '"`f("̎MeLvAzWg$-/>M/qp<~?G^L{w*zS 3Kk'~?dm5Iq:ˆVn:!-4Ɨ!mT􍤂ҝ]ݜykAC6)~UJh`-$hK,2$McDL@}yŷ0 Ar6EgJŠe縩$pg!<(%+ʾZAˌ)Trqdه(eL_o>"Vk}?-"fh}R1 Z׆'N$zǂk:_[]0pO4ַ(P&`Égi#OP [5?a)1\" HhOMAOu8,s|Y=C1ݝ8QTaM.2ı)E%د(#gܓgOztnZ_]ϑTFG@(.I-Y7W=)F~>YCB']dL~Kӳ۵듯 cl?s,d A]~@ځ|1-;{`ۊ`-?A; mfyḑr %tlvZ먥kTx''UPLا 1hۘl=g̸ _: t`F {ډi-=r->N{ZZRA $H@/Xk1A90С`8$B>c*?V144#`T`Z]  zUhO-=:A3<.bood˜=. Nm}%l9b@N^(I0i5:qR~9[8$ eϚ, _1h0&*hKU~P-p٢*53:dFF`zŴs\M{Zu]>`&D鐀"w=pd=ŀ, @$H*:HXRЀ~!ĸi%*?3eh>QΫ1]> ?133ۋ j9/6[%U6]a2d8#u6,]N58[݅K,*J{ci.TkB}?J( l@]ן]P,DeҳEHTaS#nI~)zHEaRZ]l3:>DϿ/Fas%J $tiQt,IriV]nF2aS!UH.,*(pUwz06DH4<ԷD~5ybA;M- V %WWz`ދK3s*øvl)%$8@AI8A*02{e/;|# CNW\AlHo攕ߺB3'9B4c3ItC'̶Ad%˞QN%&<'_cju@BjaE"$VS]xfaVk4/yl8楇ƤƞR*b`-n^'uy8Z~ B4|(O.ɜ_ &Hk_0+7$7w/:+@1( *,T'?.z,=!!ҳ8UKn6ZMώn"ed#aDlޮz_@S y+%n=Y޺B/W"#H @l.Fy9f )^LGA7e2((6;AՇyϺ}՚&θ[҇' dהRTc/pbLnE" *ݮ/- }hfe 0UƺIn^[{Z vgF4Ŀ}R)M !+isڋ·W8҃Q5S6Uۆ5.vX%<^Spidzgv;pj&!g,Ttqd!T"z>WbU"+is> (RW̦Ğ0F$ d!ĞwY`L`dW!R:F( H(M(V`82=`/&)P EpR. #9fQ}'?QP7OYLzLj]/QS0f#AяIIkͳr$ULĬS^%QEmDꢣ-e][-$22x@gb6lmf>oku?vgaYAYK p⡪=g-q8L~9Lxˉ˝i5ws8"5մj V+zDw "q9s3,snm]/nVɀN s2__θ$AEm%aQHʾwIכ/\+L9>@-1uS3uݭk?>pM = v}/Ĕ7ʏLwGmJp>qJg 36{(S5Cnzt$X8qp pA?f݇}6 A,QFō-O?A"]׀tpoޏ.IIɞ pj&ZhDbeASY!G{H\X&_%MŦ[fJ(OiQp6 9GT_6FWC;#bP2"#ځgngLd2НjR^hX=Qq6[-H 2R B;wAg?j#Q,{IIHBg=1I$Y Ӵ׹k'H eGf\~, r\DY MmMftm LN3oI0< BZzscOBcv1,sEpUB`"AH)Jп6NI}+-qjHU2E]!D9Vϯ>f 1 ROM3!%xљ 4[I4P?BB?$߮ $p(Q! 0 2FRμiV7D o{^t_^nsr)\q^ESh38tʺ?9~Y/xVYg|m.{UtF6~{;s{}mg{H?CkS_qfwt3,*) !" H)ߋSG?7q1{_qebZ*k+|L\+ڜ.Z±ZeS#\㈳zhNh?4Y<ߟ!C9c,\],}"S. D9HJ6A. AuUr}1#]'A2 :[J d7 տ:[܋?9p`㱾Y9\wioNӹYu^w3ح|0Er_c/]8{I9pEs/dgk\oDUs9/u(1EOu!^(4- {I׈o@$054Iq݄ +I iF RaD "w6F0rD 5!ADFJ3*f uXig ?{y]Cee5۸[\Rd-"H.%z_GV^;#Pd7oD]{= e%Εm,ϑr7zxGQX[;96 H%DŽry""n\bӈ{QǨ8!? b r5 :}\8gngn; NL}6BLa5#;)_3ra~P43bJGCsyRvON`I@4B#(HWe]+я?; DSk7@p0'7[y:<:a]"U1]l± lĂ@rZl3o9l%6N4n< sHxbJsE2S$ wY=Vt#faS!hh%N 97 hpehpΧpä|6v19Jw . 6sr1큯!b'ԓd-m˼lwzi 3)1L܍+T'ChЦ=+#R(ǍbTE$Ru2NVv4xZd - aC?*= \qPh0Sl/+τ_~EOZ EDa*F[j(F.ddԲ1iEYv 6(bm(X h1Ldiz2hh(:sGgx i`K/d+c>pPP hhh&ijqGKǾU-)R;s%t⟐m9 Z!K|VYVCKKh2)i hOX_* | (FdCcgGyKBV5T5@CAQ KE-C©&9Pj2i)TԘ@l"Ѣɣ@iL^'$wsX.0߭2"_\)r< LJXbiJZ"b(¢AE+D@+H@ Leɡ)Ѳπ'yzלn6!CIE/m???"<^t/%8-T}W54TA0=?}+tS E[9RDURJЪ, j "6 @enl֣y@S#7Abl* ]c=jAd2ZI!(i !DE|40|dKgw4?YDc OgGÂ;~F`̗l47 4,x5shJL)gtGTJ/@<*H͚/k/i!r>}Rks)}:ѯR\) U@cDCDr^ns$/↓yLkN}zIc+{yiTB!Lk.r?h9vQZ `B#[b/d93\|f]Q֥St?/z2o=^LʘqR90T)0jiL}l|GQ=MPr+e/H{mJc'REo C9dM:5E{WպcTݽK-x^ܮ8X70T@GzcEOr%ڍ7p\A@VG`+O!2wW]|vi-=Ax:gkh=Af#`Xiy3dXZHLd.NGkµ5.ѡE:5uHI>Ns.2)ZŒl]Qlc5̌acris@)?"'T 2B1qQH~28¤+ b9I5"DXCPITiJI'$+ /[j9hˍJP fY^¯Vq-/z/~/Sa>鷨ءFG]Bœ]` CpJuPFI%X{"ed2ά1 ]=\c2J% b.wY:l6]*FǪ6#;٪W~0n…[B]C'/|Qq=53p z }֡\uĚg8 ך 0@PNuO\:8:l[sX{稲A",:vG y^򻼇P[0YL/fm[.:(9673ܣGDO0?^`#EaE%)WܻBdה"(dNJRifv%{ nA<)GX gx-Ph♺Z (=F8@'%W9/7~_;>sKx7 4g 6#=D{C#Hܤ-)\JcpP75(/Ok~|R4הJ]̩ "JSl lsFV v6Rh؀$F)>@܅)R I( pc2x5"p]crS@BLM P>@Zbl?qט8k_(4#Ԫa#h7_:qZe3&fPq&IY``Lr,[ P*ꀻiInu\Iv0%/k?ڢַ˪˶LelP@]2/ 7G)0kj藽 #:$֌BZߟ԰Co3%ȝL/ _KsDQBI2 V+Hd[ѩg޼\H.\ueF6Ar ]?籾0_>T#AJ"LmKm:A)R%!j2h!~獹BH>ǯAi#&?埪:μYXťSnZa˶]"DbMիҲ3@8o/ɥV3{oJt9u5iaᦏ `l ~MI[ N2 7EQoT&Y,jW*D!>B3jiXĠDNLC,$a/',Rta*^,f?!W]|m{<-yBS)fgD8B`I+;Z6/N27:dQF>VӤHiə!A]HDTv  ?fC9/aL^xo$ějI`[{LF"ɬ_Ͽ)5ϞrwY`5 $ubg i1ZAPQQQ0~¨*h*oB1&`d 1_I_3za!4ޒFG 4Z@W+wx-z )hƲX~9|j3@Ȑy>*|q0bZ`$ `|4{ZV#t]KV:\&52qfHm&QZ6s" c#1Qȶ}&i.R Pq 2͖-iD!Ġ 8˥|\ٕhXx1ltaj4H+s7z TjUl)$ ,j>3j"p :M4"_y(  TDLO{YQ@`rm6 ?7}8W:؛ݨ_nIac ɐdh/ɑi?2#7+ϯrO.Xxtӏ0̟hFU3hH }' fOq" s``xnb1lMs"BoNs> 3D GQȤxSN,KsKkqu9ѯ$"EX9v) #"ה`2uۺ* ȱØߌ q$m0o1uN0Y*T0y{*ƌ[~\w{VrZn 202B;;2R4'wT?{,,<٘Y5獣0μe/!#ߗ`e$rVosB_g#?2!%.w$Cve%N5+ wbPmyߚn'W*L]=oV3b)wo7e+F$"aѿQ׏RX#Vdxi饦0] A@}hؤn\!bmJMO| tlN]v i8J̖%7(M i LH֭;.E)/zoev5 uq"=k$(uNFoǚKqϩ[} 2*?̴+XWϊ?{ A,a4xk0# 0,z>h#iөw{,C:߅Z^]j!(GG H| zuF m=tӰַۼ7u'l5\]waMlP>Ðyp?~?I$L@G X& eu,ת j:j.W~GFY#>]KML\~rǒkK8I lmޔ۔P k$|auΈW T"NKR1qUx'c_;z1(Re`ϩ)/8'鑾[ 62~X1%W_$wksQasWݿZK%ڶ|Ue?<_Y-iYHƹ 2Om)1h e0:9Sn_19ɖG&di6\+Lk ,:&Y39{<7c?&{7)Bɻ~R?T>zDZa-SG7SdC^~u &Ʈ?シkpڈ#W0%E .D0P &<Ƶ"")S`p鏋 @`8 *VNy\-潭_ , g; $f%=8}1}wKh,@hʙI|In8I 6I B7.44zZJ9J@˔Q Np |$ݡ3) G_}1q%f3V^0eH*J>Oa>O%?-d?HS\`jfa 6DIe^|R?;F]kO;!'Pj(Dy8qQ8Mg G ͽD%)Ş/9yNnwi3.|ng'+ YBl^OLPvԈ8?e*B+]vi[GHlWQS)꽅BE.O؎ %o#]ރ1 OŘbù%~#iXLhWlU4i^ 4bLF;^owdooanW׻x^v[| 8iӳqD$'#wM{[OT] c Cm61>{Y%}mʷ/c{wd/gyr-0,U!FP||e.*+k,qgs}8EaUϝ+;EGLʋ}S*cxqW/ ~=.s籧t3a53X}fģW\UmYמV+˹_ >yS_O_f沂fgW~a G_axsX?Alc5ܼekzm ;Oy=oAnygjEcyj~5N{^Ss@ /n{˿A~踎&߫8SxhMdR%=9 vҰ/$6 39I?J~}BAΛ}Z XlcQLv8% PLD1$TPNf`41SMQ6ں;#6^~pmtwJ-ő>뫖;() wM/8pア׺ަr%&6&.jŷ܁kyp8M9YQ %][ pr9lAeߵ!y b!#.y?#jSzHoم~c*\K{z 31M(nKldRyɌxoP̔4OA篮9JaIJBJJij7atEZ~{fڧAG`tO ޼tuQB-MMWoYR+Q*45$ӏt-:[>G( ?b%0RQ(Y~ԣo(GO0bR_Rd.-#:G>ttWд`'ڻƕ"e`_Ctn[ xǖyIz"(pLh=Ԧ,~9D/wUzߕǙŜxĉ+u/^~[Z%yW~kcJYӌ r OTΩ06ع\'=Hu-)܍elCȀ \),aMϾE UOQ|5$vD33o:Hs  q*9'Qc ]-fOp5H-wCugyj(_ %`)t[e8b}g72;a2_snz8tª=ߒ|݆Jw/-?xX*2n< dp^ەa_z^ltS_7oۥqli曇{dV2AkDJMg%0{z/@2&m ޿m;ׇ\'^}N3'Irg39au4\OhMʈOHjy]#ݯ[!-"UBtȆwRW6~ѱn1efEmIWD[Czɮ0 T!0 Roy'5>ji(ًW"~ö :,.5+7N]߲L0WQIu6,+0YeKVHg[W@ט9C!")))Ka Kn^0j^xrHjkeʆ<&}؎\mUA_S%`moS h3f8S(]ݛY~(voR}_bkbZ/i{ lVՋܕ9ax⟟7ͯ~/=􀠠)p2(yQ4TMRDHZ)$"(P!`pBd8>=E*"DgJ([MIO,!aڂܕPm :؈((""HJJ^_I@A pt-)۾?0HX&%o0"߹w+I!x' p<6kタq7+bUQMQIP1(zE'N P4cciJE mW}7}w.x߃xڎwk.W|2\ e qIb 9SЄhP&J)ʸKR1>&=\[>o/KH= |+@e-RNn~eFrF7,^8r?T;ٴ)` m3*W !+,${1߂~%9͖cg;6!kh݈G`Bd AWeJŀQ)vd*@n\CRgF 2.>5JӦA C 䈇1h醦15W2QFDf{+Tttޢ? \s&NKV\/~Ԟ'O(,O2\$EwT  8y8i,+mˍ>}mǫ[3\Y\5]e]A8 &Ae"a ^ Vc)Xf ӹ!. bQSSɪ| @KTà(s`1[hdlYtp~fީF@>ʇ[0. !PtwX5NŗY^ Ud*q$cS{M %~.qԗtK"|iX?zZְAwF pm&6de'AM!1Za1xC0N/&E'GZDq"Ky(p}Ur%<Pm΃CF~3jhr7k[Z>k[COph/`Lf^?]GU *xUn&j]+ٟαZ㹞P޳;8q5K_[ 332FGw5]M1IxT:=PxRe'}^Vj#.:)8J |;z6/(QrnuomTVBxos:  j 7| %vmF0 |"0YI! "M>B{㩰#qm4mxyLɠ?sm'?izZjq.?G7w\.TME <>V\t'5R~Ra\ @ /\\G# }hd\1t?wiW+l(}(PR0~qm߸HC5~" 3b_u. ]9j~ZEk9D:RG|ëokar`YÁ\@]3(u^_<'R2Sf.hgFI}L&o{,̤Mttp|1{ByO.-Ykbm}7ir~6j?2x=T0aAbWxmϷ~R1 9?Hj ,F g>1zWtauŠ_^O:؞:  ӻ* S!뽕˿hwp˄+AƯǠQoՓ]R*>hNO4Y<ޠw/ 543ޯ+MhS*y#Ս_"u6a|"ɉcZ E"`XYt\z*:f+NNĩ(+Ӏ3éB0MpMũts-6|C'uX#2U$U[ j)-̑`x|ώ CBT"BwSg^ #^?zPG xl'#dzn\coE C}]=wm$huWVv|v014PQ, MPl$ .j p&~0|?ׅރfZy{$^xaMXT!BVc >9fR!jbRzWjNoh%=| 263%Ŵe !$T$I27ϐF- w]צx͵~?3_\4|GXy5h*~hhƹV~ yfmiVZ`E]NcMpaPU@wq|m/]zߝe''aM܈aOh/(8 E 䊄0uy!3Luc6||߱9nzK]*7S wg [4Uc+el,jD[XjQջR( ]<63RO=0T[惯SVX㲵=z)4F#.QoViÝ4T][݀8r ХP@: 56aU [ J+4F_hj[CI^#5+(<9+c2 `G ; i L4p{d.ߠ6^eƿ8KV"0 $8hvD^$dmWCqF箘છ1D|i}0XjZ- =Q|GzkBqMq7;ͷ.o#")`&WxʩF'݇+AK4M(lM^mCcq/Ҥc& 3AĔ!1:+2p%vA d3I`NBϭ[tbaK?;DA(uiQ'3cv8f&c,@CS]x!ݭk1Cǀƕeb1,Bp?S,ni5жSO#UHN\#yv@+ fHU`OagaCT&8柪He49ȽS& v%zdnjBS)$9@`@y,*^J@z Clög2['-سGQ0Giiϐp[p\&]vAB;X>zzR m7aqc{z<Vv|[* R=aŠ}o P G2ut<ӮwFIJ$~|ɖJH 6gV0ip **)j>݈_xUUUC/٧*\u_5c rx~SE6@r 4=Ž5'U#f 9-DP~$12\u~?ߍzShhq%gb@Zi{/u!薆>::|?@=?JP_xȦ&ɴ QS( )<$qe&+? jSV+PAHHd4)G!-aJ X9- A[J)jv%>F*(u-Ҕ%AxjrpM9ANugw=wgSvCG4B4sObay6xɿhZP7Dyl^څY:>mR~I3/-JuRwCmt93y뽥 _tUv+;SP|p)_Q(aAI3 %\'Y=m$GA7,VNKLdϘA@6xDMAeC8H Ŏ{-QZ>.vkBV{àvٜ,ZQKgh) ;(v,K~"!ݵaZa|ґ=4~ ަl0MۣtOsA#D{6/NV1MgƱ^3cklcs|>jʐ;>j.ݚ {/pgcLҵ@uk , _yLi#huCf}W!y/Dsnn dY `|_՝/yoŷy=]".~Sq}ce;Al/Lx 4eȤp1G`F >6nKS-ipuW>o -"׏E܊E5V'#{nsV{FwO ԅ-zݬs%w vieUPv[7ߟFg|=NQmc*b=CRghL3 gFhhYcʝC*?㓄 O^ffhmCT5S{J(D@cCwIMt'EQBau_nj8nYaXY[f3 nA"ȲY߉%᧐1遫O аt"1D|HA$)˯6s ?uEa8aU/UI &DeԍqEV81 P@BQ>mD8`ݖ(Joc,>>l6dly2og*W^7P|h}nϥugڊ/͠`"Qc/>MsNyO/3Ը _A\>%o~<.OZU&Pha ]W]5f@>Vf6X ȿnX6̫/ V R"SyKA:>;$84Q ^H30̀pˎxGcG#DEe4=Ay8]V[XQJwR |,BUpEd&[8ks{QB/^y1*~|V 7/{8<,K0fafSvX'aN=?%uVlJQQ<8†IQ $")f) (ZElDH◻ &EFQNgkfPXYTEF*D1JAQQUb "TER%%DADUEc[Q{W,b(W)F1+5.\¢ʢ 0s*bb1al(iQu("Qbҋ*' )(ݜ]Ť(BE2G&"EA?[HIz`)*#r!_d+EPucVKQfF9/1;DZuz|?.߃ L &;ޯw2U4"B~DEA)GD: 5x6*jU{1qeq,xep06h00"m}@2f(0UDAAx-pA*GYMu)"'4ƭ(f+A HpU8MĸgD{eq )Uۥ{u6p@5W9Z\bE2LuA$EEQMIEAEUQYMU5t^#'>$i!"ZZv8x! ^pPx!a`x:(AbAb.u O 7P"滌CãSf\OܫNUࠌj{ /6Ldxn+sstơtTo)M7{>[Eڣo 9ɬ/& Su/M">>l_$Ǚ%PaճEH$DNeuŧ:[Gq%v>P^?^mPpTw"A+"E?ԈSU;|̩[lXL;E0F`ZS,p B l`%)@HB6^LSqߐчĀzvMo$.@DxHd-][:%lq[>&R!Ḫ90ca@_"*71oH0 C ^ѝHoƿk^hNKu_hpD$1 >X@D1_E,o/`RL$Y˱p]Qbe!rw/MO>1ٶ Ki+: `aaB߿Nlz+/1l&I/ 8X~*Z'Gʇm4r7&c۲,ݽb[?[Op e }G![JEoFOb7jmvs+ѪGJGT{y\TH0m-j$yߘd-\𕣧FK,6yBS> {hejt`'f"KgHb+"BY.'1OC]LJ%20 ߃UwI@k)Ā9Kߧޞ\ڔ2Cmooh|GEks4,}i~nW།y^?P^K{dž]Fox=8׸HZc)0F FP7(H.r Y$Rl눋 ½ Ci{s:H&0d -0:hh~! o9 DopUrb@>c9ā6{3pt[bt_syӼܩ}[ù͚:pN w*;Qi"ҒY|䮓hҍ˄.*sIUߧVq`,ފ1—ebyDWvފW[(_fӳLn2+HgO `Ne) 1 sݢEBdhm+8~b7oSH8w堜+xQ&1yYPܑ,v?W.zqwkA瘝Wa= h@ΜEH=x<(z_~-dퟕ^kR7OG[V}R}9N$Qhk"{* g8(Ϡء#R@{m3+E~v)!Yb۹ckdSp52r]M;X%8s#$$c&Yx,@] ?g_oXh\3|ex20/!U2dHpg8yvt\ŹfC8أ8 5>oPY sa P̆b2}1KELkb)0XO)+'udC&s!Dw"!iA \i}3K"8zMR@n&tms΂^Fu.rN5<^7yzɢ)EHjNm.Uk<6J0m<{ ƧqzOd0o8vtw6'󕦶f"DtG"o+&l/Q,[GK]\ 8S@ &!h5Y6n6E E'¹l=w.w"I\S +Kx9bhz/]Ů'oYx ONU1\Zym2 a Dю)1[Z꣫#fYHIȉ(|j qRJf'Z6i Ro>=gi 8ޛq Ȗ=:8v0CgE0ðV\PM`?*u& m >@V?ɎZ3|ttOZUƀ7xNp˛H/z zJ1 vTMPA#)Mhū5iR4ҋgJ_co_\cbˍ-ݲS QC3JdݞPOP2?w8;rnq<=h>J,f^UnrUCE(I} ?'}&/>cL|Ir Gߴx:%LY QovZ1PBޜ#C:oZbpHFÞ ($J@USpn@{2.Uv˖o+n=Q`S牙߀|Z Ꟍ'>Ol%y^NQb33eͥcJ~qEI5 :x0:#>g@D9B!5[ A@Ml96(ScCZ?v%V<3uo;w 9l1 ]!A MEݵ:[ yn_yM1J k0a tew|ՙ Jtp7SH:2u|;208 0r09 k>!iWpcg{:=ׯ޾oR| #3a@m%`j b>qQ_ vD웪8+áZ20MDcnR*p8>m(.A64+{ Ěeg&YɏkլY6U? Y,ń}.Iaǁ+b#R<l˦gtDǐs(֜}#2 {[,x^s׺5s]YZyFHb%>ҷw?NTJR>d^0늻Zmdٞw:"f&` j7>U?6혎 +Ǟ0ELSb./l+Y$lIV< `,xsb=''#;o%_^&Rλr+o!ڎL8sϾE-+zpa+d/Ze -?i/&}M;Z.GבX$%c@^4R׻Vn (NXw=+A.A|GxpȉyxtՂ7,vÌIOS-pe`+VSWX\y3L=N];HIQ! 9f*=\܉ceD"3Mf%Sk"F),7>\Z~95$ dfT+uFH$o@) V:'O/.h=ɓ޶'d3K?Hյb*Kh~hS=. r,Ī$84d0\2 .*$-f4 U)FH,LAR\ `SD<=8h&9*4+L@oH$X: c`" XӆrYDmJFIGk *FM˒gLA0YV^ Ў J QBÔ9Ih OCk? %<&HP4g%CI"DU\2G'ɇ+VĹaap*TZdxWAlsC͹*)**.HHJiU L5A0{ h @; 4sVŕyR9ȕܤ_x ˦*{#{=fF d(I$ƙe"XQ" .NŜJZ+ TQ='_}[vrLPӉ@GH4ȫS]%JiLg«bYLhH LbH6;a*CoJ6v F(Ae9jH@}(E QB-\ e pzMnFQԂy)4~#=X3IXD2icюʼn1Ks~F9j }IпP>a"g,}O3:D"V24@>O l͜ܭc!O}M1-Μ9);"6f`1+ dllPYE&L]:\;,ܙ\dr{N{@9CB6* \/^) d[ASY +Jh>EFHZQ25^Vk~쳷F0|~ 3o_1Ck|q#vgE_gnX*=K,ć^Z̤rMѓ#Bb.YZ4MQUnCm6͘7g7yV8)+2ܢ 8|'[kD!(q8\Yfk|YeNMĕMIQ_/iQ-ީL0fUCH3p~|4\$W=%*${Xz,N})G{au@8ui'(&BfpPH qeSJ^aԐcwMF8R j"sLLɜc6XY)JtPZn4VFdz$U|qT ]iau96G̠ [P6cf7#WĐM#f 0*_!( ˾Ci':* 'PL;F^P@]dwEO9Rvl4 1%1J-zH7>"L؄tsB/4+m yb-3H2rU{P=ذȁ0}s`q}bBXb@|aĶt΂[q^?ٲV`]3jtU3_W 3.0ԈY]_o9m@ߙeӣu_3ئľqcuY1Nnu0er1x;uQt4 @æx6V (. G]y讶8JNeȥ/Q{ 8pF$0ߣ2? 2=x@q?w51,W XyCPzY'#5l ;낃WP:n:l;?ép?+ow3LCi2"/`@ rH$z6G!;(jW<57~ҡo?l\d& Ę\CU5P=}(IS'T/<7xi")5Հ.IA̠)"> ?!M؊gpdxd7PVZ[ 8vQEPƦ,w?&fa"+J܉ /7ءIqxDpQloOHnrB_(A Qf N5єBA#}zUR~F9J0("m veƔCćX A>w%BB:/, ʅK -8YLJM 68g#%h0>$и'd5DM)D #ߤӹyNHpS{7_{h"J 3\.ۄkQ JDL2f,lm3p6 $@WH?c|^> //4KXЎ 6ѵn8lonos(S-Qm-4&FX *VB bR J`()eflp:$DaJ\qF&+('G5O;bJ }>`.%X1wf^tL+ׯZgWWEZV4^xh(: "*V9b%(FL\mg×\_hmOޟLzϧ 4gnz2r^+x7^$cd]5W:׌ٯ(B2Ȫͨ4c^4k/y9_'8ApSB<ݒM> yʼz]>꤀Nb}|W=]9%m8!%7ou-NAk")%/%~yy~AؽW?9|nϳ\u0҂" L =l 3v{lXl~>~6(x2:|}B[k/՟ 2.<}^"d`kjȪԿEDg㎒d~ xht[ҞIy<[-t|yg=.^$B65G7K8'743ZK٪ 8e#|d 8f=!d>4/k49Q+h2W=ac V-\ּ][tYGAg#0id<KzA\׿oC(_l̴U|<SnfiL}O._Ϧw\io}×_9S ߗMo:կ|ߔXg2\zo|yk~ Q 4fb+H};R%j%hOE!8yO[Z;{{/ۧ亏~;rq5O_W^׻qi68Oߏg"m~cdS# #ʮF}pYdPưʭ^{T;c1D+pmM f>~H6U@m-?T!6m-J|kq>n?],ӥWB5TUK?2^r6ϹjimЅXZF^{O#\CZg)gl5gd-+ڹ62h>=ߔ)\|]Tm^gIG ;xx{)!#|ZF\y~ܳj'ǹ˒Ns[ [2s˷pi/?W:%(]όs<26x"PBR9PI4"^]GʾD7]zz6NJr#i==yo~P )Bz!\"Ü"u+:BnRU$J P4 BR44~-@j5.Y(4FB:2SP TMP2yJhBHP+- *$ T MڇiԎkC V)TFBU4W) XTR(-`T dtpKEO-QLVP`!KBȨe->@_2)l aa0 (*Z "0ZJ[BMy6!W`K0UǕh&c,وb`NL+"B ,4ɀm@1V$D tAǖ)KL0f&+`!lĈ-WY5bH9rJ ܑ@@$&$V cMFB(@& Ƅl&#@"F0 R0[" YmKT(D~ hL%jf s>IU$`%6{황+a8ZL`i᥮u$Ɯ0K%)L35$o -a 2ӲW  $`S)J8(' .PbRJTpzctK R OsleVΓj ~uwg~x_4F-\jqzE" kCѪAO}1Q tmwL+[nSf+,ݬq{pu}w+ZJ }҃8ǍUaJo}Q랧x\cp 4vEԚe~={IJޮOtzSy6{EWTdhj Z],  dd4Fk W'!K-6 znDz񾒃.ϹnǟM9l{={j5~sUe 0$ @ҫE-8Ej!?z)"JA*Ԑ#;rMy0?uWr 7?u7@!#Әd% "Y rQ0wZEiU~7FuP9 Cx(.ҩ(ud#IGdYzrCO^RrJR$%Si@ 0NP{)N!q7BdP7::&kZzیR1L.σ>abj15iJKVi!+&լNRV0K7>`yA.7QHewh#&O\HQ=90oڳi1Aﳏkw?W $7Ch), GY| xd} tm7=zJ8iK8Dt<*P섐PCQaDS+m8ߵ-F/WhI4RCY TQcN20;dT+:Y1%nլJ5/vâowQDXıd50 T4X0b.=ȢH#q8;M.jT(p 'ݕ_R4Ǵ(/x'AxyöU D4 'n-˫a΍ue.0ה 2pI׊jyrQ#Vu6Xl9z̈o+" Kt{CXqvaęc N@0R4oݞ,/41W6-CfjjfMZ[ W2rw_H'~b_,3R* tBoU~GIna-3&4"rI%KsHĠ^oZ'C ϐ}z۱ꔥrh0 XTf(ujQ"JՀQ4RɐöUR̒Z>!uB$Ovlm7HO4: ?*zP9)IA0P~G98Hh L 3U4>) Ma'pւ"("&>v)"!"2KQM/ *VlFc$))=W0>{9jQSrg-D5…gqd7Ve`qz `IY vԐj $ Ad2lAio!@;IA$dpD%iwC(y~l>qEs&d4Jn'BUz'lbȔjid\t. ,g@^SFgV5z$14xuOTzc\;K2JYi`X["7I(b2LdL21gɁcY$Ht\R jHRe~9-U. ,L5[D`Z0!c#Q {g^E)Sڑ nę20F4a&VzJ9.壣^yhED:wĸҼ+٭bI#3ciH#3L7ǎo%:AMi\p X [0dGT1"%TD)hhy^[{Y]^zNh#f}Y\@HJA*:m6wq+Xmu\$ "7֪umdw!A,$Q5Mta' 8z/Bxkɕwt֪(3\8<.us_<é@,dOΫ*ވRx6 ur.-:N=yf,3C\-TBCJ yO1lRgRmQTE0zE'rY:b"݂di FHKa:aY .3mYgXiF`ZҔB[B,XN~tWUNRKiHX05fcDn` P@HӘy4^|@ m((YmȊ%XA0ŘaMQ4EO}kɄ(%T!YHSu+bcg칕|EC{p>,hkP8(~؟dRGu0 QK|:S3 51LBO::-ޱۜÐw9uC&)n1*m̠ "oyՍTc\ ̘6#g/ N5媹] ׿;z蜇Ig^'Ŷ5 "1X ÆL bi w_{yP dYRZXnNT1)@+!ȋlreUf[D @I$PjbP)QCOq@R/{'\g,YR/m#HcLDl'M$=9:lggC$o>t*zdP@rtURnBMnb?hz x))H=Q 5jEd x|Rk=Cr*-hޗz~qGE#잨@5@FҧUA)rDSh@iQQyȃX7 PYaH!GJZ5FAJ)#f T4ԡS80fdu U!C 34!RR&ЃIJ%*ҍ#d^hqa J TX10q\~M¢ޔ aK签"nM3\SA>8O#~3$eW9ֲ}C{MittMIPR@҉SRgG;miz Ou T>GcبsG~v/Jo'zJ`EUw"D:y16z:ߌ+mۧ;+b:dvϝg3gRd9:\/Gy~ど$ b9l,U1.RR\j,͌hq y&+V@Xi+KQ`rCcЕHue^ \zrAAqgR4KI$HRA#nPk-"𳌵;Ho%. r>i`)4CШ & >aI#D^b J}X$`؛hS b$ҹz @(Ku\|f lIN eiDeujCN0)gpCy:b&: odϏZS܀6 iPМԅ( 1OChN9Bq"sZ)>>i9{;% B:T RQHCC! ¡vXon 22h9T\yKq>mAI_/{mX?8‹zs7š DÃ1Wi+,puH0JIg63b@JFPp#+RqpG,6JJ (^gGP#cu/;6*?@@Ji!q5( F Me.?!)s:N vߩ(P^,L8d $h6h`l 1 4Fe w0qXĜ&A ;I bBDvb˒LDA%CBjI (" !15`L_u2=rzKf{ ;(>; F$l.a2B[ K,JTLpB,-&;pJVDQ.(mDm* 4l),C&!$8WijPV^CƇUAN::!03ww۷zS\0l* ":$*% *`cMBҖ-V)P5* VFX)1Ʀ`)(0R(qKl(g)@-O| ѝSm"hA+PD ajVqBJ4I8D&8!m-[b/w63>뙝zOˇ̙_F;i.hHiE}l!H)HҺdrMV#Z=RѫB@6{C4I!2#i|¥[SI7h YE8- ܬwpڇ76qd>ۇrs'/A4)25Փ̑,@Wl8^`ȐGŢyk E `C %rԩCBP$r@3x5y"MoBjD! R(Cxy0 fDRrX$#J")Ȉ*0N**DPX0eh 23v@@DI(Qa̖@ugF-3J"F1dT_D"*)@r&IÞq)O̘%Y ` bdAFD#9ࡔvD {jVePlTsxc%zzf8a&5tW,nb\c#zi}7t5@Ժ1IS,k.j[ .\:#Z<Z70$zmk'Q/ 5$ 0DW'_B;6x@I^AtPʘz Ci`/F(I)B_x1&&OC=]gn~V2rYRU}v?+}m*id%}`6nM|HPhU- MAҕHUBnp9 meA&넺M뚯&Yf~c 'Odҕ?W\m/N2m!DI C0mֈmc)SB=sM!̓ K@Ȏ[-E!O XsLvc9V;di:S'GWg?wymvH|`KEZ R`#&FtM5D(u+k2W|c[D^\n^8j!#2ݼ*HIO).Xv=g`ѐCxaJ``GGu s{jdb!lM*H9g Zߑi@+\R H 0`€1Y'2))*\DIKy;cuZߣ_`baٷJq"T`bvt*KC"/…b3+gmMZ%Laac 'gJysM^|6Z|`Gk(jpȌ աرۚZ`.;һ;6QJh EJ՘ ^&(%;FbO1;WXfuPѦKG- Cӿ&2)*+%H@ %rEiWԑ,_4&Ul sQ=wA8HR4-d) J@ JS|xMXJ{ (vI RR5-$M;ag'(BV6򈞐vEQT%0zqiD1 UMkYU>cm>-]TIJ˖o''Cg[]f QD iօ~ Bb ؃\ZrrTPfAb $! P)qr) A̜)aXLH/nC50xg<#[GfL8mk|U:m&cg1W7ȊhlAwlw<^ lr@@`J9](OCT$Bi!17;uzoAm z&$I4(<ٷ~,{?~O#wr <3(aJbKWOL@:5S@L  dq>t608 n3CyE|U)RExzEKܲb&Tef`8vNJN:tA6"!Yz;~@=*J =ARLHQA8X $ nDIE/ialƋ e:9)(ARE5JMNFg jJER(,%DTFijb jJCtlf ɀ"(2oP%=wujqB& +F(D&1dZEgO|[%rѣ%ʯTfѡhRFT+iJUT JaY2QIYaۆ:R[J(Fb``YAJm-bJ5F(Ee\ܦQ *J帐hR%IH"0߳p%lCRL+JAYݵ6ְfKR\ˆ,-0[K MI]V1 855j)04dI5TPĩ\-*0SDh 1, EfҊEbmbMA`ai`0'Yl2 Kхū*2XTmġft3 t,DElٰ˴XHN! 'Q@8$!8f,z:?v,eP u(h;ͻ;l&CuF =< ":Ѧ *5¢Җ1JQi6.am0AdQaF&őQBM*_m0P3UC")g0VP.BFX!Zd\2,&fl? 𗻙'F6_Z@N{AR!#Ňy٨Cウ;'A`|J8R4)xG*J-H҄M2/Iw|S%)$j :vd%oy::ꨪ86{mryp08hHIAa8T%d*3ɩ~PҰ` FJ'9_,sh'8=P=>JgQ:x@R86|^~ zb01M׭a'1A%C,M90@@=~1{(2k$JTi{'QףLМެ\sIa f $=\!'އqM-[wzñ?<pnz-_{w=K\QeLO~IJ6`pa(20I:;P=?wUu/GG6$zл@ h @>N]AM6(' QN NYFu Kn#\}ƛ 8$2RW *\BZmeNlcB%L"lmFB) *((UPMJY(7)RJͰ1!PID $D`6v=H į"*ɂN"D$YJ`С̦0%ifeRXLV+b! IrшoP *m!*KbXALP PXhڶڂef!P*lѬdYDɥvDgI"Ȥ)-(V,pw *,$UT],*5mcnrjPh QP[0$ `l ?*DdRpBTl*(LaKl+D3liJJ1eӑD$1bEDA Ax5*% &lp4)X$w0B)%uHPHR4!vM{$ {"FqPݴIK1!=Vb?.L! M\5!@.rd-5ٝ)}`"@"k$͚ ' Q%;*!p 1#R#pG?q9Ix2-~c?FCu_Fm:z[\|lo Y?1$ϿY}mJ?scRSLO5TƬ?k'9c ):G+eudPդJg٦^[,>$ p_Bve亩Y<̥kse`S\Wz䋋za]ubԅݍ׏!s4ǺWHX9 eo|QR(a`PDd0AfL+fp(ީeY\JQ\̓ (,#(*!yח6qQm髚(ȢXFW0W%M -kF mR!UQړ IUw}OT{_ `rGI~N22cm38$S)K2  §,f-Z^pa ǔe- rRE22+ݠDzצ*^0gC+s UXV\04H(1fiJf_&qjy{S#Z҈bp8[^󬳈ܰrTn\,FQaB`IU&T()T&&Z#)Q-(.dET!|:\U DtK̜LD姖é`()5Q(`# iBZF"xíb̍JQRR%R)Z5-K:V\V t޺T$TF/w˶hL 3R&V^T3vܑeAUDL$6ȘƩ a"(jd0 !F0pYút)`ÍLl"a0\3[b;ӳb^DȬa,E(FtԷaz D;J" c &cm1 fVVV!RWRLdXTm$X#Fo0edu(P$Y*&R2ˆbE tFԧ-"5pîQML033 5k`C7Er[K*`+0dWüܓZn+ 3rAX,M d$ļV,G*p|nVEEf`{䣖)0MAaT0Q-B Ʃ`#mdG/ts)bC)CXM`k*`e wZ1/ujUbJ+!Ǥ;92J ,HىH6Ԣjj V *d*JɉA@tJ*lR"0V$({mLqOFud(QdB\jTVTKF=x*Zq1ڥ('&B'lŭd<57~LHzϻ1 #[mA8*DHD%% K$@@+D2A 3m `f !$|'d3:'!N8Ş@촆U5 !(pyx_]r;h>;, qncqNg1ã G%n)] Ji4=_{U_WTUBm%) H{Saw |J3x6em"O!4bGHx'?sу0{J,?+X 0txS\)iOfMYѐdAtu5^ xT,!\6/L8f* ~$*}az; V INjbZR|vS_oITrHϢ`4<:EIyz"!pUȓ 92Mc b3X큓叧0x{'R1гPhQYfY䀾sC4%%QT n@1H 1|oMr&7M[A: @F4b,LC20ar[K)A[DbP5XE Am-T\YY p H#A1KB2*Kb(lY"$A4K)HS#-@EiMZƄb@?Cw6 H0̀1 NX#{d ,\Ѫz-@ eM9y&6z]GQD=C}|JRrpkr7^aS~ i1S x鹙1.DөV Zt$6$ AWU-&]ʆ8 )TiUh҈D7 ӌv]Z[ћdFd1J&\EcZRa3sdq??cԋ@;>SA3찁>uA#^uv4&q/QD`~6Tgh~ 'Le#qnC*D)B'vńr/4=d@M QmxY~'NY`@Q=R| 񑛏6!BG0XBi Salmܐ{>iaϧ(f׃?e%KUE~[ Mssl.e2.(-L+%1\q-bXmu20Ƥ(3.srFX( ;g u%cXr(RRBxOf^CD*1+(>JRQn,Ud(5EF"(ҨDmZC.::~|c>1#32j̑G z6 !ְvt{2oR)BT:,`}JaLM K^5Hд̬O\yKRycbzhz O44x @L6$cO{旣n QMr )ZMȤ=IܨUp2v2|َ 1<:n'[j7x*D]AΚ~<\ZG])qN2;p{1N/g7c .wxrN3f4ηkZz HA*BYY` nɂ.hoHYjԤnCma@F [Y|Bm(+W`cnx @08ۀ &sBLfMNABT3NRuPf`bЅ){:Q۫ct'I% K )ػ5j٫*@$[1)0!!!٨)XDBT2  xvYEм{;X{ bx}9ʒ@qV-h6N(&Hb$?5}<3;2<,g$+vbΚc$bDCnsK8r25YKld7j%f́02cA*R*~nzz{ /k QӁe%u <`OOM.AtFϾMD:!N1pO*(q:=d9 3rbtpMe=SIqU_]ɽ7U;^aAvR$jRv:@&"l*C؇8!ǁ #6Q!4RC7 lz-LL\#m`qŋ"=n`Wz\^fN̬`xS'9Nk|)^F:Y:2N'2sþ Ҿl.c|k憨Oa΃XAÀ?'SxB hJU ޺|G,YI &_hn(r/E5Nuk#;'<%iv˗NxOS{#9M/e"];tBdid'"|`LOk<1LMc (ӋkYEHdi#~=V69hX|$|kS@uu;߿OdZ${λό18[̞=^lo7{@Y`=`hCfm@$1v\t+Z_~#< H-B/b)|E `! @u.Sk݆=;}u[<͉qESˆkODuN;ޖt eHj/!;W z|33b呞rb 'ma•ĆhE,{V;hExzZJ dN$#SC֕8JrJ&\:ܨnquR'quDpt`k ’1߈ р! !iqHi"lp#dL,vIsnR/1R1:=ڀgcQf=5ZKU IH.ml2"9@ؓb(ηڒh*vwy2%f:9+Fq o(yD!Hw5:]v٧+OLu3>y5@ML|@𝡈tNxO["5Ҳ.f4b=BxGC0=; 3$nڕ3J ,)8SFݦOG qTe}O*oޔN&WhA`P2:U#Eu'1&E>aɛB$ +\ XWo\"sySP1P 4!^0h& ʺc5dTkJj+'ݍё=X`k>,'S'eC F`QF!a=o}Sbqe1Ѯ YagUsf!/OS"eXSx7|jo&wЛTjd?' c%]y 8ŘơXj'vP*+HWd쉁-liZ7ѕ$aI$h@$v@ x/V.<JxH!ބ)hԯ:nuz0=4G-WٔD>77  aJx| ОIjhD`{Ij09yE 8T=@1v Lx X8z`zb=3J,Ӗ@o|_Dc>3R]xdGQGT*| On#SzxQ(e|"A0&uʳaEE nk)%B$ ݭEu{`؞dsYjnxFɥ|.2 )V+X^[VhRzZ{;=;*.ۀT4bN6R 4ȾCـ2#ѝ1̐`ckd nу-6({, 8lp(055ي}&V1]ʺRbI`BwsZέۚ vN# f{> *~`Ҏ*ŇU F 7 bH!5/V`[6ED |bA꫹% w@.g|"` jK 0)2W*#;P<8@6;3V < |(ߐ,> 6Ƅv$xm>cgx;ϏT+gC"ai^K8:BJgayf>2Wt;n{u2zPVSS- BF8cNҒH~e z,P:íY[av6c Hw*Zimf$X-{Nf΍2p G&Aur%}ofg2Ӥ&2{jJUzP)&Ȅ@|A$niӇ  0d \$< oOkxޓ4lzlVْ5)Zl0-vVNkjf=J La 7 U|(3E$dBe-3|rƌ@vYр%G!kVĠhb‘a&=]3-I's3PK!LمT!qߥAYߧT 4C@";oFg: P<,;">> Ԑwϐ3Ν=[}Zg3=!)A=V ~I`DzOh41RO?>K &Gg_,Fȁd@ãHAl7C}Oz'vaR1*E  :=yN=ȭ k7_#C+hwK)Le(LY}9T@QD gaLYY{V4=2:ܻde$Rk&f2%ZQ4H"(%FjN\U\+ ZtwK|OIEMަu_S PW7UFIiUڎdFkQzUItQF> TMMma@+2 ,XKԧ6yUECѐY[)o;!}|-2 ف* *wcѐݾ ϥ*UQr!-3 bt )FU5;݇{J3KZqrE3k`L& ]؈s擤pA&䨣HHv{t CvbσB{[P:} !0|$3=97!`%A3ݟ LcK|&b,\hb?6@✻2D5as [AnXk%L ȹ+SeMHǂח4Y7EP 4x?Bsy"S^$zIL9VHCIARs< `osA˭N#/΀#O=0d-Hֲ[@t+wJ{ @\=M cb[\ZE3[1%u(2s`WYo\/x*ܹ! Lx 00p v ߱`|d@ $|!첽Qao8[pE ;X\rY|8CP,r<:4JE$R_v/tejbzU, X8y9aodDhDZ<305r"Ҷx,Q9'7&#oqXE=3Om=y5=X{2!v丯NdIL4c^55KdK\ =D^nFbL%EQ߂@p0 FJ oTyw:4))$] ؛{X|4D"I60H"-eXgJ`bT'I=:ƱAOOCyB@CcW$I CR H!4[ p$("m5`-2wy9{ܚlQI,:1D\ Ybrм^iFw@Ti:] WAwN~9a^N|] H7 NQD&~g/U֭O ١X)Jj#s;}fX4O^PH*d '\>g^-ѱsj9 4%FzYUAga&%(/]]lޓB{]*o}a׮yj@gi-%S,@ R`U۳ uj5u0! z;+hRYU,T{21EiEJذhbtA)FVXdzвmF?M"It"}[ ׫#4@c qt*}]zx׭G{鰠hPd",X;s]05X{mzБ7n]W]p<:">>'A_, _wQaP*6T[dT%a5%D= f{Ty2F*$1f:A ,1F7uG2Dz2BM.Xl"z;kP s=ЕA1 o?r/՟}g@Gv=D={قG0uCrdAGx>xb ZG7h!hQ{b;a zBUeIO)ąt3SLn%ɶ<o_;R&Ř$)E64v>p{~@e>n:@=i|[{Dѣػu&s;6Mv\Htfr~݋տdZEo]u= wP(IK~i4Zd8̚Q$ ywҘUv#"|n13`@s},X <ǯ1?Il|TA93D$&A PpsC_ajE mVA6D|^C})1CB ,wփi 귡uxz{#d|g68"1u#!2Mwݸ.[{bPpں\@}nFME&pɘ(~1c<ssX$L.ZluehfEFjG ؠ&A2 @O@Z J~CV*@ S h>KzQXɐ*Ar5T4c^rY1`ND0`Y&-%^_]S<tc\!ɭNza]8&V9kա]ИΫks9T +4(\95kf˷sv6kLh[Ӣmv!c#gkhwfG6k2]UrBM,<'$EHҰ\֧BkK Iӕwu'ّ˩Woz 񶀮ԙEu ru=rzJ#N3ŐȈGy+@>OCav91qW=y$y5uGO3bX.lo;d!MS Y5)#=60(iBaD `ڪ?ibAUwd:H"Rt;v*o'[k@TSA9dDWÖ 2^wy7 ܼŊa:pgP&ƵO1kʵ;?ÞO(S1Dzngץcu;`bBbOv0z}q4OD*H2Pߞd;H)龙 I$`tzxT!\<Z@@ы0:<*ԫ4`@$E 7|Iq%`=X݁ Bąsuc!$Y'x֞ysX4u},浪5oG ~0фXߓPH#mC?΄0pB75hiYC.WlJRGNNGG-Ys:>5Fa; ?fn'MdXJZVY2-((5 hm@J,ө(oy u};qm@_h4,joa)#C\g䬚"R6xϝf.% -@ƋJt[A&Q{uR.3Cah* jHh ;4WwwlN| #%?ɦp(ݞ ㅀa`P;)=Ck2R ^Ԃ.E0@Db?JйVɤrPbI'%_Fo|SΪ6=֐-u[p_Ib^$Hµ;@Y,5/fH *|XaX#<@wWdWg+ФwM4%=]軤@2廙^t5}=l1%&J: ksBKE?Iw{<{BDʈщ0=2Jb+Eod L( iZ 8iofbfdMEIX>rE 2 EfAg[@rؑ!i:EE I1zxAl {%,t^xS@y%PA?Iʂ#=.^[CMEF0zBK}y$uBupCypoRXXm쭱H ;!lkDz!DB)HPH\$^pqQ[PF}оshP(QdB=ni{KL}X I):s{_cUnĉ4A$)-?Hh)IG ҶP)##r1z|$|f=C3E2w6H,Q25n jmQpP@K|[fEȪ*εȡ~|ġ$ AXع/sҭ 2+;l(W!.ʄP&?{r5B` PL{hu3٣"K;;1j.o54{,f5ʄЬ Ԫ!Hv`&h!JV)ml0PZ#- R97Z$ I]kcC>:"cQHH~DzE QK`X/||Seu|AQ YfkXbd ܴ}H"H,Avu2Hz":{,M Cp顎yLРrh89cysn/30U DtCԅ갳w\azbkNLFp,֙oDm䀭 ) HÄYbja Q:R|B[N{d$+VnĂp7)0TAE;Ca@ٍ'mn#E33L|BR`LfUTvlv2q6y4L$Uҡ%Afȃt.9ꇹϵx+,>wR(UۻJvTGܘ6S$IHh .,%C䧕qc M[#xX0f SXH$q]1y݃X_˻DYiW+^ .`MR/OC?yH¦xUFk/LaLjnr;M:[(-C5֕-8c9AxNmЙOXcfƶxf0իf"E®"Җ}4-F4FnK5t{سu"K(+Ⱦj&bS8Z&RAqos/<\O裺~LjJЄ. lƽ *T9$ npZ a"5-1%18KMQYVKCFi) /< =\s8*[/i@Z'X@Pu|R0RJ& @@$ JJ$(Zd"T~`CZ6}\΄R-E @̴H􈇜O45Y)Y@R-9PCCx<҃K_"gXo6iB8^߆qH x)[a~I0 6Im1a=dfSu}H|`vz>xFi;6~CsAc U%xT byނ9VaQ-!CgӁvONtBj¯vrZRr*S_zgL^$C|yhDaOAT{R#[ZX#*kX41 lP{SAET Y IZ23X%5~S}=T\l_ F1:y[ZUy#ƥ:S:zö<= 1$+ ("iEEX){l&0ADlHҍa HPu)H6qUR$)TA/VEPK.DTZ:2B{F}t9a;nib$.?#:>y60@y\)H@n/ddD!KE' ey=.Aωq-Me#;rݧXPXNN]`cK02VAC%@n I4 &yn.4:,*"lch3t`rD hwѼt6mC$vݔKG ݮYV:31+-CqWSrkVB(bTh`*jJ, QJ˛.UQ)"U=GU̡D+#֕b(EQ*K'J`-g6T)ZEj)XE` Gi+ aZSqCbzZkX4ڗ)ẁ (d%TLmX\A/( h>3ȇ<32iI?vY{<:OjtD@Q*%8H7gM!~&EGlZuCOa bBơAds >#'0G-V5kKl!^W?o7OTVZ)T0H '7ĥ H (DPBUS#ڟ}I`ŌFYdJJ,Qh$V3ofbɈ{ 렩-$0H)hW ԿDFµLˑm#8@&㣡+o [*FJ8F.𩵅!HkvtФF ;MPɀoǜu<_sR7*7vc$Iq~'`| , ߿rܠTYώ Iv^  %8Tpļ@qNxgviA~*j} j)6  Mf[`ʐ=;P@4וC^HCaT %Ap'5ʽh KDPCbmO܉r]} Y 7u4i!޿7zijR9Z#qi/xo8Dp H0?^kYt[tRJ`|`=Ç$uHov1 "=pr{M2uztwh%(¢m8U{a@݌ds&fڰ F7wdA@!ـVX+imKj-JT$YJ^$, OadO e՛(Ѳ0jQEXT*FQ`:d1h)`JV+kBR-e,hW,-Zm,B#mQ 5jT(K+`ZYYX loH: \7Bw}d`2&`aDIjĒ*D"Q)$I;>'%KO>54+8L k*EZ :)]z$'TÁȕ'B+W+9JEp"Hf #cD͍4gCEٖ Q`LvDhZtx; EQ ڒxa b"ZB%s>Xl_F w2;Y K2Rz'")sH#agQDR*pkd[+ԭHC =uVwXG(V P4$e4Mjo@ŚNm,n{'بi]CHD &`,IB9hؚ(y4ɣ\ ~?ZQFGCWBQhKZ KR'=l-'UyR3ۅ89Ɗ+r3ɉL'Y-QTA.ncPi;J.SCHp*~x$g5깧`5+gFfʑ= J`^J־i[H|t:+1=/~|X#{'F=MMaEzW6OeK|/9~67\#ka,\Zڳ-#dDUƐiNncQ (|K]A{{8#ܙ ?3^fyKתk9t;4ƧžĹ`w<* az3s : }uح)vu\ث䁎bUƌk7HVMxx`|X{*gGe4Ow},VnUEzKOcQFѡ+ֻgO<{ GBkWe=j(wXLrW6&v @,9D 1+SUS[nfu-jcXF$)JF$2)6[w<_(׷)fa -#}LWc13{Hh:,9y@S݋ ar"w'/uֵP.ZzbO5Q<o9ث[yv9X3;bvj k7$:EO]kXnEVu3o^ܝdUݡs Fo/YU/YOqT65O ׆t0`]:s N5Y+xB4$OZqBKSvbH-6 eG_'lYQJ3f|bL _w2dȩކ9Ffrc.Ly3 =~lu}kr{Wԫh2H#CSj'uz;94MYr]96;H|eSj 0Ű`I&Y4/ t=t5L15: =m4 G[γT4[mg*djG5Ku+XP[ ;ĖMr 7赏 ߅Cc:Ϝס{" |FiaCZ T0#`~\Szuk|Ƿw5 a`'h9IuFK}:#g oDct~s摯LxWG@}D|tq!t@d 3>)"|3OuGߗ{vUq A~Г M*)t*P)B;2@%`"hgHȱؔZ3#LBA/")Ib [w'xI̳,r,mKi[_c"R ]!"Q )SHH8K_OiF{hBOC!"#!(p2̉I3tz^RD*nl n5H 6{M 79Cs #Sѐ^?8uَ1 d_iųxd!DӂKK $bm @=~x__zL7jQF4c/#+& h"Daq0#ݰJ%s)$(PT)l8}+KU6# =;n*@T- A_zOȋV& )8U8TH 1`JҔ/J֜v0s$LDK@'NE9QP%laZ_"`b$YJGb2X PRx0 x'Q8&iNH) EB `$  REfJ }iC9vOAސu5U$|B~1AZ w EpQ<=n]⢏aBE_Lf >g(f,m%D Qhh) @TF P|ps <~M~P4R 0/\FSݒ 08.OՌ%"MOCձ{߅+ - [%a?~vҥpA5DP\IHt+yǹS8:4"5d9Q(ԁtP. aj`hi@nCu(z(=>K晡n`\?Hm#ZZWh@𶃲P˜t;o` ihv$Z;!#$FH1!v?yE@콺s SBtBCW 5!|\ C\|hSPϟߧ,|)c}{YVrƯm`b+yG=SX_DfA}$3CMZs< z.7o|}j21594S-4!m 6¯w7O^owݟvGOx5$11TK T4JzzCY Fچ oo9=8.vmvZ !A*ؕkJ `*kV1G T,Aalڂ`(FQh(&[eBKRRA™[d ̦c+U$YA'*DRJ c.) *Bf"0 Jb̋h46 UDJq4FJLLF%rQʰ-J E2iӌp3pX"MJʅBL  q%REn"P,bq!J2(]U c0h+U**MC,PX䁒&HPa 0̨, -"TT""rLZS%(Ak*K (Pm ¡RA+U*dQIVȫET$,A-DY8Ƈ*ax ,9"e-PaPQRQU A%Dͦ1O~֒ß,]D1ex{[ =Tqlj$MP+*)9I S"s!ݤcb?۪:}LNtF Dl (^${C8Dy2q]Bͺt_XUhvA" Ƒ\"+uʏꮇ]w%9"/pj.$<b{)aW]AIsYUh6MaY~$sM5o!,{K}*v< o mJ!CdHC!cyɒUreL%&%D's}(B\C„"{,Ysd\n0"S9 8H\~ X*7TdPA̳ = dADBUE#::JWȝQ$_~nt2O@]akQa@i5 jĭ2)!t$jہX.:ɢI..hh0g46~A~('(=p1RA|i4P2yud'TpN$ B͢¶Ux!]@Uaw>rXkJ"Ģ \H2ZN巂ʡY0.1fԒP$5K ."!i{_:7Md( -یQ7CW$|w=/Mc(@iic{//ƒ?p!JB@(F?twH7y8'`D"@1BPB(RDtƤ>r .%iF)hipҼ(fQRN,;` 'Y,aa8H+78% K 8 `%M R P#u`9 : ^أӃRz|A7"!.qnX+BS\sϬ%^qBwIvǑLML[ Df)1\uiE̖,ce_HqsqC\j vrʅ 锅aPn m)vș#k$-89<`҃@R R:Un^MI, J1%Hϰ~ n>u,5pLDRB)B)I):ЙOi?5-%4AU)--_k8>t&?qd1:Q(J"&LFs2 s g6*+!FtkZ=ϡWݜ;!qR4 RlmmЉH4H&w"6H^p'@ؐ tp(1ϥIo'5!z) /!)-h$]i lh5ӡmN_J]g߶H4#0du!aT+\h7 F=S-^+=܊lZk.)^ҦU67<m1 jTj!<݄SG+7GfV PΠDsdגuZ)RmbDp<<ˍv48'i&]b@5#H(}gbk?tc:'_ёK؁$|)$GP|}b}!,VeY_3@ie~yaRX;Pmˆ6A%>ySHSb>)}-ۇ:kUki.1,mCA$ E[1:sv}}6t?yau5)S LE̒h0rZC$1p2W$hJ5HeXV)LRJ dbab%%&B噂eP8(`~1 V Bq!͛eq]5/(o*YTB 哃5a  C"M*]Hщ.im3 wk&&(aqĻ4.M3AJ(EʦHq 5PST P TQmd AABIB^hhd)DM_YrZ4,FZH0_ yTR9d 53=MU# )jWkG$s@@i #e!"Ii!Das8#*RYn͍@m@bD Zj棋B'aSxSȉc*4нy [!0 {"52Tk%+b*e[Ӿa8z 66u4mCX D"`c HjIw fS!y"ˌD.:J`,b ()Q# F<@v|o'C^={zKy zDzTh>QZ2V;Vm;,ٿc#nj9s7ƠoJ,;qgOkکW4"a-Kn#noaH~,s ?EK{~W'9u^%1VR*b -̋"ڱs hcg4ĝomP={էI?:/y#|SM:]U9@4AOfѶ,UT+b QLѓ$C,_kvZ*r?V$w0 @A B@ /ɣ٘94?~fm4l$R Tl `d"E$*QPU1.0 NP"DU +cDJLf#X[`Rfdŋ([diEQ82P\֚39PDիfQ(-i U2BQciAbU5bcDDF?ڠ+iF(QT""0I )cALDdR ,,&*(0'NV &$)VPAE dPXPmJkmQ ˎ9-1*[(m&܈H!ɴ[#Ϲ޻7'n8m&a?$)(iq2[g%I)[s%#AE/_˔Pb̬ ?󔤉P$P@X~.j0n P! c|/E)nޏ:KߋXVբ|OIr-lga)Abx{+sJ8(_/y/ms<H>Bg_;6#rZVf; ؁`ahK=g5@1YbF(Pj{% ԙ e)>g:i7Vu9_qAĦ#@S0qӋHU )jIi)<_+Ì'|ޙ?g SbAIW1=dҴ(0H48S|6 PJk ( D៲K(y\mf %bՕlRDXk爅Z @R'jQ2i(U 9@ju:Łh$ (c*I p%J dʊa&PdpP@* $ )LD4 ` H^k*;h#]fLJh (!)i)rC%"i JA Z p( i()(* (0i"bHRh&Ij&$ X$h*&h Fh"i (b Zdr2)*&!HhH(hH!jI#JU P*P4JRPDJ 4B *4 M)E @-%!H4B5HDD0Dԅ B%U%ED-4R *hP%j% 3!rV%((ȉBR"B& *"*%)B30RZ22& "*ZJ(("BJ aH(Fu.ERD4Ѕ(SM((PPQ\&*H)JB "( A)JVi hH)RdXr @I" iiiJ"(%& & jIhiZR*)jJf"JJT"JJZD(i Jh*i ` PQ"((hehDJjaZXie(f(JZ( ! )a6H&o|=eMeg(Lu!D43-)02̑!AuY\!Z7kI&:q6;8W=@`|?E*V֩lELQZ4i* 1b#´h*Ah2*Ԡҥ[Aմ @GTEkXT-T,YkXʀ*(liJn ((%-)iRҴ*wg@DADBhFf)L2NY@I BPd呑E-[ ; x1StF* XA%L\EbȈL-RЁC' iC7@:TOy! E!LDp*$(I"h"zMAvx+n/C5ID TU2QERR +I8kqk=E]2+I;B. LH_KO|1Obt؏l%)MLASL{ f dE)KVZR"Ӣv1 p৲ ! ($HH"*"JXD$LE $CDQEQ3D4L5PQLRRQ3K)Afa843PS51 LTEURTAEATTETDE1D!Γxu!͌ g;p@loL0 GΙh$/`1@Y|J'_D* JtVe3FY'?0}3z:/Uwԅ4PeO(1'5U밷ċ[=l#ːqsyhh!J#q|2%P&[1`u[ˤuEyYjZC{Aqio^xˆ:kO<~lAڧy֖Boܠ" (p.n`( n18od跩xj bl'5p8(e,vWܧErEELG=Eϫڐd&n m,94H_SG0km\$qj {Lâa~=5Su> ^ỶD&PEzY%Se7lݳKh irLdO;pR R@\6;UM=bFRڶhR#+CT 'J <fՅXQbrOLϚ>=RV!8FOЙ.CQ,ЁW3eFCɵ+dҁ!m#I&jV r"JD P@ ;Fp]km3*һWR1Yd N% #o!R1il11tl:"¸ L0ISu+ܸcF]8!^<=+56u]GŰt`# &= fi-Vc\öeF bIF D ( H5I-"Qs Bօ58e<8c@h} AC̊ kn'RD*̈0')@#*Nd[)V!_{S\Ld9vaVOԦ`d:mRR!"ӝ>ü Q e/~s3prXISE` Fb0d)J,ILB+(i]d9̣^ҍѲWGWw$ B>&yUC90QN8\$C؇I CZH[AZn˧@CLO:j[LE?fhdbXBW0xI3 R,V ȵW+UL0QbMPUƉU"~IDJC3RJ PI#TK&em`nAƛ,ѤE:U0IOF KaHBOp:(2]dU%~.` "*z,C.VE"P/|+=j_J6Nya a#ih*0jXl5t|thJڹb`t\{ٹ <36xa g1p rV1G*p#"Šo<S 9aBN",o}zuI.{IQ̾J[Iv >/},Q>Ԁ.5*H:e?;7,ڦDli #i1(#m$ Q qÈfi8|s_Hvw/8LkmQ?:"jgPu d@'~#)hÙߖ;mۨ3zb'@2-,n2(:5*$7z-"X@[wg,/E4mI{Ͻ3^Q d+5ȈRM_ 0 rph }˖MG&(l@RP g-iu,bV hJR ԹCTHLҺ!& c98E2b f`UAh1"(9DMXD.~-<`2)PP&DRi3 RdkWV%!ad)h%ZTiVZeh )b)J ݪwMi?$>tӷc"d /@NOuJ8J_?ǻnbz -nq. F<gR"~AAJr=0 8F\<׋C5p*,:FJhð(S&.檛]&N)wtSq8#lb@ʷxeajkc!(XCv@A}C2H A$VD?s‚UߤMV * .*c"`ݣZՌ#8A5I@}gOG$|~?@yo\ ' jLMs'-ffXbdSI}wz| ̲}zC~|2b2l2N2T:[>-fYUU G\(ѝWT& ls[!<͒ qVP8\x4 eYI0rg Ez\"gO^2lO(s] dE@$(FjW33b[~sgN;EZOާDT5w_f#x_&8G|3Eg+&N[۱{=kʗudZZ4xt3|;xػa-2,$A 8F Li 5$RfK$|BA 5)~2(~U6є#,w]l_l[b= Ac@Q3G`}S,|]GK!Dax+V>~;1\fZcBS"OLBWsH>z-3 !Wɭ{Cu`H@:> ` M;䅱]رÓyX;J)>;?z ;2w1^XР+v9f ꊧ&Ao3OEpֺ@R OHsGt.bPdwo:>6؂ ,4t*֒~8AR~PkGނ5Bߝs։j [L!mV@o>0Pc57mcWn/9(Vy,~ cʹwIG^{6cIs=R:4PrTER"H[J'u uG 2CzA^n>y9Y>hk$rF|ڥ.ǂxDپlql/7]'^3#y6>)F|Dsr8z:eG2ƶwF Rv[WYW"[+HcN+'i`*`h \$-r|{Jz5u"#{nVc6ayMl~i Q;#wp,gx٬ Jk2 tt5;ā~Cɒ{|?u^[O)K)\>O-qKu=$uB{WŜוV|/[00bS]Ċ% $" fI[k'[1)w皐*$ƌ w^()dixDbDjuϏv׿ XJT `#$DQNJ| k|"c1]K!GH(@YWwcMӰWѦnhn΄:Ь+2H1j0i\$ fafƓd༏hD׻uHP{8ԥ|W/~0 *  hT7{ u.j_hq{O|'d^Nv.5!x:Q}GdMUfplgA^bE }amI:b(AG@猛@Sˍ*U O"CFi ui5{څP8}'} ݵÏ8\Ft9uqo#CyJz-uJmR5  PUPҹ'0eh`yѰ0$nat^,r5PsUOGʵ<y~==b,7rG%_1N%N1"}`)i$#@F b )(ɤ*fhhhZ"$*!JN‚e!""HP 2Q*!%hB"H()CHEPJ@I +T4CI!AJ4#HPPē1DA 0ٔRDREPPR5UCӘ2R%JPIE#@BJL4QUU o1B+T!@4H%C@ $D)AI,CRP&A!R@!X I,i VD + (B*J R)jL%E,R1@ CJAT4-CAAACIAE !H QP0DE $M QE!KA%M5%E%,K1DPT! E#P$LĴTLL-4(0 RPL K 0TLSEU)$$DCHPJC 5ATRCUD3EUDPMEPTDRRA4T,D5LL)EACRQBP  T#JR%4-$CM)ICI4U"db!(J*sQe #!*RB H%*v9aDD4L; jp i*ҿw  5 }?z@P}0~C !@PGwPR3%%% EASI1/Ӑ2_&Q  iD:$PͰh%2)T F9V&Dj,RM QfԨRİ@H,ՒB)H6MM))@LJJ&K3V0;FT  %TD[@ Y[TK`""` b$ԘH-PjQ }P0pW$ș#,B !F" Qa\0,1B $,$i&%(S ", BWSHbBRj\`r,F$%30(sq^?tuf"--wh@RvҺ

/bU706Rd,g'v|s @jarL3y恉򒚋 =x9azξ45(,3 D0v =yzu ^ /;=:d$[V@8x8oS4w+ | L@T>x=0p=+zjډT>7Y=L,x535!)2cl5q(ȟ,vmFܝI98 =di<{/[>:;#)8p rC)P:~Rߎ$R|ABuƘBq:JVgÎ~O?9DPHL\9Îj_zV'IЎA{`3L?ӠP;#Í(t1@TKBRpN$(I`w:S5ypfm8{/\d0"Ca?>~*)iX%-$gY2X{*i?s'pCqC" leejmCRm&TI p:)c1)ʙJ jVXP2D㏥dm:v$vXfa5Q"~Ȓ8.GMxY8c ߶/Ѽ/Om@  \Ty{>0]}jSnJ}j1bV(E73Ro^" (חWzQ?Cc+_Je7o/˝y]f18|LQݿ5k'jeFwӚ=z|شq •7aȖqm rf Vȳ}+"=U̍u5or~3L7a Z/ ]PJGQ oG<О%Be21cC/[$#[N<]>PN P_¦U J`!lT T`!M ipޏ NeP"BlM琑M:(, Qc0 8A sUӞApo"yZ \$fئ0z(l0Xff481Ѻ*z<(Y ,[܄Def ˯1<-Wt6RIh!3VG ovc\پWZdBHy[GoD|bq>$J/'K{$P0{ ꌟ=9Ϟ=s u-JZy-99;#b 2[,9AJ[pB(@ B8+5uo\1:q 8YLC{Qǒx-|$:3C܈cCUDU=ΞC cs\%\D8BS>Ĕ`pR* :^W|-lm]ep&?aQ,5V`PC];+D~%{Wc#mR#̒o7AbrA6&HwMX*T0N{y/K{/{\[Q!ipZ$m*L5q7wGObu!HVO栂 OD^s#mL T/LSA3`aT,4QeAA4JZ$m?-|Qm`/dSbb훒 &>((aFAΉw"߫8R E! 1P?bHrG`_:?0hlnDOQ8^|Vb* ?JrD6!N"{D!D"*SQ8Pir^,1~"G <<(SEse+.ô `D[NC-gIfбvWy68k 0v"RIê*q/p?7klW>QYk)bJRa 68g}=f>H Wq"(fNQ"\enW%Z}p +kypK4˥n銢ise\siA۴Ņ_mi41W=V k0ڔA!#IcקK/Zٺ ^@*v$(%?L#+Η@SME"OJCb%J,j@z7(uZ ˼xDj7rB2! kǿ/ %5>gߪpwFmU:;}^J7\S8^3=/)Yh?A*Ѩ7\.?6-Pb~6cx͈w'QQQ兌A 4A\I7!1BY (wT`(Q@hHBg2E`єE2 RZF nZd " fC%VDmH"X*p̥fT.5iQ#Κq"}8]^cqkPQz)()aQP %L&N\aZ5A,UAB &3VT)JeS.esx(Xz04YYLZѠJXҖؤ (, ,`W(PBVQ'CrM99$U0˖% ܒfLiWZI B9 0@A2ZPy3X"jb̥ Z,FIJE@wݚ醈 ؗyAF(TCWh+ÖI}κ(]8Mu]k?[)2933lo?a Eju,~eB^\ᙼf14۴垌.SūOΎ7 8w@ CI"%\W9Sq&*n wv0)4e;`pgfIL7kQM P 8bRgW_Kv_ka~[Y8$.JRE z۹{U_6'+Jv6!! wƃ Ů.(裡k-˽  p86/]鯘Ok{ Ϝ~~`,̴6JP3.@? &Iѡ ؏ys)gf,"*Tĩ| բn \2nVCUf5dA㎫$$qi Z$i10.,I h|bA Ehi$ -%eZW~$ͭ9T։A]<}G-?96m X[ž_%>T@> mG.xJ!% R)FRfXiP )T(F`()TBa %$))(^+*R x (|=uvfTԒ{I0jlۨ?{^8.w= dl+BY|SȊaXciC%wx:8(Z2XxOE<<}B&c) (>I/ِPB~ -rF7"g!)A(/ߵ '4M0fRӴCvA@QAXpV& 50d re CP"K![BZć bcVfyaE0!3=%A ZtK̝s*` ĨY ]+mois[ml{<<ħ2+piis-u܎6pBYT1IH$x/9B |!1qYA0ő3 ,QRNpDYÛWk&.\jGkm\sknQ\˙U) s!-fN,YjJ-!h)r)iMMޙoO'Z[lvgcۘ1%b-++>r4c+j*" 9qGm[lO1b `6rǫ1ʂgLv97E˱[J,TyN+znFI[˽[ nr6θ-)a3\|>nͫv[ "'X킕1wL/sPb'-ff-=nmrlQ2[/[tB DP`J` 82h!\P,39`iS[ })wzLΧS˘5r}xxצ+ujڅ)\l™0j:3LWvCҰ.4rzqq ˹r1.;YqŬ%b30`W/RV+mPjR#Jz[jkNFzS,fvCZ-Yhd4pfh%a*I+*R$4ńL CR VW5[eJ0`92LθMf$\ )Zf(L jx,'&,͈8%gH˸驖f֛kklzJ@IӬҽ>C4L@,?*)FV/; w.t`fDЅUeB UR1 N0C2qPݰm6"`1jMѥcCdbEc$ĨBDr\L gNnޡ;dZc|ڬ戊6C~n|}dž3ӑE DTDS(AóZPCTA(B`(Z;Є_JR81!욦 ba@bJXf p0>~ݏr 5Y^}MaY\3¾țt*BVg@ Kj_x33(j5қr~Ν6e)ef-XE-s.fe-̦#`fݚݗݣK|uBlF2JL2;nffndBmfK:ӚQEZ,ܦ5+YiJ\4VpG*噕R1g[5֫V6ƖeJ%2aֹpT-**,R(XSMM%slXJB#>R =)j#:M)#N:ހl$7pX&b6:a(N8Z5`0PS0l9{&gB 6\)ڬ,IcBlS@!1:A톻2Y{MAf5ItKOd(ćLJPa}F<4@hہȎ9[|6>=j^m$dLIp: *xEr#y %Uh ҇Ox,pl׼T|a .촌oHtBjD d2EL#mB}(OB0]>ԤiR}T }>>b+I[PY pbyqkD[ei"Bl9z~arxIi ?R݇L3Di5Hvb"__^BvTT+iaY g^|X^y4}ahjD j4=P+^2}>_?W{ܱN~Xcd[IPS!l[J !pe rc7󿥰g} nmbypv["-y,!LilΈm2X`-b"` =`Q|zv< jPM%Pz Bp1D^YVF .J V%h)*)B$ʕa `r%28MA$JIh$)QmhUk*RYf8uE~ͳr=~,hC\#)CrCс<NFXv,@,4I:?x*~$ |PP|}8llP4@2 zeKH&E?6LtaAl/7gpЄb )D1mi` m*t\+m)IǤ͘X3 0Zthl1F3 F̛y3k4En)"P qec檧ҘR} T~!3)N;Mb>+OpvD g_߁-=%j߾4>i& )k@`%5fQxz<>^fUA=WBk)3Zgq ""$ JA(y6d7R[K"l]wvUYR:]L-(&5ljnR-fb'ݦ ,^ δǓ&F"\m98qd^P.s oE7-Ʌ5QQ$$RR}iȕl1 I k]WbBBQHHd&V d@JP$3x8&;5 AfJM&Ov_(t˜!sŹ}awFHAlC(4/jO_@*$XSȒHZF;"g__>?jpwbw7saꐿfh$㐖-Xl/: no75㉍xWO4&}pC- nFV&&T [B4Z۷dN@Qаp F0JV E."ˉl2C)z2Ťߙ®Q_ }cx{a~)(IJIPeLQ.[BnV[xcp!ѻJ-ҾR<*)vRLE!Prm$ BD(!bi2p 0TX5`H+!XERDFp*EDB)cB5Jj ɠŕRhBHʦ Bi"FtL"db*4m`+ (nK RJ*i2+q0QAY-!HU6ݠ@4'}I&J &,a32 W$tye{%(Rҍ(td%zL2,m[X),m=2?yjC!nLI !4C`f! b3D>2A?z2_˃nj6Af7#Up\i-+Rf[bk$FFaQ%b0֖!XeZY(Pk5ͣVʨj"J30%AAqҨSh ]PlypT^ڐ$3̥1Fd!jl(Ҧ"ƊT kJ50h6յUҫJnQ1XZ :\C*.fd"1HJ˔JDrf*b") kaED 1E- G3"e $%֬MT-q(\\T%ȥ},,V#r(RJ\nR̶\ˀ+b(eD`?y(eѲ6f`*ᔪ2-1r0Lj# àY B TD\ K`mPL '#1 R"r lVT äJ5jP$f\"18?i4/z,Id&)LY 5 d<-' >3P:Q4!5NvJl/ty9H !Br}ݸ(E S75 vN, $R QH1B#uDR^:uc@#- I3w3Jji{I19ʛC><ٸMUx"P?#um6+E(,4j FHl0!n S6Ŷ׆Lŋ@RA4HyqO_ `!tbL.mOkuCLPM 0&6(C4~z|Gh]t.Q:YF$Z҄"L=UO`>Ƴ҆Ӧ@':}iM"Q:ezh 2@v|&(jD2 Cz}8!}3fy a1;8B* JS2æ ND>_6b~_~@:䡬2CR>]ZM䥠=>ԍm|i3FNR >Eɥ+%mrG_,\z%M 4o: tcg o XSvޥf" )`07@Ƅt j PHWMB RJ@2JQMCB@7B B @@ *$3 Cj(BC12M(il $/~fn!wo?7UBr2n{39¸1( b гCK,Jĭmh*hgoNEjUe%n2L䀼oNaӕj)^ q4T#Tb '3ByD;JλwdIQ_ [ 12KvO Nz^ 0z0DdI?3{"M&L& 1C4(: }DZ.zK;If5Ґ-dۡ]ۇ*~^t|@i9Bu`3uѸS#y|bRT*huej?ϕxrO~ ]칀!$\,?CO4bn䍋3B?FPgn׸TMǫ[ȻiVCx'ޏc}/[F{CA @js)i?;K Z8o"Kwf6VR\_gGq-lְҰԒrb; yVD"[RRTYJt로.ȸQM; _&l:u1OWlܲ-z̺\EDK-L&%Qʴ( k-zLtSl! DvdQ(.HWga68ÿw MOT1a@4?2fSS:"2Fcbq#Y1U!g!3h6SXf+XRR $8#d %ACfo%R~ ŜхIFɸ٪#>,vԊaD?ɤگמYL0<8rp/nGK}2$̒h*hWrbe 7֥yNAa,/w͵ SS(9 b`XX1,sl1a`k> y'Ym9Ȕ b ?}uu j$GŸ'~@.(SfYi} OieuuhS61DE5 (U\HA {h2 P*,P(H`$'HDQP94M*ؑi|~ںaEJǕ9)CYLØdLDc'@>&HvHx&P)aB}Y8֪cfe! _ݲݲH}a.RJR`H4.!Xj`n (ux9/d ."@2(MKFb3="^i tȦ/<z跜$!7$2#o?߰'dQf5 1r2 ((8I!B(Jlx"$'JOm'RQv@GUЏ{sr+/="X; +oa?u7)#ߺ8>X9~I J':0fY &h&s!_RwlJRԥTC J([K**BxCJcZTh,Wp@CbZzpXMp8Z4;::46*QIiR(j[PbZ ȢK1C! r(tIq*j b mx?K yy|#!WI@3TUaT]qVv2!_7M)Z?BH6Ep%cB'?,-mLN\Q^{"cCPx߯uG0?Cbn4ٜqɃL֛pO ?r-A<Ѭ/+Yl&c ,ǐ:£f )ħ݇YZ p %xNߋ109HVB|g_RBݡٔ &Rws6+^+la ,t0>43"DA-!U0`m:uAjs U2heOJZ6*yjPZ[ag'~m8\!ߠcr9GF W`yd2 A-([k4Af FWDZLF Ljih# L1 H1(*"X(1ln6c!YL  dHURX6UIZEmK[mUXPP(Kx0 %P4PJRPQAQ*=ʎV JhIx.&h` $R iO;dB,BP!x0kI R(!{VOMQ$RRf2MLd2%Hc1fc*DC b-:P]IL6rVA a11X!Z)iCabEMBE d*PA [q  fV "8P!BHĄ0%u!@#kI¾"h這0c]IJd94)JRJ啴U%qY BTCAgMMBTDXq1cRe bpx*VfINf"9d B#Y+DԪ lEA "$0B)ɦmms%Xh2`3)7!0cFGvX1X\[e 3Z[#,؛ $ ʚ`Qk 2"*(N;'ŀq"- B I`J80J&@IIR):2K?3*3YLLK -JK1U V v JRJBlЩQ S,c*BPBKOtB¶i |!l4h4m&!a:1 X  &BdЙFɻ m^3.%QtIR;s% ̗ʎ$MJA ?^a"|=If;ԌWb*KI$#`X/0k2yT'{*U ;Y4 )1ZDB<(&J)J" UPQ(V!@  pS*QFA)V(L $JDȥJ2@rhD)! I`^IWLf.&`*&@@|a"M)@ .#i!2'`xH}Ksp{;vkB$ey j{Xp`ۆrK܌d)"hT1 &2n8ۙdU ȭp;A QR,SS!l1xoMg1z59.4m&=:EI` F&ĵP=  ad*UQ06COʼn+u|O8@JFR.tj t@P4CJIϹ;>@ { #THA.B'ZDSQQQ4H-4MDQU%RTJAQDs$"2P/fnDBX(JR~CA?`q\b*}w@=ҚF9,!/,}}>&?)o0ܥ"PMtDH`(b:$M("3D"Ҳㆸ$}孏Qs:q8 !QJ~U9nXGڜ5ycGPuw8&ngtAP@{}j0?u>?'&}$hl)MLh`$d>0FRHiL%)J#B/m nM9)1$ @P JWd3LWe!,4ߣ?Vv>ӪSiz! <,z()X  V'$h~C@֨ZViq&rt;qԔ~ RJTG̾ r9&0F"EEPTUT)DĘ2d ) 2]+57 1dT*MN$$YD:4$b@.뒡PPĬ T1o&Pc'la"j!:1 Ұ:Q2 @.-B HCQIdNBE4&؅ A'.X'r^:qJ*"b^ֈf@Df8`@Gʘ`' F1a4 0UEAT# (*! ,B )$TE! ;}"pGcG?ˊgR̂(5 X q b dJ`V@P[ $LeEKXҐPL ̒:$MNI 2VYRdLf!R P:SiHi,̅BBf!s-I.Dd֠4F+S*u,h%0ffH1 *0.@ NHȦu(, I(Vm(D ŭlmd- )@0*JIDX F"(##iH80bbH;:"k/,-X+(?t["TP4*PBP)R $(I\4# a)S)ɹ1Q&Z DR]1̔L%*A5fwUc%(Q0DPX$T $0`mQFmBը62C`0oBhShBa8l%;0 Z Dd"(jB"RR#@&Y9@d dH+@4@F7SvHA0֝s"u:za]}٥rFIBBqUJT#.D&/h!lC̀,Js6xyp@O$plF OahB41"44PUP]t&N"Tٻ?OjلZj*Wx5% O|$D†kT,{ϕ6i%q-vVqQHK4O:5G&?)!QLu{ژ?FDqEx== D.UEUvhH#btdT8Q_UےTlWkNƈMܲJxqnQm>{]w>Β>[M{f)`w!77|G=<>= w3lSj@WCjݎL?^˅RѢ k'ǟ-363P2@ouGcs_{?^yf, ~u~,XNZ F%rc 7MJaj#JEJCG/`T,+JA(V$wX,'5@5=Kj>~M蟪QTon(APȪAD4$ABPԴT9يTVA&Fꃅ'1:C֖f2kͰRIU^d镐,眚=z:M|h$-Xj O)Wм,1CS5!~gD~~`zh -a~> |iCP;aCD LGSbi Lσv*";O(k%OPc&C("gA dP&M"|RC6DN' u?^NaYd&<%(~v_n PHX_HM@:p05rAcr`%y1w}} lgxO26^7{yOL%P6X޻:o_.~7't( gl?P87K( !2A(-F@7OG:X.9$M0c\=_?~%7T7ZF Evq 4R~I8*%ք MǺt% AI;/)qHA}yrQ  QL%ZFf.8:*. Kcő ZLQSEC!)F61M僊8TP!:@lF9|vS+Uf ltGzb֪d8L"J"j2fp!X( ZY0;9PWy?t͞ lfq&M (R{V>h"CD625ԔȩTBБ@@P2@,# @*,<zV:vѢ U5">lAM SBJL4bVBJDEfB4YdMb4!% A2h"b2@Lϣ݈1U'2PbyHAHШDҡ@(0**4(=gdA=?{h`?\xo ZhBJʦBQ@Bҥ&@KKJ"Rҭ+J H !IДB#JBJ4B% )HDA14I*XX[ ]#bzz ^HKisK0PDKt>hpZ0`ݗ'?qAtN(2{8fYfj 2!@Uj?Uz %r;^sH T@DyBP*bO}VQK+KQ*$ Y4Op;dXb'\YqG=.VXb3%!^L2=>(QA>R `^J/5JEė 8C=v"ұ+g!J"0jrD\P:Va9"dRӕ54C1,aYP Ն14I\mkPKQѹ#FMTѓXc,*w2i%0DCP+$q c BE YSaUQEPnAd{*:4,Ql$Ayqp:B 4c!rLՄPPD$TTmel` %`3)1, Yj„)k*iFa$DX IԦvщ22Xحc(Ve-Jj”k"VJ)A"EŽ"rbBa+!)iml0PD .%rC%tδ`KL<iJ+(2D=," 0P2D’T*hb-hdR1֤K[1 8zUyKNKIDGe *#¤AX2(R* VU EOFJW'ÕIC@SI..<@iI#+@- MR"m$FBgQ*19 EEJyY,9 Ÿh!6̙UCe 6c,2,HiE (-@Yie 1& bD/ u(2ņ)Q@J0 _+$0dEAEA$.I)H?=qRD+"@̐LPO\@SR{$G'Z+8 )004Td.y{ P4!b^B k6^8Gw*t=6SÇN5*(N 5z#>M@ /|u[["? Ws}~'$YkטEtgʤI\EO`|`ZmI6[0dc ,- VVJqMHr ;¤S͕o0mעbYlW?%1*v{rRz4ب2Adl" ?aa$1s?3լrL֐ş|V&:/嚞BK @Ösޜ26lֲ{@٪VaHf%;)":$(O.y3*aC3s1ɻ7UU)2>h|뎿WJp<:UwIacz,:mJ2$ Ĕbɪ1vՋ.֒&3Bp yJTptX5:LL9xu 5+8\@b* >pw9;cF'= $~zN@hcb6Lul h#HF$SD `(РTRn@ LH DQ@ u&2޿Z{$&Fa@=%}r/]QUPra;L "))hKPV_yjS2@MB +J?T6M\$ *RTvR)$ vxM\dq҇ xcײ;'A Bz%"`GQLD4MAT }dfyu }$.Hq*{dRK&ЩBHc4F$áf !Ą2QލYn4d NB_(8c3&|쬊X VE)IY`a-vN5TV5eFQ?arƠխ ҘBKEr`)-i6xJp{s惀}}OwP}m^Embl/3bOv>~A@|4TPr0&%iOsG0LzJ@9*mV01@-_cюYhp4Gtv9pPzxi07 ͱQ py@qQTfoاEʘVo[& ^3op0b^Z2C\Q| XWch 9UTEQR}  <3Dϔ53% QK,ON|bX/ l<2J"-PSP2Z'H@$2 "hKiDʠ "¶O_WzL]&E6m-hXK.>žbKb!Yhrcl kc\H0xFDo8PA@I,ݪly885q(3ǏdOl<r>[|DҭT=?lOIa=,UcҨV̷mӗRM>5GՌfr7?ȡUZSPl]G]$;/s!{h4e PxS1bc!:mvN;*Q 2K9ݘ2TA6(iC%9"NtGsQ%2P|_}Z\Eh_~ELPYPv@[L=qϲOiᳩ9qU `z[ʪOqOcQGA@0s ˎ^ 0Ә}^j-|Ø=-.?5ϱ%-m"Par"H1'T+A:H% 3?c}8{T׸}.[]?*NHbKtRD'WÇxন)R. /3t| %nsedY<]h~l1NY@'d}=@=dgQrVH3SJ~M?%g;E сQ"NJNCdr; ܓqS#Ht? ?͖&~f>S#d{$Tґ6l# A IA^T:O>4tfvXZ *ߐ]>9vBJ4 DhF 4نa9&<QrJhjfH!z!1 ,R5 B*h)`٢_ 0_euq@tGC}D=$*(R7!c$a#qhabt 3$Ԃ ZRD`AaDߗGܯi\3 $i 6\W\ٱJM`<@JD,4>{yxIj¡Hk2FD&؛l ,a[ Ah)!30/GHS"/4=0WTdP<`6@d"zu DoTpW((0P#K-i`bX!Xm)lBn`-drbKTȠj$ B"Ԗ$1 R RڤPN pRLDM%ʁ}ߨ\^># ѲP)2^3UDQQL M%QLQQA Ĩ*_`&~߉'EJeDI7,9dH/T7we!F-f}U)'ܕX(E3œS,OxO 5>>M >5Ǧ W\e[" (Z30FZ – Z5)BRR(TӨȢj$C"**@@`NEQTE*EPb+VMp e+,BtETTdXXiQD_}GFfR< }v &*Ҩ*HLSҟ)ê'q!d%'uHy|N dAÙ-&o5'gӑB`^EA p5*`.lBjI%Rظ AQ )NbNѸ Tr\)e!I$ '܎Ip bm>T m'u{"WHeF6qz޵:pvSLC4d8(R2ead4H%@#B* b'z`>=[ 9'yv|3 B5'q?٘ &>4'_CÞo20=)ǧ&0w☜} QC@zMy] q)BhҿNMr | VJfb|zqק6o^Wz'$jGSoHR˹y胆`k5}YMz!5:ܐ( ɭÙC: Z PR{oo½nj0wY(V!R zCS6 )>I MO9u|3a5 ],UiGl28ZVA-@52MəJQ%e,d**f@%eNsmRaP>)O?Ŋ} yfj[yC0ЕdBZ$*ȣ,Ȥʊ`"jLE `ZU`PcT[ZXJ(@.ZS0FBq**T ak1UF,EV1UQ22o$b6‰+iK0tt.S%6_|]{>2mЭH"plL[*4R0+z1l5bʬɧUn`wT0C~,%W?~מ)z~m)*(7PTsNF 9 6e(P -pOq `V85 "21C 'ӣ0?l@` $-1\܊~ N>(?+?3L=agn Q{jՃ!ظqg&{qC!^ 1j(a8֠,;4 SI1X-yBu QpBmWYB0#Em ~ޗ"x +_2w)JX++ӧOo4e5].9]EH^›Ng_3E\7ȃ>*=)_PĢ^դHH8%A(އfTwg3nob+QJ[,Sc1h ho& R:9m &"A ; ԙX^`$LV $Tbo<`CV zKj{!t1fsٹz=k&%WLː[k%RF=2j0K~w߫;}!G:(:(T BGu>>R|yQ'3= ҫQOZ!u?-AZ[/-qhxr>QM}8r픋?M* p{{~'@~og2.!z ɸlA2S?lUUev0T:[VtVj (O7l,hإbebرuQDbʼnj"[ @)Db J UҚM)6 h`p l㽗'yOM~ǯ^y5ǛgiĊb?`dXdlәQEU{b D1{TI" 2(E U5täYY:aX[ (&i" bH10 )hj Bb"DYQ&RQGlp1rC0ET;d U[PPZs.4.eb`l;P"ml.waVkDAG-BbEX*$cSED D LI& VZDHL0(UB :QdsnTmPQQEq"5YUV5L#d ŷr6Ja[F @5$(MKFH2E4֑CPPAP2ʈE*D)R*IYdSC35 UĨI]ֆ9FKaCkLət3mª" Jf2RAQ\.䢊7JT"h if)ed5 V TVT#5^7+ıjQ&RTJZ"A?N,%Ts(q҃rI"b eUU18°X> 4AeRTUSDT9!ed;CcXTf\TX#r̵:L"[4Lh2d5RKUbQ2];w8SU6@U^D%c"Jэt1\mV "(0Yjj&5]+&aUqY(*@/-F((h6Lj ,*bhH`*jm  LLEIfa !UD$TLAPBTA,DUQJ* ,TbKJB4" FXTAEd 1TQ+@э"4SŪbg.eڕ&+ *UYAAg7&%S/2, * WKFGz}}HK 1 %.jiS^ <9yDz-$N"'Y!_zI]edQ,L"u%(A̧l &@! `%K=>)aM)~=͆ ܲY w`j\q65374U~8U1~fNZCl-*[IUNGqb3)_%̃hU)IXpe\IQ}Y<:c'lD\a`,aRqRcPm[>Y\doy?whD-<pajkq.Y81DQgd +P6 cPۀJgV;hR5bsrb055&aBkrI}yvr6}6c7UpoY^R֦C`).)MlEY jB` Z]F&_.F DJhJPӄ7X#=oC؂Ub$蠒dzOf-{^U{pGj`Hs\ pw{_D:Cx<(|KO-A@Fs9$Nh[ҔEmA5ZX0iH$It'HL"( "{ @J/ HJ0ҫ=Vat1ZSi&(kZNW`tf$Gn1@1P y4CU9J# *( B(**UG?18lߌVKJhm@. B!f&"Z;)tlZ^w@jT3OwAEmQ Tp*qg "-<$@]kRH:lԉU1RR l;ty'X:+~Z^[U V `ʬK3‘m@jQv%6d)JybCP&@-ZdLBfQT: 2IW00%? وeđdc?תq/}7uTA).̠}L=3aNa8ւe%WAeU n>@]'yriGm\T:jdP4BT1 pK1ĭ01 [8̶HbI<-ccE2Y\d3,0b]9DePZpɌs1BD.V *s!*7RSZ0S $E6eV( &Ң8P *03H !`bCh, JVXŒ+13Q#DlŅCqCSXn& .jکjܵ28(JZLvEmc3)p҈` &L@CJd 8,8S5f;kd2h`n(Цg ;.0sع̡:ah?kNWL. z Em*L5?,yh)^Bm ڂ^ 5j%lpV7-%0v| 6g{:8 >Txtl?BДH+J4 MBk=|Y(f|jL?$-?DCAE0T44)QQ2ăF mW'CL6- &rktۂYlapnPQ6qyts6 ̅ `, (?PtVʴ4sۃhTĸA(&P[70KG} ^31oVhV\?=ApCOKV7Ţ`R-ӘX)0ATkWNr&Jp㴣Z><09~x6,0ĆF*6> ]07ŬaqY(Q `ԤA{D{!F2'X5 7z6s:z0P g4"d-B?6{ vIO`h;l)i A_u-hT(YGr,E\U"hmV E**DVs $(C Iyx 5:4Y<Ǻ_t}}h5FJm p$=\aPTHbJRLtGtD<)$!A쇨x!59z25ESW2ʓ|yHP@L yH_WF( )Xd)OXxεv΋Pz!y?dN4>\?ÎY(y(~, wA{0h&ROze4L3`h$9 H!)IBjE DD]ވs OyC5]X0@ PO9 ϗg܄Q`L%bR)>9&BE^e#g> i]{{M/Q(jOu?LH!2`PI #V3퐥E#yG1PeH.@&J]AB BJA G=&? oBL(_SPD8 \ b8N~++Hb Z Ƹ`AEtJ-F-imbd,h#S%!2" ̅]'2d8菊&GM@ε}M?P֊;29Kw}iPvG.AHfQP)4ť:Bt,8әəT `VYO$N(TWs`3A+ !OHp8 1q$v^JͿ&3tKĀ3,!=re*N?g wrAP=aq A zOe/*f26{"EP$@AX|>#7̎.Dsp`` Q)T!LI 3^CĝDrEș0#6"ҍ!Z 'PC8J21\și"TL"* (=1C!AMXk0~vzaء[F+@ID"*0]J"A Jl큡IJ$%$(}}C>A֏ >}V@ZR8v-'ZCT!BxL_q0-)I Ȭ[݀g=x>5k(L>:;˰=.%RҏG!.t&M-¶Ҷe5Ue*xb"VW+Ua$Xt"L2C|D"&'ϞWM04Ņ%, M4%fjJ>+ ơ`d Z ( a)W0r2]H Fّ0@"'u PE%M3P 01%EA ԅPeE(TTPaҦ U3f٨knїRATBX()YB(*Tr3iEfU9mhwLERJaXP 51vQ5GY]k*j!D(a"yIfb`hfȤ(4lf࠱`( IqC~8 P@ (~nx ,6D" JZQ)PRQ*DRJW+qi,rrIl%p+hQJHKQD0F+@U-([[l/ʁI i ,-&SP,H.JbPN0Dgt!p2 \""'&HD$%q@YI)$E42b;DןF>I z9!T<. 2Ѫ %  :g$`DH0Zx1~"D݂Nb}Pt!&3)U.!,LL- 6,-Dݔˁckı2qaFfLT-6 RB8d@m2l)if`kEe@A\I)3$M)wpe`TPen)Mf5‚`LW^X#kDpme1LP+Aĸ\TF`U8&Ē,MY(h`hyTP$p(A|f~K\y?;+ȦC$4 ʧR>dRc EyKo"~ 7Ow+]~[׈>sdm̎@Q9g?V=SJ-}6; orT^TbWB#:j3tkQKω=ޗfgD=;qm>40eG"AyI^z sH+F(-J?V`PJ)q qc/5 3ez[G#}tO֙1ʪvSX^"]z#04ŋKt'.c]}lgCZ06B}$aXQD~gL \Z6;SeKW2:i[D~+>v"y`~T^pJ(aRޙ/C ]o{1]\gu 'L0aob2 *d1.P nJ{;Jt__xhz%h.NӨ{EU[k9φQ~c$ |Ϫ wIڶ [UTș/8@6$'RGYaXz0NpHƍ0^M1$3c 2HILtHw^40z?l=_r/l~vCg6J3ZqG82ҳ t"HP䉕-nk fIR q̀H;6-z8hg0ZL&U[i^#Oi\1#J(Oi|7q IJ-RNl{VbmEoi@#&w!hFHEG@!"&FO{Y8Kdo1'^+113 @F}> ⤚v JEnLcιʚru3ݡrQ1+ oW4(. "TPL%͐rH b֣8Ad?jJ$7SjEό8J0Ycf'I q3vB!lI`=6jdtBƎO>HzH\T܃_&a[:?{ 4uybT~xNnl7#Cli#ew2ҼQEf\7z&z.~D@&5/őJ}XkFF,P|;8̀~K҃!ͭOuL"{ ^v*FA*А@F ܵ鯤0Xy0@oKe &B nI%HQr!ʓaH:!s2di]U&DpNIsVd ;z0:-umnYWP,G y=ч%C>djxޖg*C1S S'זt:5':|Xzm& cgZg9_d@(*}T2<=ànEtA`uSş$X+D8s-]׎͏IG}|\QcCzA:CZ%"N8ﶃ;,y>S8ߴqEL_,Dx`0}ݣ,*Z̋j$k OݯeRs0( B3$`!Z Dz.nᆽ$8TEc ۬ qFΙ5\uP| FRɟ$w(H>33ĬB6bEGGvxX$:7hz pi" 3*ʃBQ.2&&agIs01Ҭ@KL':=^~˳tz+T O5JfFdG\h:pT)*GGn(A~@&};E|<#oquP(qH#SƤ&C 5/׆k3@NS_\TI "I Ll i`B&$޸E{TƇ?3!%*[ s]1 u`J3OM\-"WX]w=Z|) th90>瞰2,2G(/M_zJ)h 0y|)@_$|Lo ߉wf[`<@*H P|rLoDO.V} QjH&L)2"7'j.G鈓яlM rṼDɌaM Z .ZADX#L`{ta,6UUpY4|,8όqduWՌ6YtA4r+yݹW{*A[L QD8@jS/F6`} #ka]42޺݈YmX\adwÊ XC#i(MH3D@i "%Xh6~F><TM>n&*fuϓ_~k←5De2, iΟo`\aED$u-i.}}Ԍ:Chh & /`̠GuLlf$al؉ ?w>k$5"Na*:qa!Wr*M/}SAtf2QgC+~(j}&u!ʠw3'mJPaIH"rinjA[,MR}H'1`5oԧ&NZ37v7Mߚ?Gcr qC$ Wbu ,k@pdّo( /V2&UٲLDEwuA}c nF/Ȥ2RJ"PwׇfJ{eCˍ4qOo]6錊`IFm;֨*ycY$jA"aQޡ@Ձ#>H}C#(db@{ T -ijcԻ<}=5#[!nK1.78',Z;Hbd *لGs-W`)|jvm@iBaV>y!4h 8rPV#L$t b|:GPDISMP_^- T*Ģ 7pt7|wtSK19 I`m1(l4 CtAC!k Xm%h~&A)e`D%Ā&(HOH1LQ-SJ2D)x$7˦4h アbsSDA%rH@Klz/TΧYaH$IY#X@jM $ ;vu9 OTZ%8gfK*AM0cs #Hƹ&G5^5]rlkiiһn+6r̯oAk=ßŜ8fϜ X^/ojgk?R[ޒVzhƩ&cޯZMAҪb}Uou;h;v 1?%1}438=48MLE⛞(dvQ`T72tYAgP ؾJܠޫfY}Jjͅc OZgN VkHl2r銟Um x$0>UЛȷ"4 bR7٠ xq1 9P2,!@ȼjvmYuـTа)qNCraޗϯSҁHKfW8FF.e H}ⓛӆ7%y 6gs ~e 7펌]y]Zg`g~ͪ}̺*D m#sl|P>&g*Pо~+ڍ_y(}O<:=|{[mɃ\hԋ9:#/SC:'9aP<㺂Wh}? :N_/P; DKB,NJnvkTPi[i $Ť͝倬_=O*eJjv6=YK9$/j/%#_ν7J;8Q>`].gV5TΦzӔoohQH'^y pKa ^L !6* d 0&࢈ҝ2,R)  t}D&J`< ^HDb*khsۢF$:12ety~tިbh̚.$f}yb[!R29ʨ&~YXzb80RUr%@J;)X ifECƑI%SA+K]~_',<+"K{5l2͜2(UȜџE43!s6!hS@:_FTo:44ՋUP,cm'&f@]j֎HH * GX;8OJsa&_J`un+C |?GR|ι w2gyYu,4ŶdijsW`:'y0Qh%Cdɝ֔ht $dԫȟ1 MCQDM䗭QL鈵?\=wG].i?ם-{|[󹞦]/=៧T?/  &"Nsvڧg@k%}~nK3=]Z|/Y4v5[y5of@S (bLJeSʑcynx$CQa@R@cT!%[zBsvS5.Hp>ًcaicFmXbPWo廈P`]QQ/uE9GrkXpU9WD~- k^kS9nQ|<]KQ{IJWwA؀B~|v@"8AJQ$,BeQP P#TP|߯~FvVm* &AI԰*B"$)G_5xN%JhpDPC Xɡ!X`;!" 03xU'\<B<ЇM9 9 O[ Oi]s*!jj(b)"!8la@ӤFw!lCb!#myl┶خKNs2Tͽ=C3] ;,Ǚf;p O PC9N`T5+`N\5wM6n mʸVy;ydN;4ڸng -ZYo&yMfR1; զuNU01I1mufj eX}99/BW8(ӳ0y72ng{up巡Bv!9ˉ'P835 Y:k$MI)n\6% `@)]cn6$X B;cNhQ%ͣFUQN l9S  0@w(Sql$78Yzw&2Kē*YfZ7mtfI,&߫4`ŐO%ب݌.p!/ݟ*=5xJj{?[vGu% [ bi W#6( v8rRs(D*,ʛ77[E @k D^mZ,\k1*9mi2qVk+)u.̨mr1V2Hiv @B) 7gTRw8m0\r &("k+ļ*`dCt1PTTPPEC2¾O,zzUN:Q@PTCSx汥T=:` ;6ӦУN|)>MAkM^%)$&F%Ss}3嗃G+ JnJh b3h^^f4Lԍ 38h*vD<ia)0( bwˍDT_Dx߳`G }r$yNNֹH\6 )n@a>3fePeYi˗` V$Ӛx0PSMRGE0D(+luZa^ <xd"ٔ-VON@ÁRT\KZ $X(aMaJ b̥t4x%7.q(YDNFk2$-2\o*)%-4LPA)" hKr2HWv¶MLh(N'%)'?B@xOw錐@GLèD6$hQ ?u%D(X!+~$9Z=O 0WQjڔ[ˁ* X"bڒ6ċmi h#5?#g%#k{R)~k̗n@RP`}WA`(Fc0`C$)K{5:$ˇ#p'C5Sd^MaiE`X+QM>\)-)hkʢ)`bUB,P,IHоuix8>!Md%(J\1^a@k論m/emfeǷ*\4 w5 'H2zlB%_vg ladH71Q-&=zć4R!AAgLp7*6{ i@|4E2ڳ?j20b8 ~TJ5fڊNNYP#z,:N$ć-EEY1ȦPbm*na^r)U{e3(iKciL5թuf&pfMzO'P+f[@q ֳtfs0,Rn`(fek[-EclR2AP ,$S0+HDDə1B6R\m֤,7R&U\ TdmUCPҤ2A ,b0l FpTTqJ2ģ% 2+U#0Z!PUk0jvTZc$\ua7dA,٧>7u>P ZY!kTajurDx8vBVZєdt*ɉh>pk`>O >+CS 0d`< -7; IhJV+fʁp9O ԬZ9oc%5JACL--PG& aPIr2Cr iB$=u!դFt<5Ʌ3/ݝ0zwjHوx,ġ @P#4Ⱥ&" '⿛ú"O Gc % H,9 H RR|}j2yD49C $&L//73)}GjrC.WNJ>VcD@@< ASh#OnaIkA!4FNN1M.9&*ÍXDz/H,zY*J8 vTE8X  P^0.1c% 9"s5Au{X>smۺ4=)UbF)H`¦6ҺO M@ 7#xCyNR#hCc 1JLB#_z`J} ITTN_CB+'90f^apG1NP 2Jȵ+׶k9l*HJz92Νa{%*y46+4/c*@2*&pDOm梙6T'LhSd,EPXdDRQE@=b+l.Wq4G0C1 <7ݗYٿ 01q\Ôz)*)Fq5@d4 8iGfΚfildnq4WsO=u a @ 4’kT69,s usy Ia! R^i8}wyKeY[+:7D]lim4)G^ywLGd׽>^Wglw(s~ƀ>9+ї 2WMdon2}2P \A,|/HN.kHo+*攐惢Fu$A/˚<ԺK& 03:? Drq]3ꩯ^Ӣ{~|p2'X 'ҽm"V @a!!et^2!C#ZOKhr&yɀ%xCBV$Xw95pvJRӡ, rPBI2ٮSAB|^BY?v¿ɞW;(P6={Gr涪*Dz0J% G{Z8wl%Lӻt^Iப֔kЗF{:[<@)xeq"mS$@ޖڣ12BC&y2=0%CJe % FW0P'D:ؘ.Fgr* NY \ʢ$$ .| 7@]c`@^^B!}ZEf\+H!άpk>y1CH F$ "ZPIcEvFgGeׇD{[=Yͱ5z =?C\=u"H0L) 0&H%Z Y EJ^x9N&6:C] 4z zn5Pt4z\8t_E7PC&;_% KFq"%( hSG= @b:<{^p:Pˍ']fUP eP;Ϯo ˗>78z (Q/R=Kbxw+loъY*k/6`OW\UTxX5rMa#F,QɽM+QEVv"Y g Xlq pe"G E)OqH4؂4QDҝ`pz^@O`@syAX*[ `ذr|֪Zxwv+B$LMHmR_6:,3 U@`3x&3D ʳpAWgr+XCCMp4DVPFi-svDHvP="M1FeJ!l jvsF KQp@9=j]DoJLlroԬ!lAi+rgu d:Fq3܀jIo0#Bj;81Lqcп>b!]x%Q΂O&9X4Fm b4SS2(1hP63#b:9xlNۛgb|);H&<[jP,6iM&"#țz tZ P*K̷/\烳Jts@QDD.~YHDA)-ZhCc"À %Xssx[bGث8l@K/9.sh8F) prAŝ^žD";;#DlQաrQouv<2ot #I% IlQI3(b#-"zMm lhdy<~°)^rw5 "(*,%$ qsޮ/[#ֹkq}Y^4/czO=,ƅ% wEEƇ VDBk$pt{<#8gDlobVI0X$QJXsC JGfctu BΫdIC)ӎGop0l)]-G~( c oI @\g&髨YcVTXnn6 XB'vl7$[B?hAY ,L[+K--$Gd$îϵ6mm%5Ʃݷ&k76E =3=3ռ(Sl1rc "f@۠1@f6d@!aȔSr d8]S}FݽaoSZޞS9MJW蠇 &0?Y'3|dwy{;C+t&:0 WQR-дm>N0g=I9/֣OMIآ))RRvW㲫m'9Boc砥ߦ!>4Q@F'imm"( ud' Re@#Q]f)e;7yH`aN:抡frԧ Bh S!bDI@y'w溂&#&y_e& RM$טF{ ~ zKz xQ{!JH"P"B`"76vnb7!4F]874.h+@ꂲ a=ɞ@om1+4 jŶ&6)30N0)2d@Gi6CL& ʉC7Cw-T)TFH/M{M(`d"& (Ʒ#1Eobݑor')h`"`Pb HʝI MfNeD+8Ѻ {CW..#@G LT0[Fed`q^L-^u6,yˎLJce-fE\(#XVQ֦a SF ֞VFH49-Ze )t`jh QHy3z1Ê>em60)IUu`DC2L5%,I0P"Z1UC_}~P/Lj;)8r 0,E4) C>@Hv8̡ob(iP>`e:%"`w5! 7(AL#J EWL1t_@D*q0W3Е `L3Aq8uP*1f2nzu0e: o\ `xLV @.i"FA""BimjY k݈ɘpc62X* a0ꕘ^)Y5zgk Ljr|wEXשM׮R0!0 !ai$1:"L*a,((Iai=.5K ҂m0@Cמ'IӷLxL>I$0MKpǣ0SE@^&0N'itI0(oYb[z.gՎc0:s^xy{?kL,qD.S'{)YUEk}VZ`,L9[T-An1"7u+vݪ`f\9mnēltGI$g_ZvG}452~h'}tՀ"(cAD z4CJġmbCRvErb-Y)RBB9QM,纗} GũEOcClox.]v!k/1Ļ֏j!X* KJEHUD>ۼJY%S}(CxJEP!KUN cq5x;|$U I$4;e"c Z6̰>&N$d:I)*U+YM% +@1%a$-;R0;<`0(יFF1P*k!;J 5}PQ.\牛AԣN3`d&(ĩ|$>͐$J|`j(Bx(T A)/nPP%I,)bZ(1"Ti ( TK*JEM*H4(R(QHT@2 _U@ J4@"Bd @J&_)CH+*}hD*H@(S - 4RăJ 9%PӴ Y CJɡJR")Di2T(ZD!BiQSPdY%(R"4H HeJP CAY hJZ]Pɡr8H(oRCCJҺrԎH!B%+IL &(yBuDxɐҕHru9J!BӐMHC!R%Z UhVO_E7Z^W]IEwP T( ?ޯ PR?Vq(dDe1"(lQxe86)JL3_v PGoG(h>,:|"']z8/=P2ԏO$GfD Fβ9DGM2V;tg ːEMAJ2Vج$SCig @'<5Ūhe0nPc7}{{IXkIhٝb@j\ d0 3[D a_;7^OR(j‘>]sv||*!$Ad dcCgAQ&MHޒ(%」LY44A6zh"ԶTi  hƯ}5&O4thK:o8493 N1bdw#CROY ;93Y [鉃5٨ʷSBAx&C"A]+YtI3 My܋$ İ(i4Ȁ5K/J/T;y&{ :v'16N ڻbln *S jaLrA\e2 . 2[z;սIf$\fʖMvUE5-ǝ f"lDmݦcv3(- WhKjShK6RHȰcT*"ĕ*KipGm]xܣ˙Jқl 5ٗ2_ṛ#h˭2m7`rЅ&5 :y)M+(b (7ņ&o2zc!3δ+yL- ^h0˻tԼf8pܞrӖ"r_XG@)g0G*i)R @E!U4 HQHj\MJR4P Ҵ_< ~XB9'5dQMH:)@ @RB ZR IA@q )iY%%+ dRPd(a4D aTDa  Ch;Jv5oeiO$)3l0z|~pzObKO]Wk<nw'<35q{x*|RUeJ|ـ*B YR *LBTP3)P*Aon۪THrQ 0`0*S0"=*pr"0*)mZֲTjjk!bk$D!)h@%yA :Ѿr53HL+ֿ̃wLqNj!8nPRIT0H+^!i`'Dqps /a<,MO1̜ˆd{<#ߞ78#/\c($y=})A uF&zN=)3 0f+JX|hÏtPgmB.Ab(n 4M!B I"%41P% Щ CθRF=()(JGGD#wyYF;R{U7=Zu534b /~o?fKFê/5Gذd^mkSzt{:|~4!^~5 &a2%^yzPȞ,3:MFI^r;LaJwTNb[Oh HVX%i(%R q n!I("a6J7 %FMj7 E[X VnvkeW!I#4M&bӉI}/]莤kF5P LɁE!dQ#i``Н\ ɘĢ5[bh`2{ ExÑ7+#`ъKOr]*cxmo'MxIXk)AxHt(QEa ̳f.'.Pm31xwƻͩ1d"g i (5Ug;60Ny3DZdal"71񴆠g<r:z㆕m)+#D@.Za )5 A̲@\&H|qG8yMAfv|JF0 y7Dž?'Ѝ!E6Lx~~:ۿ4$p_8ՁZLXW8FwJ)'4ro)+" XI !b1*SN x&n0X.~D``JՉy-%\!_!`Ta3@$!ncVݽF")>/NGӑhksB $%˴CIӳ}? N>uJFŻZtW_'3@FpIC,'vmEJ*B3s|iċ.IZeĕL^id-EY*%`9!^[O)kV ~ǽ@g )R9ȜȚdܘdPԬ M ̋q?BqN @X!US~962Mц>Aށ>c>2Jf#GiH%h{`)ii `T|B;B-2E єQ3%U?i ""Ud98<<%TSZB*?u@@V2AEŠYD 5ιBQѵ'N!\L`` GXCM, %dc=(i9iNf\͚Izg{KmRqbTQF*pVk ͈&DC d4V:$ڟdk`n$ԀH4*5RVUq)aR!T!2#1pB@owhB)zSF,,:NRDA%#IJ13Bf 9*4 1Rvn =5Yg2Ia0H C DYIU}bؕW*)Q lo( < JQ()b ) Aa_®Jd K9*HRPYFJ4&Y+BST )0 $xpo:q 2 (*jAZ$&iFbSAER% %4SIR$A$L]8`!l#يB ZS]6PU1Өggゖps3.u?P(wlT TP3 SQ$KJSB H RJQ7wt/?4myߣ.?\@b G_N">. d! BЁB H&j`"Yi)PV}SI%9?!c{d?A0m|uF4qMfeXFah33CI@)n=r  $!U1m@µ.a״R>?}-+ قk:vݼ[ŶSDѠәIC5R{];|Z0ƍiAC~ITɼcҏ4Dj(ʺOs/V *@TI)H#J^ݓ쒄ȟa)40P2}ljzлUC`f& iY:G..e)ld k x pf0>=ޟxǓxf ɿs@Ca&f8kHi iBprb̨"+0Drf™PD0NeE?IAX9r+DdR!Nr:l2(:\,94&p 9JoCH!)]}p n?{S*mtC,4UDU5A3U PdMA#lRjPfGٌcWPz̀y|蕡$t>򢡉n`P ! PRO%KJ""|fx nsP*ZiF{y_hVKa[~X}g[jX(9e0BRaShPXeEZJ#hBjJ,VUbQL$b#2*3 [3 c~Y`1lBBFTXc\DM,GIHOp\$22q p`!+lOAƨ(`Lɐ_w5ML@E DF]dX4)$+Ta ]c*(DkF(c1;נE9 Q,)-4+Ad'C~Uo\ MxY\}rxn 5'>b +f[ d(%Qjawtjp IG'Ԭ $YimLI}cTmI7>'xў2W.(aQX-xUdEANfJ~$FYK~=I2ֆy_{ DBT5#ߐIW^zjmSO[HMee'-X;Zkӄ/\CvC`Uɸ˘&>I]\%TG\}?T=<7 "b`S v}$QTOsշKw2̙*bWwdM@"(B%T( b+Ee&WO%Pp\́:ɰ}d): 4Hw﨨 Y,mcﵧm//$R&JPwjAVM:Or7=λ*KuqͷO\rChk0i# f* w AMTKPHm 'RzA\W22+!96ez:]u@168hMgw0oDp)<- DCsW\?Y=2n%#)}7 Ca/sGL  sNrSC` κ P&@s#R-m 41437QwrBHZGeŗ|tj $S a6qEjҕ$U 6 U&`xH?6N"`Utݹ!GDJR iF ^l䞿4U]QYñ;A)6 R JxÐLAA2brZa-+,$),$kcS꘯< XK8A|)._|K j/)fIj[oS^")ˋ,GD ( @DJ-#BT H С&C 5QF7кNA+-̈tB֘SҪ= $PqRiG N. bE= d)HB^($ʹ.r6iUzוA^p`ϣȡ HBP@E=6{)?SJ UΔJ)&T;P*ʤ<UR1|je!%!r@!`U <bGds$w.0eV<|O8DK|sZSI0jD!CN*W] -IPS @}Py' VIlG_NaRD;nN Qy/-x l@y??xA;1.%3A$Vko o`1"i.!q23;>LmzZVc{b+#eyHT0hDWEgYa zSѾ^}E@o5J5R:H2+G7{Lf \׼c.ۼF5PT\ Z!/0ނ|>>FZo&K$ԥ y.R5u4os QgQ|Ex,ޜ`ÅMޜ ?a:-`y5tìEzZSFi38.XkӬ',ᛥɔNğ;Z{N~Wo|;[U lg8>_v"}ݜ:D2iWUGg{K'8|ICo gS 0Ζ0Q /GE` pV8_$I!ȰDk%;-5 )UOTH'~mUGoD율Fnk oԺ%Q1s@Tk_c<R,(kYj>4r1;?yGv%1\|wVtE-$xTQ@1ILJLM$|EwJ=N 7Cs }Wgϟ?RTJ *Hlm!m hBG̻?fGe fZ)hTYJX F Jfj6M;.ay4? B4}!0`yaPV/&pRQ2/vy0+PN~M&XQ˖e\ neO_]PI$mzM &O^%R'5%DDS aGkړ$fwi$ꭦ7 ? 8D9 5JA3Ns' .5{Ag1:@51$6(&eM(:lS*$;sϭU|\/M_%0WtQ!wtjuSSA_lAGHIY<4 n&ieV)Rsx:šOth ;xʏC'%ERgcEEb1+T$nXzDV D9l*\LX(px j,Nb}NMpcY%x)^(tª"dYWGuء} 1S%)DE$dq̑˝5ina)0XL TU0T44"L*W#rׅ =^sw:eBRDCóv%L2 # (#A{.nQ4Fĉ_@5kSLI hZjPz @Ŋ)7zl8dzrc:O旇!5 {wC`GLQ*6 1LĞKn(]s2Fp:G B`VvFct=~C6ҖoVW yNҪn+*HEX|Wj!ccY!_ gӉzb%Zf?Z4$j]wuL:ʆT^b8-af 5.f/ラǧFNj@<`H Y_js.fZä4ȯ-% (V LeWihM "MHRy~,,APG>k|?[wT]K:#0Ι3''5JED ! *> UjDg?}ebJ!D]ڈҬl_õ~φ-GsFrux"/1V| }>{;JK4\u\ 1֣'GguxIcn^~OU;mNT#v" 0. 7`W"C((,Le.ڛ@?ɹiӌbā?sԉP,M2qXbx*BV}Chҷ5| 0k|KM𸅶Q X+J3evi!֡\_Kzl J !#x64# Z1"T(h*N>?MZI kpL)@ܔ = ~o{ 녾 qM\#MB ?W %DW9s<ӄJQiDR R0*$df Uw jQhp-}]~gk'a-3߆9< ̘Xa aDZR 1 /:>0t;ZT&Z)$OP/)O'2h% Ah(Q)IB (ED$L$r&WPAPE#:a )O4V;hVR{P>O+h~O;sÃbU:"jk7LG"9\l18"`n'+ʱtѬ;0%P(gS! e1w큚YZlJP+bXݶe+\Ski: 2:~Vswu,ʼkzdM3>ubFu_mqW熅%GX)b;qԕjD> > p O|2K!YΗ}}9qtޯˮQsW~$z+VIɊh>.)a MI("ssQny vWbL$ϗ[֕n%Ó'~JÑg/+h8 BORͽ%,8˄]qùG3*Ycyel%s%sv=XȺ>o}[9+7׮~ ö;rPծָ̻y rh{ M\TGYRXzmtQ'l$// g7D!7gT;m<*i)HT_LW=0 t6Bpa]o.rkrچpj.L2So.8[LjZvenK3k#JN@b#RЕ2%W"tF"1cToOz]ܿi{G{i^GqHp'v^7k~ծ+ K/G Sd5'E*օžtBS$5 EME]ۯsM|ߧgLX[7t vڙ?O\¾d Pb4#5jK1w]̸Ӎ;+AYL 'g pπHç/E7qĀع8P5mTp[#sםlw~TuMe!( å蚗1JbH8Tn cֿy>2u<7w!523: ̾,>˄ٹ&=r#E2?Z.9sוWU/Y}VU}I]#]O"I4)4n<7X0(k%c ~sTR'Lx|sDL{s) Ax*rPpT%F!flȜq;,%g;kAzJeG[ pOfI(uw{")^>UHNQ@JkG`2$T:đ* m~|vq?*(EdgiAsI r| `rl><@IYѐgș9ԣkZ˟Mx;Gh8`+\e>?YJmn ^c}Klؒ֘y3a 4&uO sn$} y( &(ckPo}=o=5U~; `^ϓs31䌂5'}G/f^a^u= 5@j XDFF K)$u1ZBw=4#{0@.%+]ICIU98C'"h:fgjVU[%q2[QB2ŸЧiB~K\"g=~UTο]t& &Kd׶גU;&]l~;~װɠZij:ϲ>X7 ZԎܜ{5+aOy8vXm6¿*@ؗu@Qߘ.=UX٩j҇oX 9Gxjk|p 024vg$g+ ?JEש)aܖ+Ffٴ2N~B&^--\%料\ 1'ľk +sF膴&$eK#wpB'}BN%FiwTt8Ӓu&M5o ׀aCgpkELhH/H\eTEb_K/##mѹ[hk&.$=zQTryPNcY#mFJ&[?nSx3+g=lz*еSLص(@2@lM;fF_g)j%t2,w8Z"?L>]؛ԜJǻSWxrd幩1ˑƯjlpC]ұ/bf:x_ uXS1[[S ܊~rH"X:' Ҫ_wH\jݬg0p™2n%&;ޛ ZLΏqkDY 9 agJȇ%r[c4I]!VQSy`Ϗ(Q=MZrTdqd5w9E?Iuss0zX#򫗽i̒]@|؝jE6:; EcOR(N\z W'p;( Yq\t{m7A%;k (=LEä,KdZ"h[#,ږ$(˸Y:(-?}pCʬŏQw<(ο crCgzr}g-^sި3t~)ea %J>-RLiZ!䩒npok~D`AWCU7]n8KƓ0{b|K[|4tF_) xlJs!*%j}g˜B!& }hN ׅKQK&§ZX}a幄)qk܄2tEqHߋ!?s[(r$aZ7&Ve^='NRUV0`tDEa gIp۴;e_fDڸ?=C XxsQʝ| xxu"))[>2۩tZ0NjfsG&+=Ωfq(Z'Kj;nr=;K=ΊB"[U K)z fwB$]$-9k9j>e)e}{)6u~+/TK'$sP@ۊDߤn@wf2=l:K:dkYS:wʼn9qWWGXA<]5yq=@UIxՖvc1ս }hoL;,-sڳL~P6!$bu\AYaC*DQ5=B5b& A&UTEX֚LGqIs"RҜv%U^v9z L/ dž)aBE$«/+E*=$"mv$FkPޏh-_z%?IwRw(jʝ=]'6sUfۖLvԵ F"SD`ϑ]k1"+SH\\94?YDΓb0Ϊt>x%)iyb2 m4)4jRR~X?7wM( *3#.aj _M2AE-s9ͼxt" P{5wL>#u,.ff# %dx?"@;#N OƧxu"zŬXnr6Ch:]*?_w6Vy-WiRG13|ИFlg ow#r虐uH.fbgYrWPkHJ(&瑭KYq92T->J-ԎI-'~ !?E5E'ctpaLD-9EB$#'gTMir NGR pL>C8J:EЀ^KbE`/|BaA.p5==t{k%^x1ek`Lc_?3G}#h0LBP_}D\>d&|[>0QwoIf]b!~ eIm#uCs/l]2~n/PG?Q8vb 搥U^%ǵS_ټJ OӨ/2~aΗ cx U~rqU9_3 A&%{$+]-UD9؝Wc0TJ6!+Cua1gǔ^)rͥebc92wS&'"_6X}܊vs~m}-2T3ޖ9L1\f|]ĝ*) zSn&ahY߶Cɚ-pH7LϮ@}QcoF]iqwȴ8)$% Iي/BiЊRUPuuctI[_W}u(V4Z6+y/a6'kzTZ"K$T WVcĭUue 9{ b<>vK~W>ܴRK$uVjJw ?IaYldЁ`4Q}~Š/G+LVÐDdlo=BSQTڎx̹Gܿy>"mhc*Y)'1ߴ?$7I-Ѱ& 3J4pf<_%TKd1[֪)))<`IРʁ!{<7?#h9),Ь۝@P,Gz?Y}_V/“' 5{哢_ji;W]U|^` ̮3%2u}09%w&77A#٣sqre' 7MK$H5ȕ [W&<#'O݊σΆBFYpp[&;*-)/9Pڼ[b1wҮ;9eepFF%iozh*&&n&ȳ";ql!2H+b[uϮ|l?%(Ԣ*=-fDpXlr.e줓E y8˪zWսwm k:c %t?m>qZwq!KtR!x+z ^l{ڦ9uPIXv[?H'5Q >ۤRww¥gJ$6eVtF'sOAՐrD>[9iLavމ.=W [PV%TXE{ꆑ_RZrӠԌC5g6ZZN铉6gڅ4Mj|C-)=Ӫ()R''!>poeQᤤXsZ=KGέ^[DfɑM2z}7ls9^fNDYJ~'VmCN5\s֣hq L}2(P fk\%{d?=˔Gb /Z]Kv|~]~8l>/[~ŽY-p8qۋoʸj.iMtZр>i4c.+y\?ӠgTp|ݱƍ/]VM?9oh!k%ϩ,ooD \A Uޤ۱wbjQTZjIwr1kI@\{,f>7%S7CR^Mۻ{} n&]Gة$&<Oma:Cܭ7Ps^%IbG/+br AAHx7SaIn.#d@2XSΚ(D_snYK ǟ5vLIz&V3WaV?83) A%=P1n>y ["ʔvf9YLk6SUA~/QG$6Qo5c}?uo,\HFU} gZ[xr:aR]vkż.YmA-օ\|%Nu^.SV|k ױɦWI=1& %wj]+rP5, C̣m8{ӗc-*%l*0N¬<;odI UPO\,ĻZ-zR{bTM&3YFqG=!Rt=kjiod4o WF= t"51dv[?4K h}C~ :?!͖YB->- e`yIKՇ(\ d޷7XpĿr  5r2|א|IAE8?~@S݌Ֆ7B(?`8ɠXcDVFJsiF/0,+deaRT~'Q9Cj{ZŧQl+ [5G$?d$oTqi4ɋ7 ?cpkqxTVql".+?:zo>1e!'u %D(B(*oOMgK 'x!0\gԢJ/a}SgBiG6rgqm5^IMϧf$')#o:Nւ!6-չ(6=xlE:I z;40P>yin?BY5Ԩ0+v9 05,೜"9a]n3ܒ庇CM6I94Ȣ5Z"#b>}hs[3x ![k[ŗ䂒w/9)A?%Iv魫%|73 9!C C~Xnm-͗Ƶ1C9B:-%iBM?0X괈ꨳ+ ƼSz*IV׶9 ] 9rR\>]g;^2ڎB (<^],(G^1 x$!cW' '6ir>KgO"6ZI׬|:O/{MkлfT{%ltMtk%:Zj{hjBK~ʹ,L /[ 6s`&I/7u* m%WTBz۳tp4"7hdzWZH.#Z+QG8VfSCD{kGȴEK7֓-ptLm|2FtVN bj3,}kLl&21jgB􂖈z| *%&ö]"ݛ-u$s9vzyӅ`*Ȅ~毛_T|,cZlo'WDD@ڵ]x,VD'8l0Bִct[Ht'b]꘳!j <ވ2_ћpK uJqiCKAz e&?Icoe(g+.IM &"ʭnTݒ GHd5`OO_y(^c];S0t.WWhf7X(܆ Cfur#OOT<=n[VQZN0C~ 1 $awI[Ht)8ɃxD9%}O?R ` ٤5qmOGsDdm`:;,vG5x>Bw/6t(Xo(dD%YCvV8NVNHNa͒*SLhi$oʋivJZ3Mϝ`̲G[i+J"6v;Co=)wGώfK# 4(* 5t$։i\6Xw2O:di-B?(ө]Ħ]7dug~j3{E(%seyQnX[!]_O$>|!1+S??׿3}mXfE@?1LWܸ(9,q@ma weaL}~碹E<,\ؿ2 Y[ei(#ZP^?4H#G~YR} ic֓N"eg@ B&0=U9:C{ыs?i$5SP>!ut|e qJfoǤR{lu|27lpe"9~IUYȈ^h6) q%H4)J6Xv\ ]Pnnxw7C?$ &O8 Uo⺝"dH'A?'c=A[q鹒Aq#fSi#)7J:~_&%!JTl+%𸽧8>w@€oU`ͨ/㐟o5C ٱ(XXO|f,#E@W u.,Yuz?c} jz k%fOO< KubC#|, $}RZ֬dCi"}_ SYܬyvDYbڒӓ jX٫d7h bP7Y~> *(T~SLĴΙ={b߃ߚ@6m:c GUZ1nCv<~ǀYf]BgoI "Ò5pof.;,s/1[/~ s@Msߣvv:'sx+s$ wXJ{&mJ.e(AN@B9̚ej+(y5?_$K[Nт)Tw@\qF.bmbX9o_t:Uh99O'ƸD**GǠŻ~??`4]\Q ^KKll<ݳ+"[5U(mYh-zߘ$څΪ4YE[ȴOX} !nXLǶc۪F)"p@j{9 x4 >⋫}έ?k1| 6UѬ]=~#oNVHN_G-q5Im!7 M0R&]2`k1Nuuq2Y5޷@4C&8v8XVxْPc)e{eh߷Z\#*>mL8"W_H萩G߁2Ω ;a0Gq>@*~hE[g ӓ螸@Gj&RfpBZ,Rm HWܪq5y ~8Aθo٥iyǵ]bVХrL>վDMsDR(L ҒƯC*RTYF2HwE.=?3$E-5$)!E7kܹ`=t%v4 ~7l:CC3x-f/{&7Xj-jMGhOȡ:IzdPxob!ZqȈ1|f>zx@ݱ;5ޝuq1I(:mH_qΖ쌈 W3`œgЖ,Ѯk&H $/㷈v^7JzApL?309Uuo+>푈}^"t.ތݘw35vm$~vf_-y'RϗncϋeVQ%!>3=wHq: 7~S8+ԡ|>O,G&#)bʸ6o!#N`TXyEWbK7oJxxP{N@ZpE:5( zw~7~1RNI:*elC_Z5j5#o7Z--²e–4԰vpɼ_. pyФ~}T%+>4 \'tas < ڀ1 *ôEa0~݆_?5}P؎I0P 2XV10_s8OnDimATJ.C; u`!u3>>t#w zb!m9Kq]Ծ*jhYoC7-Bhp:DYa@m5hgOFyS ɷt}@@ `kD k$\ Ur.v?oN,%*d(oPرTY/[y(zF`iÅ)^v,(mt>5=plpU.~/{+kH_ڑJ(/2N ˾Ԃ-jಉuI Bqh8|6NcD0<7)2m _>0Ȃ~_eb%^Y)G2z9Y>2迕wݾ Q{B/4MT&Cqt62K|>ѝމH5y̺ '(ed{7f) =EdPH>J͇\^.XV6֭b-=|v٢ l'_ӷڝFnI<jiO>T3ȫPUa12 8ã&`T^1 @  =Bb6%\w&\[m4k"P#~s2A\bs[cY{#z%֏C AzC5jzs G4[ _栿{U$|+)b?%A]*s귡/rqVBPk7 ti},>{NGLE"V?2'<0wbupVqm׊$Z,ND=M-#j\&KgS/Q`Mgkr.LS OVT7MXC[$>:+a cǔff9ʹ1qiz4 4_oΛSX نwnxikܔl4ԮAB-?ԑ ['T >o3>[$3h\Yk^GKnZ@kVv.7 =Ta㫄YvO]HEUcqFd5.a)KT>6CHj7EqՓt-<$L ,Ĥ\U%9e xvioa6 .PqS.;+OO?\4J0$t>Yw $+Ц`\a}ª18*ko "!?d};vD8B%€O)~Ϭ &:][֠1Xԥ7dM盰v5"F|rfyDRMlIZ]Aqfp=<7'~qu+29-. qo#G0qxQX~rMDDF!ƚlD!ʎ* UFa[s!QV`sB3# GSyVQ8U JxqBUk ~Tu;z+IZ~Njs[R ә꿧RǠ_31Y<X m _ VݙY'o/3e(jX):0^h+d&Kb+W@i,Jz?ur:4RY04|#Y9'BWbV`;yrYrˀr"XLCbR{kvk:)vЯ.  8|A""\2#$MTDSyIl|pvC)SG1tϖα|]RDOW(]bH#Pݷ"~2unp(oHϒ0ma.'uN`%`DV[Wۣ_l .dE11UMyuhs+T۸s2tz^k(At1(*~4x xFYyF oa{T[Iײh _'m]I\r>L5&?!m |a_(}DUZx1^o#8N}+;}^mL͌nMݵNн 26H&MR t(IgȋMõgK僂O'^i%%,Kw">G}\ʈp˰tBsBBݰ#.]Mt+).D}J~Qc`L'{:x?"7A6LҪsJj3VZDQ:^n u)q?#gֿgOOCX Hnl0qv^t#YBЁT(*eKItÝ e}]UxCoM%إ!nW'݌uxyHK62Ʒܦ' D{/{$ya%#@y~sɖC4Z."4X1Uy x+"X}Ty(2#hUvL[M `3[`'QsCIgHok]Z8wzHyM)?Ay|Q:WḭLJ?#|TVX9&薆,A3'v(JPy[j~/g3Rĕ|4ngULBCڕV sj=^8e#Sn"{fSڍw)P `v!S^I}z`Pg# =q$kM.QlQ0YEfSwjx/#G &?]mr䨀FqE'Iχ·ڍ$C?+}q tk 2'zK[ e HWv: (f#%NŲL}(zvM2S _BSh2dBƒIy8Fyu׃aubcIJ)P2 g ڶPfJ)} JNGTgĵvt=@ğd݃3:I"6NpF`"N?"$I gDV##URfL EV{Anft,? w8'|^_ g3ᶉ^Gx__t26+AˁwIdFIΘZuMɒfRʉfʎ(k31HGp^CM7_cVjMwX8W~SV 3!|EݷIweͣ'"7f]AƩ#qvM6lR[ʍVa&+Oʹ G Xz:L1-o;"~)dL[}Ss#y<MOY) rв޼ov9牭H)5Ƒ~etlKv_7mi_Z*m/G;~|LMkCBw :Q3ɶFNi-'N:q{oxɮkH6,ǒe.gN{'7>"ZUX\,9~DH+ 'cz1*HM:C|)Y#{W)aDxli8O]2"0 ? .*R[%[q𶑏EݳbXsܽ74CR2ŃxyLWIVڹBo/z{kď^傫TVՊ},sLgZ.{S-aVm0 K/P)@ŕ ?tFk5pJ4Nv[|1ɽYSιyٙaGևQEY(ڢ f*iPT5TLm+gPh>%Ҷoz$w:-֒~H%yq{Buz O=x&,mu3݆cDp7۟X^ >0;ρ&y}mkG8#@FQik5,6h>\J٧1 LYpyev0* q޶߿X}fLFK[oG溪#7X}#%nsʟr 1fYql&aYjꝽB0"W#&BC5o4AceSmI /5e0̾^-д @YNwy%vjo%ԕ=H '4oj[w۾4r) -\"2M؊:#gɼ\e"8Afz1l캲ej6{̞FRajG䨲f{YydBTEXb:3af7YD<  <}!ƍS,ARF~jZSFO̓o(*,6 Xg=(ǃ{]aI 4ūa-(yKEv;*c_(@U|w=$mB^Vȟ.9MQnߗGd76sìP)rcB0|8TE{gԲt?w[p$dW9$7 O9rFxy0l08*B&7EI,pv%"*f#$o'CӪ?p)# "sk%bHqV(Fz?*ȧH@s-L0 u̙j&H;Y1.xpm! YII O^obѭ~Nɀ$`žbD|i.aH[╕Bti1l|{?rzmـZL46d L uCВ|M4YFΡy.^(̣oBi$7u DWX[`%b[- u;>~4|rM٣ ZH7]ؒeI{Q>'o]kq6[ Npz'˩YSKUGSsef1ϤcԠxVw?3OMd!c&3ש+8so7{tNwc.݂6 Y3 N ^ܝ82gG5Tk˭QR4xWG "*$9c%m8nfiZr-LrnlHT/&(.4+Ze}*ԁ V뮙H0{46ӝ6&= 61Z$wz I5ɗ%szwu(Y!4>YO0VNDPY2܉+BmMW*OI˱>hYBOL5UN_˒4 y!CljyoϚu.8\їy)yQU  ZosX^N- YI,;KԊDv=DUuqlXIw$+!32.\~Lf"CPK0xP(<—뿒Ӿϔ$_}/d%W=~WbUwRVrs7噄`7儷BpWWHD 5|4M[.vޯ<>>ԵaDH*;=&m=~v@+Ɏ ](e9*zf͝ӨZ.-^Ww*?=0,L/S1p}}tfU0ZTr$u@Y^2#p[}/ӗcr\C2f$܌נ{lݡi usomZq=g4 ڃtYlQ*}Q^Ce ZT=MC>j쟫c@7\)MQMlZJK&dSnȲ`]xڸo0a]YQ!ԡAnIE&(M5t[Odo{*~/v̐!^/;!q8;], \8Rz {>._c,onTtfO;6.'LY*T?`&M3(3}S&L_xܤGU@GK;I LZG ̤Ju<=-ܜ>Ϡ /Ԗϼ~*}+y!N2zm\-Vok^dhUDGW<ѺYF3O %Rˍ/{fk-,A80 1QwlAфO hgbͯG=%x9 (>PeU𠯰I]\CG0eP.Hs؜P~&ykC;dÝRvȤ35o #J!Y0kK1Q i/x/hW!jWjtz2[B4)(g߷9i( ^T9S#jd}*El&,>*˃ëufWl;~}rL+aSg\fyt*oi~)YleJ,-r"t"ՅDQl2|J$_*b+?0@&p0:_S .yu.Ĕ/_yV}eAxl4}TÔb v݄'P+Y KJXTŜdY O,C RZ,AxE[ lLU,Š$e#&n졜աUs`<ɮk=k(TXc b$ϹN>iCُoUk` (,z' VTChTҔ+O|D~ꃗgpOṄxhAP}GŒct۞#  Mg0L|@!$ީBQ/g]'ީ.4m [.# |i0QaoO3,G0V4_vϺaα>$6Y*mS>|IVRL_OWP|ݚLƚt0,-嬇u龒O[m6&[f[3I=b`C1=y ]?;ty#ZX!-EJob.|5㚙qjuJ Iez?!r܆]8DW*HU5*D7!cS`d-o$|lXQ!}(~?-Jq;eSЬ}lٯat!l]{CUTWq wA#z ȷW(X[j>oe>A,Q`L('UU%_FqxD;2A~4i%Jfq|쀷_`Wy œ&R<wN|[(5՚s$ɮlOV@kIdG&{2i|C(u! M{!O(K_X|X) ~XgFxRf2 t 8U, E8ҹ¬s)y#嚠&|tnw.k(^[U}ܢ|LHrFT},"-[ʤ}qzs[EqW OE[{tևLUx!W j~\ҹ6\fƩ)kKu\:yKx7cIUaD +>+t%ܽD4Y3ٔEߜYhB+O>_ww'qDTʞ-rRލkr zzENlU* \:J}ϟ5ŅiF3gz!$bqƋ?Y В"N_2ha|S9}\$d4_ Qw& )}G&$!qa"2fC3Igw-3ZZDPw%ؾڢ$|$tqݘhsA`7";& [ĭHg>N/RUU Xf\uJhqT~9iIhv<&g_FSyw2ONY=/@] `fv9Ld?^J_`ɑUӔv:*@爕l8XR+Zwy&@mnIբLO2qtxs|.qTKRWO t \ MV.$5jKWŇv"\~O?]Z+rqR;e0_E;>CAЩ lrÙGp(T@hP6-Ő9a`yO 7I-ݪkR˚ߦ8ڒ_AYgC}^Ig=t՛0%G⬖<)oƾVgQ~Hډ6"&ej w֥Y+D2pe,L~vjW46"`R䛏)3T\p!E3Wc5~dclJŸH#`a(>vo_7?x":"ZR#(Qy8Mk ( rWFq5k*W|Lo7P4n*Inг3Z!|3W~3C:')x˼FIﲦ߳aMxhj8&xv"W% D+8hd%d\ $ _0DE42;hQ{K0=^~S q>?ΜԪFn?Huy߃qI,aIrc,GT*b*]%R%fx"M|LC=q>`Xӓ7^%"PdEҍ 0mpuZ1-Jh7rqLٲE0?'~퍚+@"nvhe%\FҊCBYnrl_Bqh(VG,3׏";"bVrj|Y~_vvn3sVh;% $b918h ?B6?V 4KL?`}=ŢFB,A s$]89ajpJz$jCwv+`hJ6kTV۴GG3C(42TTMzQe16PTj/u"IsSeHN)j???mBΠo 9;񣘪`S68}/ݳ8ߐu+Bh*&b-l{|̗c?z>Gz lp(-}'Ż,fԑGM|C~_L|S)y0>^N7dHC[U9VSнx_1\\g p"_&U~ ȇ3n-"Ʊq8@۬Ss~Bi>'k^B={KﵽW,E=nk|i-BÈjȚF9$Z[ ofW,kO?d$λovTb:QLk>gDVc|PL<ܤ2iOIup^]rue($y?b['GXPe:?"@ +Y&w'Qx{Ȇff4d~BމhX﨤L+81hG U=ĘQ7<zcFL+TOZ8^?lmS%?eI=<`U< )v;8?_9C+q-{Cu;b ?y=?0_^ 2v{Ed)lzsuiZ3$=~FZ3`gK8؈I2c6*S*T} j>s}6Ę$vciwPGբXui=eS].N-ϲj>EaKq?܁[B7v$ʂ,h>$䦺|P:锟I5n,T|tu*gzo N)Mx;գĜ @q=:W[:x5FϬcxϑlx'Fm+mL7v}+9"WCT^Q/|yOy90sO|U<{0FWTVo{܏ĥ b3o;x݉ Nҽ\yL3oW~EL&ޥ_@Q+G 26sƟ&83Q)ѽs&R:SP.p=p?sx{SR <=o8-iF e <+1)6[+U𦎡a0YoL?k=yDPZ~v>jǛW5}EPse+Օߑv2dfi0UhgJ#z ~8kc Ad|m#)#Iq[/|<y}UN_ 'qK{yCWD3;RZ,?F5>(#mJޯLj#?^X@?iT+Fˎ39#`bkkk:QO4?r^?',igSӴ:}{bEHPJ[E*I?Я.H)2Y]݇u@ R#* ;5KJ8N~>q\WJQ7ўKu="d(X-tg',cO4ĈYQyEFaW8E-n|*`p-`$=ҼFu^It>w* ޫkb,"ulv[IyJQfҦIg[ACAC3[^J˚"i}-#C)X&0Sv#GgG P1|R\zU'C{VjvQ3Fc';2L; Oݷx仧G}T٧JfƫìT,|#[S¯&=p"L'Boh7:wOOAI'NekucdA|Em:nP L'M%Yޘ? ƿJdK+72hcr(fP~7)F-KXݩF_g3p+$#ӣX }>~{7 fNЖS9޺?18k3fΉ]A';yX--\ j-:v0s2oE}{_itW3ѕe/zK5!T_~|"RIAn_Jcv7/TXpL` A G+㙏 R2+V @,Ƕ!uH+Eٳ%%UA`7[̕vc_1P+1^Yz:?ު1Mv9q^4 QՅr bTfB ݉_Qy(lmr1e:h8=Ōe2_ f/"6͌`G:yEpC= f\D_o=0=p?alX(z^cu,'QvC8{ξ<|w)SQA`}K̈F%  ӣa58M8?G/s]RxΣf_L"0ˉ=GbWK&OrM 8ly]Z QY}H38EE}}Glۦ`1*ZlXQY #,s'=YM\F I&LVKX#bMvtj1S,t9[5ZqZ_QY!З7k<sLWIxy-Dvy̓d ʌt;}N=7"!UFaI(*l呋0DKm9 1(6|mH?Ү_ǚf>ܸGc,{z ^B\jQoOQdPm. }H 9*rٯ B( NWM['%Ix ay[sXv)rrx9T૊D5= ;u〷xʩ,;RY*2Z*nF,FIdHϚ$ڥ sɝuE$p 8L)׬8iffQLIU'#/Q\i?)_-rӱRl2C2WF-eQ4Ҡkj;NQ~ʆfsf +E8l:5c&IE/12Xt2R4᯾HdIC@p: (}'>qN{K>G4HѶ;4} z  1@AAO`VI̦5W vNo+0xz98Ҡ=FSmwAD_LS3T sXGPb+ f옪5~RAb`>1iUCf҄Ƽч֊KK{!I0Lo`(hΤ=rgU"sWAsPÂB*% 9b%`p y’hU,GDJ2'QVL\_-#՟^s;]_T~ߋҗ:qA`]RdAyR$$CMkUvq!gL=_w΁l8{մO|HB ϪeV:ICVl95$:O%wbMv<hACRN~Bu[mȈǑP$Jic%єR0[&bTxzOtw-v[#XR쌉ד"oGmJdpCK3=L'DԝPŲՒ%]מI%"(-_J1Kו&-HS@JA ت罛 󕦿#Dݬ';e&⮧nU}< $Zo48Va3My NXɜ/y{^\K5㹍Jg˯W~$7 ZE/`aD{oLƘ٩/C)i>&JWajP,hHbFp@ko̊U;Ok o-sD8LWFai37߾5\|멠d"McsS|AhaG͗gإ]|{5 շ!VfՖ7+j"8M$ ^2$:g[am\#ToN^Hc ȝkZD$0W1s. ޿&tP*DjaSZEǤU0%! tnǮx)9 >yrCW|b?:~Co\ez~xwb Oq/*bVqߙ01ǎא( c 6ob4F#=@^Bx}:->6kg=ߴYڑ)e:)_-dUM<m)m\b[߉1ndS$췐J:(n4@IU+2U5e<檬q4z:-0h n'3}G*V/Q $]HL,IvrVprY3/bF1ukR$ `3t)J6H_O:7Ŋƽʖ^)XX3u[H&c&AkwMb5qq0MEuӾ_݇͡^ڻoV2!x }Y9踞t))=9cWڛ ^JDF`=yTt򆣐] |.d.DMwlӋŖ:+oz/æ%0q{ rbZtI&Vޯ3Ypk>4C?9uXG8TJ/%z@+5k-_[7$lj(GcГ4fbԉDUU$WNvо;7*2'K.S3#Rk|PBugۗZi֓%Uw;ZK燸xxolwqe>Hiפ7(䨳 T?lv-FAcP&TCK"'.F[lXW[ mֵ11F֌  )CӲվDO Qh[I&p|q`f `շPKvEښȟp7>I@d+bUuûB^4~U%nd\8ډoSk~>be;/m*W6P+z$qr)h7/Ye_ܴ(Qe_cY[omv_wC~e_$lLk*2_hh:X3nߧ랤,".,} 2}JTO#8F%C u`l`1ɒ) `'By趛 4Ri@G*T M둄<Ԇ ly}wQkn:f#L/[ȉ QҒ=d5;Ҳ<Չ8 i8r(ɣMix3L=,%[CDJo~teUP ~>ɸnJG7Ngdn³%&󢛠7%7)Thj޶ Wc9/IॆwWǭSzh#4 :ӡр2>A||RV3%fbacrͽsV4z0{%$c"Nюfq` In3DMKKlohJ[?:}޵+0[jA[lz83%ԲMSYC4F@8IR 6wd d|'KAw8']rI0_~Mgu߹>آ^q 6,Vv>+4' ?T99Z< DcC/DlFNO ֐)j4]dʱ H]yB !^4PɝZ{O}w%]2YpB~ݱBC 47QJ<]F?Vҍ+Dc2Y2#o{|8Y;>34b%בs3e㖞Vg:>3̱oЦ[ѭ Q.Tv5 x2=gV2ֽ{xLxM?[n -82y}Ms2w#%d4_A'SC17?G&=߸sŽn_vw4IiE T,fN/z yzOZ? jN?BW(ܚ>|22ӳLS9eo\]oq@cp9GC#v1EBo,!ؕ"A̛$70Z)1 cÌ\D Hv>o@WKWv"Peö́\3So1H 9+_azp+㤽Rx<iqK ]{j]ͳx)V Ck/s sgilxSϟk)gI[w6o>Y' zzycy< M"9DlA87EV8;&FZo+ǯv>>R:<%oeʉqM{q$=9[l+r`?2{Ey4/>t$Ϙ:[AHo=Icھ|Dت]AqjVթ1B9mNGIKzQn:,Yq@ 7pw# +\G'Y=S#rٍ H#ZイG6O)% ؼƱA{g*>cy<m*zA[Ƨs YlF_3bM%N̥q2Ƹ9}4Rf%4Hcb^5Wf;q_~49N<ߒ ÆˉUO@.S?_E<q= .~Y~ŭ:Vfq=r*_Lƛ(_ko?۫A *44Bu􅓚R:'o>lb㋾( tU!(=h?q25?)1bhg#CH2djtbCZtِ|RdGIЌB}|Wٕ`Oh]9N1/EXzjF^`@|N"E.zʼnx0\9 x((I<ԍ<}t?DAHJ~KÂn,1WUz2XV>2؟~0PoXm`C77 '7azWK+wPC08zu"VkbǸG{g}T~} ^z-Q_=@msn2] fяT {;& ^kԖf#;˟{3\=4d{9L”Dڟ͎ 9~kpu6޿K?iQeSǯ#j>Q;iK@&<-eֶS`#;/{ A:1=K] dgdǙ =~dZ „o$i0 !v54}"A_$Y #A|:-[ Yn1w$tU_v>)TBץ%x݆ ><0# mȟ_v|Tl;m۳޳__͚i6/#̤>I"L`+*64bHUEQJ/=_7QОSd55/"$%XDoK]@9[[>B!2qT_&E0 ][nmt \nf t_xd='GBpsS{im?VCZT:*L}pT?ɰX;xtihsOiHyw`0T6s gɊ@2Lnjc= aҧ]1fԟ{+GO b(MgU]ndȝVϱQΎG@6e5[ V#9IxIdQYߍl~el\9LՃµ eE|gD3"H;x;4N?`RdVG4ra}怒cKuk9Rb16 !߁~G/[7RLdg5P6IֵnϺS+>V)W접~nj%Q@嬙2 j-ތ>K,Ŕҍxy"R}_{V\k~\BjD<&yD@QTy'KhkGo2W̳ HTDʹOb`swī{,R;FAH gYz;'?y jj\{pb\~7QؿpH6Mz`e`qA6IB>nC6 .? 8؄_ }T`+UL1~V4|o%<ϮIRrÍO&n`bX.ُhM+ɠ쬈G]j$xxdk&яPݴ~v:M?{X~w C&*j(m\A'Z+%uhZH- ݠS22j>?FLZ9&-c*lYQ=pۅZ}yқrO'"3bYȝYDs)_U%4%]=֜GBs. XF%H- -/"I1liK1'/tX>Yx1ҭ7LS]7'5hUaILJԠ=0g3k-8@^vr%7|QP UlABsl(.e@sMa`- F䌮?vQv] fr <چ_%|SY7 in8"'۬o4 {;xVN˽m%Δ=>otd7d|LTu=ovMiFuc:QTuD)'dWp!WNv0>S6t}bP)s3yw OԼcWY<8%uL)if¿Z4h7<\nX\N}AI(ǿK ʹ7™}e| DcPG|׮ …z>s7IzEz1,В^H~Mv Y\?ohk =wE.>D2\8c0￀lɰ1;/]4p+unFϕA^ybN ZӮ#_dѐIVfERw4 oslKZB̼rJfvBe/{TkEMc0ewDF&!~qӯN,^_&~{-=hj`"4bHuڛjU`HVGs@_Eܲz꽞J#YM9srO~ޮ8J(_is??^)62A:Lѯe2w (M3t28&.bh;mϧ{9ŵ"W( Bl@5Mm6‰2;ߙObm|3W+znɺ?[)olq' H=mSn (`;a(&ş[)k%/#.M $'dŠ_ kjqPȴWRS {Obtbpy$=JFSpf7XC)߭m|j,\ ~zLhmSh_Z9.A>8_7|~mޠB4km7" T0A>Ϊ߸ݮFX:>:962bso ާ=nNb $>4*g%"iH&x8\Lcs]ʃ NefYd mT iFI[H*AJnN[kl+2I+әr U,}'yK9s"HB;HP O.+A+YI?zc ܬp_![|!&;[Zz6v.3%ŵ8V~M.}&YeiLq?'1t)6rPt~AD 'F.UeS&"_-7{!iK7m]ePR^<~Z.ߟcVFu"&TΟV+"<}fGak FV~#)Mͱ}U[>8'^?>+ьtQ6uWg<ϧ#TSRM>:*+3RLme[h lo&DF߈cG}'Pq=Z{xy 51e_ա.U2cDڳD>}r*h*M5V /,K<|Bf>LGo38g/$.cC s|2e%n'~"Zr1b ?x9ԢXh<%*8z- r4CZ)OTرl(bk 6+__9d61* pȱ%<ĤprIth<=NxޕZn(7]=eKX61&yd䓉_c?K~\8g:v#POUޯ|QxsE?wSIDY*鍭ڍDXzכŭ$&RUh3tBfuKYnIg*σEeQr%0BhO.2[@{[/qwezg<@6"y#U}qȚg sy&$`N<}q#"dq~=/i_IfU,w#a=iM1rqaMM4M)}rϭ@٣~5zd|"E_i?GD$bBڏzPs"D/mCܹ[M틞ͶK7/U3|ѹ_´ 讒< B>1Puj˪}!˜*u:Œ1oh&W~q -rXneG ӿH_2,OWWu@06%6V!:N*} 1롄IO$ v(~/~MIN&Y{eK`e Ύb7 WJӗWmʛ06*SR vՂugVsonRʟSڬ}$$~qh #?F'H~mWa ][Mcv1`_rFZUb=6;Beob+۰+cT_$GAP>wqDy3jLcJ~ LYnOuCC"P@*2X1 ;x255ǺaSa-2W,{K3F//-@)DsݣHJ(e "ӊyV/Ww(pJޔ}?v@/mzGZz;7yp>q9ka~kY(:MjKڳ~t `ά6[2qN$K1J\ ~hYe2RstwY?Kv: ~OAi ~}SNuf34EXQO`Gb(Ï9)m%܆t1Qǁ*RBxmi_ՙ[oZݞ${rj,]:rK'qj%a*(!,ЛI6-!~\]{H?ڬ>w24.ti`h+1]v>rM'ֱ . [F[NJcޅz$mG}# 0 ~_=soBPGIW:ebLч!4v~ ئUqۘ#NF촛_ȋȨ + Sݖ+M;dtU >Zi/_Y#iOMLhrVjxP޲߂[iwRM+6+>N}8}9/hވyylf"h 9 %3UU}JQDtA2tvgOeO-8N2 f\cLpN$7M?9ؼυf  |Šu|ק喣ǡCv i#:Tx/!W*\Q RV@X/IEIC l+8$Ke)v(RэO~>߬dg6ad+j/en'=}Eo}ej(Vtsa=4v +ԓ?c~ST3wC멯4EƟžV Ot.fI zVW户3Բg}smSA9a@| plqf+'%?*4q\3F2.ѧybAMH! >8kbف~pVl\!TAv wƱy;h,a${Jz\'"[W]wTmG<,mfkcqfTZn:yКR 4[J+%+ 4ION(a9yx=:BOwj¾72ݟ}v w9zM82g,S7U=EU|BX雕* ͘x Ydܣk͹A]ݦy6ReB'{Wߞo_s/4 Ul}opEYM2.r$\NFxM,ViU{] C}=#֘ =VR (%$ces6@=Au\QJ|,0^^A&$]ƓFgGH~$ rAÛ +gh 9gILxHt5Wy 8=9|SV"{f?f<]E)?\I1.~pWdoFOc;6pZ;M7PN uZ2JiӖ.BS]'"MLrqU((79SaI0%4&ҌnΒ +0^6;Hͦ$Mdkګ`M7$ot遛Bq>L5&R<.2T4\5FJvdpȣ,t#4SNo:u52N"(Xڜ^ʜ"PUqK?;~ ם7zĸ]~rczze zq{!aV.JՀP F_FqLOce EX:dk&nFYhvjLi$1Xߤ6Oc63RAJmyDdˁJ#B)t&qWH>>=A1$]~_6jA ;dYǔ:rM+/uSZ1Dz#8z=tbIfL'b)3^bax<; af9,O徢7@N j߱2n\c7c5$WAV|c>YWX\vxlT[[}9|n*}sѤVԺU6t^K^0К żׅ΍ @b"ed蠬5) z[SEl<2 $re=j2'/!K{nO"=Tzo[%Ah^٥'.ݦչ&w`DsOTBU9{_=*z/#sfNuFsCHvf+Wj)BCdK]@ӓP$간e{"r&IGM {وvF5rw :N)q=-ZHZ+di{M5?[z65n\ݩȜ͹[8J&qmjz ֹ95Vvcκp>b{{=Ţx!IoտaA:Sw|3y3(r'D]VYDn`γ!^|,״9;zzJ[75+;wXmH ~(y$~$jRtH~ObM _zm7$)] \{ъ